ZooKeeper并沒有直接采用Paxos算法,而是采用一種被稱為ZAB(ZooKeeper Atomic Broadcast)的一致性協議
ZooKeeper是一個典型的分布式數據一致性的解決方案,分布式應用程序可以基于它實現諸如數據發(fā)布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式隊列等功能
ZooKeeper致力于提供一個高性能、高可用,具有嚴格的順序訪問控制能力(主要是寫操作的嚴格順序性)的分布式協調服務
ZooKeeper會將全量數據保存在內存中,以此提高服務器吞吐、減少延遲
對于每個來自客戶端的更新請求,ZooKeeper會分配一個全局唯一的遞增編號來實現同步
集群角色
- Leader
- Follower
- Observer:不參與Leader選舉,致力于提高讀性能
ZooKeeper客戶端通過TCP連接服務器
數據節(jié)點:數據模型中的數據單元,ZNode
ZNode分為持久節(jié)點和臨時節(jié)點,臨時節(jié)點生命周期和客戶端會話綁定
Watcher
ZooKeeper允許用戶在指定節(jié)點上注冊一些Watcher,并且在一些特定事件觸發(fā)的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去
ZAB協議
ZAB協議并不像Paxos算法那樣,一種通用的分布式一致性算法,而是一種特別為ZooKeeper設計的崩潰可恢復的原子消息廣播算法
當Leader服務器不可用或者已經不存在過半服務器與該Leader服務器保持正常通信時,在重新開始新一輪的原子廣播事務操作之前,ZAB會進入恢復模式選舉新的Leader服務器,使集群彼此達到一個一致的狀態(tài),從消息廣播模式進入到崩潰恢復模式。當集群過半機器都與新的Leader服務器完成了狀態(tài)同步操作后ZAB協議會退出恢復模式
ZAB與Paxos聯系與區(qū)別
Paxos算法中,一個新的選舉產生的主進程會進行兩個階段的工作
1、讀階段,新的主進程會通過和所有其他進程進行通信的方式來搜集上一個主進程提出的提案,并將它們提交。
2、寫階段,當前主進程開始提出它自己的提案。
ZAB在Paxos基礎上額外添加一個同步階段。同步階段之前,ZAB協議存在一個和Paxos讀階段類似的發(fā)現(Discovery)階段
同步階段中,新的Leader會確保存在過半的Follower已經提交了之前Leader周期中的所有事務Proposal
發(fā)現階段的存在,確保所有進程都已經完成對之前所有事物Proposal的提交
ZAB協議主要用于構建一個高可用的分布式數據主備系統(tǒng),例如ZooKeeper
Paxos算法則是用于構建一個分布式的一致性狀態(tài)機系統(tǒng)