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

gam*_*may 5 consistency eventual-consistency in-memory hazelcast

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

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

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

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

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

noc*_*ius 9

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

  2. 所有者使用以下公式通过一致性散列来确定:

partitionId = hash(serialize(key)) % partitionCount

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

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

  • 由于每当节点加入/离开时分区表都会发生变化,因此将在集群节点之间重新迁移数据.因此,节点不拥有其put键,但键始终是分布式的. (2认同)