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