ZAB協(xié)議:
Zookeeper并沒有完全采用Paxos算法,而是使用Zookeeper Atomic Broadcast(ZAB回铛,Zookeeper原子消息廣播協(xié)議)協(xié)議保證數(shù)據(jù)一致性空民。ZAB協(xié)議并不像Paxos算法那樣摩渺,是一種通用的分布式一致性算法偶洋,而是專門為Zookeeper設(shè)計(jì)的崩潰可恢復(fù)的原子廣播消息算法饲趋。
其核心是定義了那些會(huì)改變Zookeeper數(shù)據(jù)狀態(tài)的事務(wù)請(qǐng)求處理方式幽邓,即:所有的事務(wù)都由全局唯一的Leader服務(wù)器協(xié)調(diào)處理炮温,其余的服務(wù)器被稱為Follower服務(wù)器,Leader服務(wù)器將客戶端的事務(wù)請(qǐng)求轉(zhuǎn)化為事務(wù)Proposal(提議)牵舵,并將Proposal提議分發(fā)給所有的Follower服務(wù)器柒啤,然后Leader服務(wù)器等待所有Follower服務(wù)器的反饋,當(dāng)“過半”Follower服務(wù)器正確的反饋后畸颅,Leader服務(wù)器會(huì)再次向所有Follower分發(fā)Commit消息担巩,要求Follower將前一個(gè)Proposql進(jìn)行提交。
消息廣播
類似于二階段提交過程没炒,不同的是移除了中斷(腦裂)邏輯涛癌,F(xiàn)ollower服務(wù)器要么正常反饋提交的事務(wù),要么拋棄Leader服務(wù)器,這也意味著Leader服務(wù)器可以在“過半”的Follower服務(wù)器正常ack之后就可以提交Proposal拳话。在消息廣播的過程中Leader會(huì)給每個(gè)Follower先匪。當(dāng)然這種簡(jiǎn)化二階段提交模式下,無法保證Leader服務(wù)器崩潰來的數(shù)據(jù)一致性問題弃衍,因此ZAB協(xié)議采用另一種模式崩潰恢復(fù)模式來解決這個(gè)問題
崩潰恢復(fù)
Zookeeper中呀非,當(dāng)Leader服務(wù)器出現(xiàn)崩潰或者“過半”的Follower服務(wù)器與Leader失去連接時(shí),就會(huì)進(jìn)入崩潰恢復(fù)模式镜盯,即通過Leader選舉算法選出新的Leader服務(wù)器岸裙,并且讓自身和其他Follower服務(wù)器感知到新的Leader服務(wù)器。ZAP協(xié)議設(shè)計(jì)出的Leader選舉算法需要保證兩個(gè)基本特性:第一速缆、已經(jīng)在Leader服務(wù)器提交過的事務(wù)Proposal最終在所有服務(wù)器都提交降允;第二、丟棄那些只是被Leader服務(wù)器提出過的事務(wù)Proposal激涤。針對(duì)這兩個(gè)基本特性拟糕,如果Leader選舉算法選出的新Leader服務(wù)器擁有集群中ZXID最大的事務(wù)判呕,那么新Leader服務(wù)器就擁有所有已經(jīng)提交的事務(wù)倦踢,這樣就可以省去Leader服務(wù)器檢查Proposal提交和丟棄的操作。
數(shù)據(jù)同步
新的Leader服務(wù)器會(huì)為每一個(gè)Follower服務(wù)器準(zhǔn)備一個(gè)隊(duì)列侠草,并將那些沒有被各Follower服務(wù)器提交的事務(wù)的Proposal逐個(gè)發(fā)送給各Follower服務(wù)器辱挥,Leader服務(wù)器等待正確的提議反饋,隨后發(fā)出Commit請(qǐng)求边涕,等到各個(gè)服務(wù)器都將事務(wù)同步到本地?cái)?shù)據(jù)庫中晤碘,Leader服務(wù)器將Follower服務(wù)器加入到可用的服務(wù)器列表中。
ZXID:低32位代表事務(wù)編號(hào)功蜓,Leader服務(wù)器每新產(chǎn)生一個(gè)事務(wù)會(huì)單調(diào)遞增1园爷;高32位代表Leader周期epoch編號(hào),隨每次新一輪的Leader選舉會(huì)將服務(wù)器中擁有最大ZXID的事務(wù)Proposal的ZXID高32位單調(diào)遞增1式撼,即代表Leader周期的變化策略
之前的Leader服務(wù)器恢復(fù)之后童社,根據(jù)ZXID的遞增策略,自己最大的ZXID必定比Quorum集合中更新的epoch的事務(wù)Proposal的ZXID要小著隆。所有會(huì)以Follower的角色加入集群扰楼,和Leader連接后,當(dāng)前Leader的最新事務(wù)Proposal會(huì)和Follower服務(wù)器上的事務(wù)Proposal進(jìn)行對(duì)比美浦,Leader會(huì)要求Follower進(jìn)行回退操作到過半服務(wù)器已經(jīng)提交的事務(wù)Proposal
======================================
下一章深入理解ZAB協(xié)議