2014-01-15 31 views
1

我正在閱讀Apache ZooKeeper。我在互聯網上查看了很多文檔和文章,但是我對ZooKeeper的工作方式感到越來越困惑。什麼是ZooKeeper以及zookeeper的工作原理?

現在,我知道ZooKeeper爲跨節點同步提供了一個基礎架構,應用程序可以使用它來確保羣集中的任務被序列化或同步。它維護着一種由「znodes」組成的樹形文件系統。例如,我有一個集羣,它是一個主和兩個追隨者,並且在所有服務器中,這個樹文件系統結構總是相同的?如果我在跟隨者服務器之一中創建一個新的znode,整個羣集將會同步更改嗎?

另一個問題是,每個znode只能包含1M數據,因爲ZooKeeper不是被設計爲一個大型數據存儲來存放非常大的數據值。但是如果我需要一種分佈式數據庫來存儲大量數據,我該如何使用ZooKeeper來實現它?如果這個大數據沒有存儲在znode中,它應該存儲在哪裏以及ZooKeeper如何獲取這些數據?

回答

1

「但是如果我需要一種分佈式數據庫來存儲大量數據,我該如何使用ZooKeeper來實現它?」別。攪拌機不是汽車; Zookeeper不是一個大型數據存儲。

Zookeeper基本上是lock server,並不意味着存儲大量數據。相反,它通過暴露同步工具來幫助其他大型數據存儲(如HBase)實現consistency

作爲最終用戶(只想使用分佈式數據庫的人)zookeeper不是很有趣。它的目標讀者是編寫最終用戶可能需要的東西的服務/數據存儲作者。

0

ZooKeeper集合必須與多數人(包括主人)保持一致:您不能保證集合中的某個特定節點與主人保持同步。要做到這一點,您必須通過該節點實際編寫一些內容:然後該節點將被更新,隨後將發佈其更新。這是因爲寫入是線性的,即寫入嚴格按照一致性排序。

由於上述原因,我不會將ZooKeeper用於大容量存儲:每次存儲某些內容時,都會強制大部分節點進行更新。頻繁的寫入傳播明顯違背了你所期望的分佈式字符。堅持ZooKeeper的協調之間的客戶端,並利用這種協調來執行您的寫入實際分佈式/分片數據庫。