ZooKeeper是一種分佈式協調服務,用於管理大型主機。在分佈式環境中協調和管理服務是一個複雜的過程。ZooKeeper經過其簡單的架構和API解決了這個問題。ZooKeeper容許開發人員專一於核心應用程序邏輯,而沒必要擔憂應用程序的分佈式特性。算法
ZooKeeper框架最初是在「Yahoo!"上構建的,用於以簡單而穩健的方式訪問他們的應用程序。 後來,Apache ZooKeeper成爲Hadoop,HBase和其餘分佈式框架使用的有組織服務的標準。 例如,Apache HBase使用ZooKeeper跟蹤分佈式數據的狀態。安全
在進一步深刻以前,咱們瞭解關於分佈式應用的一兩件事情是很重要的。所以,讓咱們開始分佈式應用的概述的快速討論。服務器
分佈式應用能夠在給定時間(同時)在網絡中的多個系統上運行,經過協調它們以快速有效的方式完成特定任務。一般來講,對於複雜而耗時的任務,非分佈式應用(運行在單個系統中)須要幾個小時才能完成,而分佈式應用經過使用全部系統涉及的計算能力能夠在幾分鐘內完成。網絡
經過將分佈式應用配置爲在更多系統上運行,能夠進一步減小完成任務的時間。分佈式應用正在運行的一組系統稱爲集羣,而在集羣中運行的每臺機器被稱爲節點。架構
分佈式應用有兩部分, Server(服務器) 和 Client(客戶端) 應用程序。服務器應用程序其實是分佈式的,並具備通用接口,以便客戶端能夠鏈接到集羣中的任何服務器並得到相同的結果。 客戶端應用程序是與分佈式應用進行交互的工具。框架
可靠性 - 單個或幾個系統的故障不會使整個系統出現故障。分佈式
可擴展性 - 能夠在須要時增長性能,經過添加更多機器,在應用程序配置中進行微小的更改,而不會有停機時間。工具
透明性 - 隱藏系統的複雜性,並將其顯示爲單個實體/應用程序。oop
競爭條件 - 兩個或多個機器嘗試執行特定任務,實際上只需在任意給定時間由單個機器完成。例如,共享資源只能在任意給定時間由單個機器修改。性能
死鎖 - 兩個或多個操做等待彼此無限期完成。
不一致 - 數據的部分失敗。
ZooKeeper提供的常見服務以下 :
命名服務 - 按名稱標識集羣中的節點。它相似於DNS,但僅對於節點。
配置管理 - 加入節點的最近的和最新的系統配置信息。
集羣管理 - 實時地在集羣和節點狀態中加入/離開節點。
選舉算法 - 選舉一個節點做爲協調目的的leader。
鎖定和同步服務 - 在修改數據的同時鎖定數據。此機制可幫助你在鏈接其餘分佈式應用程序(如Apache HBase)時進行自動故障恢復。
高度可靠的數據註冊表 - 即便在一個或幾個節點關閉時也能夠得到數據。
如下是使用ZooKeeper的好處:
簡單的分佈式協調過程
同步 - 服務器進程之間的相互排斥和協做。此過程有助於Apache HBase進行配置管理。
有序的消息
序列化 - 根據特定規則對數據進行編碼。確保應用程序運行一致。這種方法能夠在MapReduce中用來協調隊列以執行運行的線程。
可靠性
原子性 - 數據轉移徹底成功或徹底失敗,但沒有事務是部分的。