7

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

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

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

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

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

4

1 回答 1

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

  2. 所有者由使用以下公式的一致哈希确定:

partitionId = hash(serialize(key)) % partitionCount

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

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

于 2015-06-03T15:35:42.357 回答