0

我们有一个数据系统,可以在几个地理位置之间进行写入和读取,这些地理位置之间的网络延迟很高(跨越几个大洲,但速度并不)。我们可以忍受“最后写入获胜”的冲突解决方案,特别是因为无法有意义地合并编辑。

理想情况下,我希望使用一个分布式系统,该系统允许快速的本地读取和写入,并在后台通过慢速连接处理复制和写入传播。Voldemort 或 Cassandra 中的数据中心感知功能是否提供此功能?

要么是这个,要么我们自己推出,可能基于使用 rsync之类的东西收集写入并自己解决冲突。

4

2 回答 2

0

You should be able to get the behavior you're looking for using Voldemort. (I can't speak to Cassandra, but imagine that it's similarly possible using it.)

The key settings in the configuration will be:

  • replication-factor — This is the total number of times the data is stored. Each put or delete operation must eventually hit this many nodes. A replication factor of n means it can be possible to tolerate up to n - 1 node failures without data loss.

  • required-reads — The least number of reads that can succeed without throwing an exception.

  • required-writes — The least number of writes that can succeed without the client getting back an exception.

So for your situation, the replication would be set to whatever number made sense for your redundancy requirements, while both required-reads and required-writes would be set to 1. Reads and writes would return quickly, with a concomitant risk of stale or lost data, and the data would only be replicated to the other nodes afterwards.

于 2012-07-23T22:10:13.877 回答
0

我对伏地魔没有经验,所以我只能评论卡桑德拉。

您可以将 Cassandra 部署到多个数据中心,其 DC 间延迟高于几毫秒(请参阅http://spyced.blogspot.com/2010/04/cassandra-fact-vs-fiction.html)。

为了确保快速的本地读取,您可以配置集群以将您的数据复制到每个数据中心的一定数量的节点(请参阅“网络拓扑策略”)。例如,您指定每个数据中心应始终有两个副本。因此,即使您在数据中心丢失了一个节点,您仍然可以在本地读取数据。

写入请求可以发送到 Cassandra 集群中的任何节点。因此,对于快速写入,您的客户端将始终与本地节点通信。接收请求的节点(“协调器”)将在后台将数据复制到其他节点(在其他数据中心中)。如果节点关闭,写入请求仍然会成功,并且协调器将在稍后将数据复制到失败的节点(“提示切换”)。

冲突解决基于客户端提供的时间戳。

如果您需要的不仅仅是最终的一致性,Cassandra 提供了几个一致性选项(包括数据中心感知选项)。

于 2012-07-29T12:53:40.053 回答