假设…我从澳大利亚login到一个networking应用程序,并更改一些数据。 在美国,我的同事正在使用相同的系统,并希望查看我更改的数据。 Web应用程序如何在澳大利亚用户本地部署,美国用户在本地部署(用于性能),但共享数据?
Google,Facebook或任何其他全球系统如何提高不同国家的用户的性能,但仍然保持数据同步,以防用户前往不同的位置或全球使用数据。 或者他们现实中的数据库服务器在一个位置?
至于Facebook,Google等:数据库服务器并不在同一个位置,当然也不是全部同步。 他们都在不同地理区域的几个服务器集群上采用分布式系统。
集群分布在许多国家。 集群之间更新的频率取决于系统对可接受工作的需求。
如果你采取Facebook例如:大多数时候你与自己的国家的朋友沟通。 因此,在您的国家保持服务器将立即生效,您的朋友将立即看到您的消息。
其他国家的朋友可能会有延迟,这取决于群集服务器节点更新的频率。 IIRC如果需要,Facebook群集通过请求来自其他群集的信息进行交互。 很多时候,我收到一条消息,比如说“这个用户更新状态,等等等等。 点击整条消息的链接时,我收到一条错误消息。 这是群集之间的同步问题。 有些信息已经同步,而其他信息没有。
如何构build基础架构取决于有多less用户,数据需要同步的频率等。
另一个例子,电子邮件:电子邮件系统是整个地球上的分布式系统。 与拥有100万用户的服务器相比,具有单个用户的服务器并不繁忙。 如何解决繁忙服务器的交付问题? 更分散的本地服务器? 更强大的服务器? 更强大的互联网连接? 上述所有的? 由于电子邮件的基本概念(将邮件从一个节点传递到另一个节点)不受电子邮件用户数量的影响,因此您需要devise特定系统以适应所有用户。 不pipe你如何devise你的系统,有时候邮件延迟交付,因为链中其他节点上的stream量太多了。
相同的概念适用于Facebook。 他们为特定地区devise和build造农场,但整个系统依赖“地理差异”。 也就是说,你更有可能与其他地区的用户进行互动。
至于你的特定问题:这一切都取决于有多less用户。
单个数据库服务器(或集群服务器)可能适合您。 如果需要分布式集群服务器场,那么你可能需要编写自己的系统来进行同步,比如Facebook和Google。 这个解决scheme取决于你的用户需要什么以及系统是如何工作的。 我不知道任何标准化的系统是“为所有人”解决scheme。
我在这里咆哮了很多,现在已经很晚了,我可能完全没有目标,但是,嘿,这是我的2美分。
干杯!
不知道这是多么有build设性,但谷歌声称有接近实时syncronicity。 他们甚至在自己的数据中心拥有自己的primefaces钟,以便进行正确的同步。 有线有一篇文章:
http://www.wired.com/wiredenterprise/2012/11/google-spanner-time/
这是一个众所周知的CS问题,总结为Eric Brewer的CAP定理。
不过Google似乎已经解决了这个问题,现在Google的扳手已经公开发布了https://cloud.google.com/spanner/
如果您还没有准备好使用扳手,那么您应该考虑数据要求的指导原则。 一致性,可用性或性能。 (帽)
有很多的文章和devise模式,所以我不会在这里回顾一下。