题 地理位置分散的Web应用程序如何处理存储的数据?


假设...我从澳大利亚登录到一个Web应用程序并更改了一些数据。在美国,我的同事正在使用相同的系统,并希望查看我已更改的数据。如何在本地为澳大利亚用户部署Web应用程序,在本地为美国用户部署(性能)但共享数据?

Google,Facebook或任何其他全球系统如何提高不同国家/地区用户的效果,但如果用户前往其他位置或全局使用数据,仍会保持数据同步。或者他们实际上是否将数据库服务器放在一个位置?


4
2018-02-08 00:46




en.wikipedia.org/wiki/Content_delivery_network - Matt


答案:


至于Facebook,谷歌等:数据库服务器并非全部在一个位置,当然也不是所有时间都完全同步。它们都在不同地理区域的几个服务器集群上使用分布式系统。

集群在许多国家/地区分发。集群之间的更新频率取决于系统对可接受的工作的需要。

如果你带Facebook,例如: 大多数时候,您与自己国家的朋友进行交流。因此,保持您所在国家/地区的服务器会立即生效,您的朋友会立即看到您的消息。
其他contries中的朋友可能会有延迟,具体取决于群集服务器节点的更新频率。如果需要,IIRC Facebook群集通过请求来自其他群集的信息进行交互。很多次我收到一条消息说“此用户更新状态为等等”。单击整个消息的链接时,我收到了一条错误消息。这是集群之间的同步问题。一些信息已经同步,而其他信息没有。

如何构建基础架构取决于用户数量,数据需要同步的频率等。

另一个例子,Email: 电子邮件系统是整个地球上的分布式系统。与具有100万用户的服务器相比,具有单个用户的服务器不那么繁忙。您如何解决繁忙服务器的交付问题?更多分布式本地服务器更强大的服务器?更强大的互联网连接?上述所有的? 由于电子邮件的基本概念(将消息从一个节点传递到另一个节点)不会改变,无论电子邮件用户的数量如何,您都需要设计特定的系统以适应所有用户。无论您如何设计系统,有时电子邮件的交付延迟,因为链中的其他节点上的流量太多。

同样的概念适用于Facebook。他们为特定地区设计和建造农场,但整个系统依赖于“地理差异”。也就是说,您比其他地区更有可能与您所在地区的用户进行互动。

至于你的特殊问题:这一切都取决于有多少用户。
单个数据库服务器(或群集服务器)可能适合您。如果需要分布式群集服务器群,那么您可能必须编写自己的系统进行同步,就像Facebook和谷歌那样。此解决方案取决于您的用户需求以及系统的工作方式。我不知道任何标准化的系统是“适合所有人”的解决方案。

我一直在这里咆哮很多,而且已经很晚了,我可能完全没有目标,但是嘿,这是我的2美分。

干杯!


5
2018-02-08 01:34





不确定这是多么有建设性,但谷歌声称具有接近实时的同步性。他们甚至在他们的数据中心拥有自己的原子钟,以实现正确的同步。有线有一篇文章:

http://www.wired.com/wiredenterprise/2012/11/google-spanner-time/


4
2018-02-08 01:40



非常有趣的文章确实。我设法忽视了这一点。感谢您发布此内容!但是,它只突出了问题的一部分(正如您所提到的),时间同步性。此解决方案是关于在处理许多数据中心(集群服务器场)时如何对同步数据进行排序。它没有解决在不同数据中心之间同步数据的问题。 - Sani Singh Huttunen
@SaniHuttunen - 关键词是ACID和Paxos协议。 Spanner是朝着正确方向迈出的一步,请参阅Google的Alex Lloyd的演讲,并阅读TL; DR版本: highscalability.com/blog/2012/10/22/... - Deer Hunter


这是众所周知的CS问题,总结为Eric Brewer的CAP定理。

然而,似乎Google可能已经解决了这个问题,谷歌扳手现已公开发布 https://cloud.google.com/spanner/

如果您还没准备好使用扳手,那么您应该考虑数据要求的指导原则。 一致性,可用性或性能。 (帽)

有很多文章和设计模式,所以我不会在这里回顾它。


1
2018-06-21 02:34