ZooKeeper 是什麼

ZooKeeper 是什麼?

  ZooKeeper 顧名思義 動物園管理員,他是拿來管大象(Hadoop) 、 蜜蜂(Hive) 、 小豬(Pig)  的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等項目中都採用到了 Zookeeper。ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,ZooKeeper是以Fast Paxos算法爲基礎,實現同步服務,配置維護和命名服務等分佈式應用。

ZooKeeper 如何工作?

  ZooKeeper是作爲分佈式應用建立更高層次的同步(synchronization)、配置管理 (configuration maintenance)、羣組(groups)以及名稱服務(naming)。在編程上,ZooKeeper設計很簡單,所使用的數據模型風格很像文件系統的目錄樹結構,簡單來說,有點類似windows中註冊表的結構,有名稱,有樹節點,有Key(鍵)/Value(值)對的關係,可以看做一個樹形結構的數據庫,分佈在不同的機器上做名稱管理。

   Zookeeper分爲2個部分:服務器端和客戶端,客戶端只連接到整個ZooKeeper服務的某個服務器上。客戶端使用並維護一個TCP連接,通過這個連接發送請求、接受響應、獲取觀察的事件以及發送心跳。如果這個TCP連接中斷,客戶端將嘗試連接到另外的ZooKeeper服務器。客戶端第一次連接到ZooKeeper服務時,接受這個連接的 ZooKeeper服務器會爲這個客戶端建立一個會話。當這個客戶端連接到另外的服務器時,這個會話會被新的服務器重新建立。

   啓動Zookeeper服務器集羣環境後,多個Zookeeper服務器在工作前會選舉出一個Leader,在接下來的工作中這個被選舉出來的Leader死了,而剩下的Zookeeper服務器會知道這個Leader死掉了,在活着的Zookeeper集羣中會繼續選出一個Leader,選舉出leader的目的是爲了可以在分佈式的環境中保證數據的一致性。如圖所示:

  另外,ZooKeeper 支持watch(觀察)的概念。客戶端可以在每個znode結點上設置一個觀察。如果被觀察服務端的znode結點有變更,那麼watch就會被觸發,這個watch所屬的客戶端將接收到一個通知包被告知結點已經發生變化。若客戶端和所連接的ZooKeeper服務器斷開連接時,其他客戶端也會收到一個通知,也就說一個Zookeeper服務器端可以對於多個客戶端,當然也可以多個Zookeeper服務器端可以對於多個客戶端,如圖所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章