什麼是 ZooKeeper
ZooKeeper 的由來
下面這段內容摘自《從 Paxos 到 ZooKeeper 》第四章第一節的某段內容,推薦大家閱讀一下:
Zookeeper 最早起源於雅虎研究院的一個研究小組。在當時,研究人員發現,在雅虎內部很多大型系統基本都需要依賴一個類似的系統來進行分散式協調,但是這些系統往往都存在分散式單點問題。
所以,雅虎的開發人員就試圖開發一個通用的無單點問題的分散式協調框架,以便讓開發人員將精力集中在處理業務邏輯上。
關於「ZooKeeper」這個項目的名字,其實也有一段趣聞。在立項初期,考慮到之前內部很多項目都是使用動物的名字來命名的(例如著名的Pig項目),雅虎的工程師希望給這個項目也取一個動物的名字。
時任研究院的首席科學家 Raghu Ramakrishnan 開玩笑地說:「在這樣下去,我們這兒就變成動物園了!」
此話一出,大家紛紛表示就叫動物園管理員吧,因為各個以動物命名的分散式組件放在一起,雅虎的整個分散式系統看上去就像一個大型的動物園了。
而 Zookeeper 正好要用來進行分散式環境的協調,於是,Zookeeper 的名字也就由此誕生了。
ZooKeeper 概覽
ZooKeeper 是一個開源的分散式協調服務,ZooKeeper 框架最初是在「Yahoo!"上構建的,用於以簡單而穩健的方式訪問他們的應用程序。
後來,Apache ZooKeeper 成為 Hadoop,HBase 和其他分散式框架使用的有組織服務的標準。
例如,Apache HBase 使用 ZooKeeper 跟蹤分散式數據的狀態。
ZooKeeper 的設計目標是將那些複雜且容易出錯的分散式一致性服務封裝起來,構成一個高效可靠的原語集,並以一系列簡單易用的介面提供給用戶使用。
原語: 操作系統或計算機網路用語範疇。它是由若干條指令組成的,用於完成一定功能的一個過程。具有不可分割性,即原語的執行必須是連續的,在執行過程中不允許被中斷。
ZooKeeper 是一個典型的分散式數據一致性解決方案,分散式應用程序可以基於 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分散式協調/通知、集群管理、Master 選舉、分散式鎖和分散式隊列等功能。
ZooKeeper 一個最常用的使用場景就是用於擔任服務生產者和服務消費者的註冊中心。
服務生產者將自己提供的服務註冊到 ZooKeeper 中心,服務的消費者在進行服務調用的時候先到 ZooKeeper 中查找服務,獲取到服務生產者的詳細信息之後,再去調用服務生產者的內容與數據。
如下圖所示,在 Dubbo 架構中 ZooKeeper 就擔任了註冊中心這一角色。