0

在ZooKeeper的程序員指南的Consistency Guarantees部分,它指出動物園管理員會給「單系統映像」保證:ZooKeeper如何保證「單一系統映像」?

客戶端會看到相同的服務的認識,而將其連接到服務器。

根據ZAB協議,只有當超過一半的追隨者承認提案時,領導者才能進行交易。所以很可能不是所有的追隨者都處於同一狀態。

如果追隨者的狀態不一樣,ZooKeeper如何保證「單一系統狀態」?


參考文獻:

回答

2

領導者僅等待法定人數的答覆,以確認承諾進行交易。這並不意味着一些追隨者不需要承認交易或者可以「拒絕」。

最終當其他追隨者處理來自領導者的提交消息或作爲同步的一部分時,將具有與主服務器相同的狀態(有一些延遲)。 (不要與最終一致性相混淆)

如何延遲可以跟隨的狀態是依賴於配置項syncLimit &滾動時間(https://zookeeper.apache.org/doc/current/zookeeperAdmin.html

追隨者最多隻能是落後前syncLimit *滾動時間時間單位被丟棄。

1

所有的讀取和寫入操作被認爲是成功之前去大部分的節點,所以沒有按以下方式進行讀一個寫不知道以前的寫。至少有一個節點知道它。 (否則n/2 + 1 + n/2 + 1> n,這是錯誤的)。至少很多人(至多隻有一個人)對世界有過時的看法並不重要,因爲至少有一個人知道它所有。

如果足夠多的節點崩潰或網絡變成分區,以至於沒有能夠彼此通信的節點組佔多數,Zab將停止處理請求。如果您確認的更新被一組消失且不再回到線上的節點所接受,那麼您的羣集將丟失一些數據(但只有當您要求它繼續前進並將其死節點留在後面時)。

處理兩個以上的請求是通過一次處理兩個請求來完成的,直到只剩下一個狀態。