我正在开发一个部署在亚马逊EC2服务器实例上的解决方案,该实例的区域设置为美国西部。该解决方案使用mongodb进行数据存储,并包含移动应用程序使用的web服务。移动应用程序的用户群在美国和亚洲之间的比例为40:60,因此我需要在亚太地区设置另一个EC2实例,以降低他们的延迟和连接时间。
由于数据存储位于美国西部的实例上,我如何在亚太地区设置一个新实例,以便与美国西部实例共享相同的数据?我对将mongodb数据库迁移到其他地方持开放态度,但我不想更改为不同的NoSQL解决方案。
发布于 2013-01-31 23:34:32
这里有各种不同的解决方案。我将尝试提供一些。
副本集
也许最简单的解决方案是使用副本集,其中您在美国东部有两台服务器,在亚洲有一台。MongoDB中的副本集至少需要三个节点才能工作,而且由于您在美国东部附近有更多的用户,因此将其放在那里是有意义的。
现在,只需解决三个节点,就可以使用其中一个节点获得更接近亚洲的数据。然后,您需要使用Read Preferences来指示您的应用程序从US-EAST或ASIA节点之一进行读取。我在http://derickrethans.nl/readpreferences.html上写了一篇关于PHP如何处理这些阅读偏好的文章--其他语言驱动程序也会有类似的解决方案。
所有驱动程序都将维护到每个副本集节点的连接,因此连接开销应该不是太大的问题。但至少您可以从最近的节点进行读取,以解决延迟问题。写操作始终必须转到主节点(很可能在美国东部)。
分片
分片是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/上有一个非常好的介绍
希望这能有所帮助!
发布于 2013-01-31 22:46:59
如果你的应用程序读起来很重,我会使用mongodb的Replica sets:
https://stackoverflow.com/questions/14626653
复制相似问题