2015-06-03 70 views
5

(我無法找到一個很好的來源解釋這一點,所以如果是其他地方,你可以只點我吧)Hazelcast:關於多節點一致性

  1. Hazelcast的所有節點將數據複製問題在集羣中。因此,如果在其中一個節點中更改了數據,節點是否更新其自己的副本,然後將其傳播到其他節點?

  2. 我在某處讀到每個數據都屬於一個節點,Hazelcast如何確定所有者?所有者是根據數據結構還是按數據結構中的每個鍵確定的?

  3. Hazelcast是否遵循「最終一致」原則? (當數據在節點間傳播時,可能會有一個小窗口,在此期間節點之間的數據可能不一致)

  4. 如何處理衝突? (兩個節點同時更新同一鍵值)

回答

8
  1. Hazelcast不復制(與ReplicatedMap的例外,顯然;-)),但分區的數據。這意味着你有一個擁有給定鍵的節點。該密鑰的所有更新都將發送給所有者,並通知可能的更新。

  2. 僱主是通過一致的散列使用下面的公式確定:

partitionId = hash(serialize(key)) % partitionCount

  • 由於每個鍵只有一個所有者它不是最終一致但一致,只要返回變異操作。接下來的所有讀取操作都會看到新的值。在正常的操作情況下。當發生任何類型的故障(網絡,主機,...)時,我們會選擇可用性而不是一致性,並且可能會發生尚未更新的備份被重新激活的情況(特別是在您使用異步備份時)。

  • 當拆分羣集重新合併時,裂腦會發生在裂腦之後。對於這種情況,您必須配置(或使用默認值)MergePolicy來定義相互衝突的元素如何合併在一起或哪一個勝出的行爲。

  • +1

    謝謝你的迴應。我有一個後續問題。假設有一個節點 - 節點A. 1.現在另一個節點B加入集羣,並插入帶有一些鍵值的映射。我假設B擁有地圖和插入的鍵。 2.現在B退出羣集。現在Hazelcast將複製A中的密鑰,這是唯一剩下的節點。 3.現在C加入集羣並讀取密鑰。 Hazelcast從A. 檢索關鍵值是否正確? – gammay

    +2

    由於每當節點加入/離開數據時分區表都會更改,因此將在羣集節點之間重新遷移。所以一個節點不擁有他的放置鍵,但鍵總是分佈的。 – noctarius