2011-03-24 60 views
16

Apache ZooKeeper是一種用於小型對象的高可用性數據存儲。 ZooKeeper集羣由一些節點組成,這些節點都將整個數據集保存在其內存中。數據集稱爲「始終一致」,因此每個節點每次都有相同的數據。Apache ZooKeeper:寫入是如何工作的

根據文檔和blog posts,集羣中的每個節點都可以回答讀取和寫入接受。

  • 讀取總是由節點本地回答,因此不涉及與羣集的通信。
  • 寫入被轉發到指定的「Leader」節點,該節點將寫入請求轉發給所有節點並等待其答覆。如果至少有一半的節點應答,則認爲寫入成功。

問題:爲什麼領導者等待一半節點回復就足夠了?如果有人連接到其中一個沒有收到更新的節點,他會得到一個過期的結果(只有本地讀取到本地值)。

回答

17

爲了獲得高讀取可用性,Zookeeper保證複製的弱一致性:讀取總是可以由客戶機節點回答,並且返回的答案可能是陳舊的值(即使是新版本通過領導者承諾)。

然後,它是用戶的責任,決定讀的答案是否‘過時,能夠’與否,因爲並不是所有的應用程序都需要向上的最新信息。因此,提供了以下選擇:

1)如果你的應用並不需要最新的最新值讀取,你可以直接從客戶端請求數據獲得高讀取可用性。

2)如果你的應用需要先進的日期值進行讀取,您應該使用「同步」 API你讀請求之前同步客戶端版本中的佼佼者。

所以作爲結論,動物園管理員提供了一個可定製的一致性保證,用戶可以決定的可用性和一致性之間的平衡。

如果您想了解更多關於動物園管理員的內部,我建議提出:ZooKeeper: Wait-free coordination for Internet-scale systems。 4.4節描述了上述策略。