【问题标题】:Hazelcast: Questions regarding multi-node consistencyHazelcast:关于多节点一致性的问题
【发布时间】:2015-08-17 20:59:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: hazelcast consistency in-memory eventual-consistency


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

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

    partitionId = hash(serialize(key)) % partitionCount

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

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

    【讨论】:

    • 感谢您的回复。我有一个后续问题。假设有一个节点 - 节点 A。 1. 现在另一个节点 B 加入集群并插入带有一些键值的映射。我假设 B 拥有地图和它插入的键。 2. 现在 B 退出集群。 Hazelcast 现在将复制 A 中的密钥,这是唯一剩余的节点。 3. 现在 C 加入集群并读取密钥。 Hazelcast 从 A 中检索键值。是这样吗?
    • 由于分区表在节点加入/离开时发生变化,数据将在集群节点之间重新迁移。所以一个节点不拥有他的 put 密钥,但密钥始终是分布式的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多