可能是全網把 ZooKeeper 概念講的最清楚的一篇文章
前言
相信大家對 ZooKeeper 應該不算陌生。但是你真的瞭解 ZooKeeper 是個什麼東西嗎?如果別人/面試官讓你給他講講 ZooKeeper 是個什麼東西,你能回答到什麼地步呢?
我本人曾經使用過 ZooKeeper 作為 Dubbo 的註冊中心,另外在搭建 solr 叢集的時候,我使用到了 ZooKeeper 作為 solr 叢集的管理工具。前幾天,總結專案經驗的時候,我突然問自己 ZooKeeper 到底是個什麼東西?想了半天,腦海中只是簡單的能浮現出幾句話:“①Zookeeper 可以被用作註冊中心。 ②Zookeeper 是 Hadoop 生態系統的一員;③構建 Zookeeper 叢集的時候,使用的伺服器最好是奇數臺。” 可見,我對於 Zookeeper 的理解僅僅是停留在了表面。
所以,通過本文,希望帶大家稍微詳細的瞭解一下 ZooKeeper 。如果沒有學過 ZooKeeper ,那麼本文將會是你進入 ZooKeeper 大門的墊腳磚。如果你已經接觸過 ZooKeeper ,那麼本文將帶你回顧一下 ZooKeeper 的一些基礎概念。
最後,本文只涉及 ZooKeeper 的一些概念,並不涉及 ZooKeeper 的使用以及 ZooKeeper 叢集的搭建。 網上有介紹 ZooKeeper 的使用以及搭建 ZooKeeper 叢集的文章,大家有需要可以自行查閱。
一 什麼是 ZooKeeper
ZooKeeper 的由來
下面這段內容摘自《從Paxos到Zookeeper 》第四章第一節的某段內容,推薦大家閱讀以下:
Zookeeper最早起源於雅虎研究院的一個研究小組。在當時,研究人員發現,在雅虎內部很多大型系統基本都需要依賴一個類似的系統來進行分散式協調,但是這些系統往往都存在分散式單點問題。所以,雅虎的開發人員就試圖開發一個通用的無單點問題的分散式協調框架,以便讓開發人員將精力集中在處理業務邏輯上。
關於“ZooKeeper”這個專案的名字,其實也有一段趣聞。在立項初期,考慮到之前內部很多專案都是使用動物的名字來命名的(例如著名的Pig專案),雅虎的工程師希望給這個專案也取一個動物的名字。時任研究院的首席科學家RaghuRamakrishnan開玩笑地說:“在這樣下去,我們這兒就變成動物園了!”此話一出,大家紛紛表示就叫動物園管理員吧一一一因為各個以動物命名的分散式元件放在一起,雅虎的整個分散式系統看上去就像一個大型的動物園了,而Zookeeper正好要用來進行分散式環境的協調一一於是,Zookeeper的名字也就由此誕生了。
1.1 ZooKeeper 概覽
ZooKeeper 是一個開源的分散式協調服務,ZooKeeper框架最初是在“Yahoo!"上構建的,用於以簡單而穩健的方式訪問他們的應用程式。 後來,Apache ZooKeeper成為Hadoop,HBase和其他分散式框架使用的有組織服務的標準。 例如,Apache HBase使用ZooKeeper跟蹤分散式資料的狀態。ZooKeeper 的設計目標是將那些複雜且容易出錯的分散式一致性服務封裝起來,構成一個高效可靠的原語集,並以一系列簡單易用的介面提供給使用者使用。