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

Hazelcast: Questions regarding multi-node consistency

(我找不到很好的资源来解释这个,所以如果它在其他地方可用,你可以指给我看)

  1. Hazelcast 跨集群中的所有节点复制数据。那么,如果其中一个节点中的数据发生更改,该节点是否会更新自己的副本,然后将其传播到其他节点?

  2. 我在某处看到每个数据都属于一个节点,Hazelcast 是如何确定所有者的?所有者是按数据结构还是按数据结构中的键确定的?

  3. Hazelcast 是否遵循 "eventually consistent" 原则? (当数据跨节点传播时,可能会有一个小的window,期间节点之间的数据可能不一致)

  4. 如何处理冲突? (两个节点同时更新同一个key-value)

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

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

partitionId = hash(serialize(key)) % partitionCount

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

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