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

Hazelcast:关于多节点一致性的问题,hazelcast,consistency,in-memory,eventual-consistency,Hazelcast,Consistency,In Memory,Eventual Consistency,(我找不到一个好的来源来解释这一点,所以如果在其他地方可以找到,你可以指给我看) Hazelcast跨集群中的所有节点复制数据。那么,如果其中一个节点中的数据发生了更改,该节点是否会更新自己的副本,然后将其传播到其他节点 我在某处读到,每个数据都属于一个节点,Hazelcast如何确定所有者?所有者是按数据结构还是按数据结构中的每个键确定的 Hazelcast是否遵循“最终一致”原则?(当数据在节点间传播时,可能存在一个小窗口,在此期间,节点之间的数据可能不一致) 如何处理冲突?(两个节点同时更

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

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

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

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

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

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

  • 所有者由使用以下公式的一致散列确定:

  • partitionId=hash(序列化(键))%partitionCount

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

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


  • 谢谢你的回复。我有一个后续问题。比如说,有一个节点——节点A.1。现在,另一个节点B加入集群并插入带有一些键值的映射。我假设B拥有地图和它插入的钥匙。2.现在B退出集群。Hazelcast现在将复制A中的密钥,A是唯一剩下的节点。3.现在C加入集群并读取密钥。Hazelcast从A检索键值。这是否正确?因为每当节点加入/离开时,分区表都会更改,因此数据将在集群节点之间重新迁移。因此,节点不拥有put密钥,但密钥始终是分布式的。