Zookeeper 是一個開放源代碼的分佈式協調服務,由雅虎建立,是 Google Chubby 的開源實現;node
Zookeeper 是典型的分佈式數據一致性的解決方案,分佈式應用程序能夠基於它來實現:數據發佈/訂閱、負載均衡、命名服務、分佈式鎖等;api
Zookeeper 中有 Leader、Follower 和 Observer 三種角色,Leader 爲客戶端提供讀和寫服務,Follower 和 Observer 只提供讀服務;服務器
其中 Observer 不參與 Leader 過程,也不參與寫操做的「過半寫成功」的策略,因此增長 Observer 機器能夠在不影響寫性能的狀況下增長讀性能;app
事務請求的惟一調度和處理者,保證集羣事務處理的順序性;負載均衡
集羣內部各服務器的調度者;分佈式
Follower 服務器是 ZK 集羣狀態的跟隨者。性能
處理客戶端非事務請求,轉發事務請求給 Leader 服務器;spa
參與事務請求 Proposal 的投票;開放源代碼
參與 Leader 選舉投票;日誌
ZK 3.3.0 引入的全新服務器角色;
觀察 ZK 集羣的最新狀態變化並將這些狀態變動同步過來。
對於非事務請求能夠獨立處理,但事務請求會轉發給 Leader 服務器;
也不參與任何形式的投票,包括事務請求 Proposal 和 Leader 選舉投票;
Observer 只提供非事務服務;
做用:在不傷害寫性能的狀況下擴展 ZK;
Zookeeper 也使用文件系統組織系統中存儲的資源,結構以下所示:
/
/app1/c1
/app1/c2
/app1/c3
/app2/...
其並無文件和文件夾的概念,只有 Znode 概念,它既能夠做爲容器存儲數據,也能夠持有其餘 Znode 造成父子關係;
ZK 的視圖結構和標準的 Unix 文件系統很是相似,如:/app1/c1
Znode 是 ZK 中數據的最小單元;
每一個 ZNode 上均可以保存數據;
同時還能夠掛載子節點,構成一個層次化的命名空間,稱之爲樹;
數據節點建立、刪除、節點內容更新和客戶端會話建立與失效等操做,都是事務操做;
每個事務請求都會爲其分配一個全局惟一的事務 ID,用 ZXID 表示,一般是 64 位數字;
建立後一直存在於 ZK 服務器上,直到主動刪除
增長順序的特性,每一個父節點都會維護它的第一級子節點的順序;
ZK 自動會給節點名加上一個數字後綴,後綴的上限是整型的最大值;
臨時節點的生命週期和客戶端的會話綁定,會話結束則節點消失;
臨時節點不能有子節點,即臨時節點只能做爲葉子節點;
增長了順序特性;
不肯定 leader 狀態(選主中);
對外不提供服務;
跟隨者狀態;
做爲系統的從節點,接收主節點的更新並寫入本地日誌;
領導者狀態;
做爲系統的主節點,接收客戶端更新,寫入本地日誌,並通知從節點複製;
觀察者狀態;
表示當前角色是 Observer,與 Follower 不一樣是不參與投票和選舉;