Hazelcast:关于多节点一致性的问题

时间:2015-06-03 14:55:36

标签: hazelcast consistency in-memory eventual-consistency

(我找不到一个好的消息来源解释这个,所以如果它可以在其他地方找到,你可以指出我)

  1. Hazelcast在群集中的所有节点之间复制数据。因此,如果在其中一个节点中更改了数据,节点是否会更新自己的副本,然后将其传播到其他节点?

  2. 我在某处读到每个数据都归节点所有,Hazelcast如何确定所有者?业主是根据数据结构中的每个数据结构还是按键确定的?

  3. Hazelcast遵循“最终一致”的原则吗? (当数据在节点之间传播时,可能会有一个小窗口,在此期间数据可能在节点之间不一致)

  4. 如何处理冲突? (两个节点同时更新相同的键值)

1 个答案:

答案 0 :(得分:9)

  1. Hazelcast不复制(除了ReplicatedMap,显然;-))但是分区数据。这意味着您拥有一个拥有给定密钥的节点。该密钥的所有更新都将发送给所有者,并通知可能的更新。

  2. 使用以下公式通过一致性哈希确定所有者:

  3. partitionId = hash(serialize(key)) % partitionCount

    1. 由于每个键只有一个所有者,因此每当返回变异操作时,它最终都不一致但是一致。以下所有读操作都将看到新值。在正常的运营情况下。当发生任何类型的故障时(网络,主机......),我们选择可用性而不是一致性,并且可能会重新激活尚未更新的备份(特别是如果您使用异步备份)。

    2. 当拆分群集重新合并时,裂脑可能会发生冲突。对于这种情况,您必须配置(或使用默认值)MergePolicy来定义冲突元素如何合并在一起或两者中的哪一个获胜的行为。