两个Amazon EC2实例如何共享相同的数据?

时间:2013-01-31 13:14:24

标签: mongodb networking amazon-ec2

我正在研究部署在Amazon EC2服务器实例上的解决方案,该实例的区域设置为US WEST。该解决方案使用mongodb进行数据存储,并包含移动应用程序使用的Web服务。移动应用程序的用户群在美国和亚洲之间以40:60分开,因此我需要在亚太地区设置另一个EC2实例以降低其延迟和连接时间。

由于数据存储位于US WEST的实例上,我如何在亚太地区设置一个可以与US WEST实例共享相同数据的新实例?我愿意在其他地方移动mongodb数据库,但我不想改为使用不同的NoSQL解决方案。

2 个答案:

答案 0 :(得分:4)

这里有各种不同的解决方案。我会尝试提供一些。

副本集

最简单的解决方案可能是使用副本集,其中US-EAST中有两个服务器,ASIA中有一个服务器。 MongoDB中的副本集至少需要三个节点才能正常工作,因为在US-EAST附近有更多的用户,所以将它放在那里是有意义的。

现在,只有三个节点,您只能解决使用其中一个节点更接近ASIA的数据。然后,您需要使用“读取首选项”来指示您的应用程序从US-EAST或ASIA节点之一读取。我写了一篇关于PHP如何在http://derickrethans.nl/readpreferences.html处理那些阅读首选项的文章 - 其他语言驱动程序将有类似的解决方案。

所有驱动程序都将保持与每个副本集节点的连接,因此连接开销不应该是一个太大的问题。但至少你可以从最近的节点读取以解决延迟。写作仍然总是要去初级(可能在美国东部)。

  • 优点:设置相当容易,只需要三个节点
  • 缺点:仅适用于指导读取,但不适用于写入

<强>拆分

Sharding是MongoDB中的一种方法,它允许您将整个数据集分成更小的部分,以便可以将大型数据集放入MongoDB,而不受一个服务器资源的限制。通常,分片设置由至少两个分片组成,每个分片包含一个(3个节点)副本集,但也可能只有一个节点组成一个复制集,这意味着你最终会有两个分片,每个分片包含一个一个数据节点。

MongoDB中的分片支持“标记识别分片”(http://mongodb.onconfluence.com/display/DOCS/Tag+Aware+Sharding),这使得可以根据文档中的字段将特定文档重定向到特定分片。如果你的文件是f.e.有一系列用户想法或国家/地区代码,您可以使用它来将文档重定向到正确的分片。

然而,设置它并不容易,因为它需要非常好地理解MongoDB的分片。在http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/

上有一个非常好的介绍
  • 优点:允许您将数据本地化到一个特定位置以进行读写操作
  • 缺点:不易设置,需要两个数据节点,配置服务器和代理服务器。

希望这有帮助!

答案 1 :(得分:1)

如果您的应用程序读得很重,我会使用mongodb的Replica sets: