ZAB協(xié)議:
ZAB協(xié)議是為zookeeper設(shè)計(jì)的原子廣播協(xié)議,借鑒Paxos算法,是一種分布式一致性算法,保證zookeeper集群中數(shù)據(jù)最終一致性浮入。
zab協(xié)議只允許leader處理來(lái)自客戶(hù)端的事務(wù)請(qǐng)求。當(dāng)leader收到請(qǐng)求后羊异,將事務(wù)請(qǐng)求轉(zhuǎn)化成事務(wù)proposal事秀,由于leader為每一個(gè)follower創(chuàng)建一個(gè)隊(duì)列,并把該事務(wù)放入響應(yīng)隊(duì)列中野舶,保證事務(wù)的順序性易迹。之后在隊(duì)列中順序地向follower廣播該提案。follower接收到提案后平道,以事務(wù)的形式寫(xiě)入本地日志中睹欲,并向leader發(fā)送ack。當(dāng)超過(guò)半數(shù)的follower向leader發(fā)送恢復(fù)巢掺,leader會(huì)向其他節(jié)點(diǎn)發(fā)送commit消息句伶,同時(shí)leader提交該事務(wù)劲蜻。
zab協(xié)議有故障恢復(fù)和消息廣播組成
當(dāng)系統(tǒng)啟動(dòng)或leader服務(wù)器出現(xiàn)故障時(shí)候陆淀,進(jìn)入故障恢復(fù)模式。將會(huì)開(kāi)始新的選舉先嬉,選舉產(chǎn)生的leader與過(guò)半的follower進(jìn)行數(shù)據(jù)同步轧苫。同步結(jié)束后,將進(jìn)入消息廣播模式疫蔓。如果檢測(cè)到有l(wèi)eader在廣播消息含懊,會(huì)自動(dòng)進(jìn)入恢復(fù)模式。當(dāng)完成與leader同步之后衅胀,進(jìn)入消息廣播模式岔乔。
zookeeper:
zooKeeper是一種為分布式應(yīng)用所設(shè)計(jì)的高可用、高性能且一致的開(kāi)源協(xié)調(diào)服務(wù)滚躯,基于ZAB協(xié)議雏门,實(shí)現(xiàn)一種主備模式和架構(gòu)來(lái)保持集群數(shù)據(jù)的一致性。
zookeeper使得分布式應(yīng)用可以通過(guò)一個(gè)共享的樹(shù)形結(jié)構(gòu)命名空間實(shí)現(xiàn)協(xié)調(diào)掸掏。zookeeper將所有的數(shù)據(jù)存儲(chǔ)在內(nèi)存中茁影,zookeeper集群中任何一臺(tái)機(jī)器都可以響應(yīng)客戶(hù)端的讀操作,但只有一臺(tái)機(jī)器響應(yīng)客戶(hù)端的寫(xiě)操作丧凤,因此更適合以讀操作為主的應(yīng)用場(chǎng)景募闲。
zookeeper中有三種角色:leader、follower愿待、observer
leader是通過(guò)選舉來(lái)確定浩螺,為客戶(hù)端提供讀寫(xiě)功能
follower提供讀功能靴患,可以參與選擇leader的選舉
observer不參與選舉,也不參與過(guò)半寫(xiě)成功策略年扩,提升集群的讀性能
zookeeper節(jié)點(diǎn)分為臨時(shí)節(jié)點(diǎn)蚁廓、持久節(jié)點(diǎn)、順序節(jié)點(diǎn)厨幻,每一個(gè)節(jié)點(diǎn)都有stat結(jié)構(gòu)相嵌,重要的功能就是watcher功能,開(kāi)源客戶(hù)端:zkclient况脆、curator