(我找不到一个好的消息来源解释这个,所以如果它可以在其他地方找到,你可以指出我)
Hazelcast在群集中的所有节点之间复制数据。因此,如果在其中一个节点中更改了数据,节点是否会更新自己的副本,然后将其传播到其他节点?
我在某处读到每个数据都归节点所有,Hazelcast如何确定所有者?业主是根据数据结构中的每个数据结构还是按键确定的?
Hazelcast遵循“最终一致”的原则吗? (当数据在节点之间传播时,可能会有一个小窗口,在此期间数据可能在节点之间不一致)
如何处理冲突? (两个节点同时更新相同的键值)
答案 0 :(得分:9)
Hazelcast不复制(除了ReplicatedMap,显然;-))但是分区数据。这意味着您拥有一个拥有给定密钥的节点。该密钥的所有更新都将发送给所有者,并通知可能的更新。
使用以下公式通过一致性哈希确定所有者:
partitionId = hash(serialize(key)) % partitionCount
由于每个键只有一个所有者,因此每当返回变异操作时,它最终都不一致但是一致。以下所有读操作都将看到新值。在正常的运营情况下。当发生任何类型的故障时(网络,主机......),我们选择可用性而不是一致性,并且可能会重新激活尚未更新的备份(特别是如果您使用异步备份)。
当拆分群集重新合并时,裂脑可能会发生冲突。对于这种情况,您必须配置(或使用默认值)MergePolicy来定义冲突元素如何合并在一起或两者中的哪一个获胜的行为。