這也太簡(jiǎn)單了?。ookeeper核心ZAB協(xié)議

來(lái)源:https://t.1yb.co/l5oJ


ZAB協(xié)議是什么?

ZAB 協(xié)議全稱(chēng):Zookeeper Atomic Broadcast(Zookeeper 原子廣播協(xié)議), 它保證Zookeeper 在主從系統(tǒng)架構(gòu)下,集群中各個(gè)節(jié)點(diǎn)之間數(shù)據(jù)的一致性。保證數(shù)據(jù)一致性的分兩種情況討論,一種集群正常運(yùn)行,一種集群不正常。

Zookeeper集群正常運(yùn)行時(shí)采用「消息廣播」模式保證;

Leader節(jié)點(diǎn)宕機(jī)情況下采用「崩潰恢復(fù)」模式,保證;

消息廣播

消息廣播,就是集群正常運(yùn)行時(shí)接收客戶(hù)端寫(xiě)請(qǐng)求,需要保證集群數(shù)據(jù)的一致。

消息廣播是一個(gè)原子廣播協(xié)議,類(lèi)似二階段提交過(guò)程。主要3個(gè)步驟:

Leader 接收客戶(hù)端的寫(xiě)請(qǐng)求

Leader 封裝事物Proposal消息,廣播給集群中的所有Follower,等待ACK響應(yīng)

當(dāng)Leader接收 Follwer的ACK響應(yīng)數(shù)過(guò)半(當(dāng)然包括自己),就commit自己本地?cái)?shù)據(jù),然后將commit請(qǐng)求廣播給集群中的Follwer

消息廣播大概流程如下:

結(jié)合上圖,看看消息廣播的具體細(xì)節(jié):

Leader 接收到請(qǐng)求后在進(jìn)行廣播事務(wù) Proposal 之前會(huì)為這個(gè)事務(wù)分配一個(gè) ZXID,再進(jìn)行廣播。

Leader 會(huì)為每個(gè)Follower都各自分配一個(gè)單獨(dú)的隊(duì)列,然后將需要廣播的事務(wù) Proposal 依次放入這些隊(duì)列中去,并根據(jù) FIFO 策略進(jìn)行消息的發(fā)送。

每個(gè)Follower 在接收到后都會(huì)以事務(wù)日志的形式寫(xiě)入到本地磁盤(pán)中,并且在成功寫(xiě)入后返回給 Leader一個(gè) ACK 響應(yīng)。

當(dāng)有超過(guò)半數(shù)的Follower ACK 響應(yīng)后,Leader 就會(huì)廣播一個(gè) Commit 消息給所有的 Follower,F(xiàn)ollower 接收到后就完成對(duì)事務(wù)的提交操作。

ZXID?的設(shè)計(jì)也很有特點(diǎn),是一個(gè)全局有序的?64?位的數(shù)字,可以分為兩個(gè)部分:

高?32?位是:epoch(紀(jì)元),代表著周期,每當(dāng)選舉產(chǎn)生一個(gè)新的?Leader?服務(wù)器時(shí)

就會(huì)取出其本地日志中最大事務(wù)的?ZXID?,解析出epoch(紀(jì)元)值操作加?1作為新的?epoch?,

并將低?32?位置零。

低?32?位是:counter(計(jì)數(shù)器),它是一個(gè)簡(jiǎn)單的單調(diào)遞增的計(jì)數(shù)器,針對(duì)客戶(hù)端的每個(gè)事務(wù)請(qǐng)求都會(huì)進(jìn)行加?1

畫(huà)個(gè)更詳細(xì)的圖:

崩潰恢復(fù)

崩潰恢復(fù),就是在Leader節(jié)點(diǎn)宕機(jī)的時(shí)候,重新選舉出Leader后(關(guān)于選舉機(jī)制可以參看這片文章),F(xiàn)ollower 同步新Leader時(shí),需要保證一致性。

在Leader節(jié)點(diǎn)宕機(jī)時(shí),可能會(huì)發(fā)生2種情況,針對(duì)這兩種情況我們來(lái)分析,它是怎么保證數(shù)據(jù)一致的。

Leader 在廣播事務(wù) Proposal 給所有 Follwer 之后宕機(jī),數(shù)據(jù)怎么處理?

Leader 在收到 ACK 并commit自己,同時(shí)發(fā)送了部分 commit 出去之后宕機(jī),數(shù)據(jù)怎么處理?

針對(duì)這2個(gè)情況,ZAB 定義了2個(gè)原則:

ZAB 協(xié)議會(huì)保存那些被Leader廣播Proposal且提交的事務(wù)。

ZAB 協(xié)議會(huì)丟棄那些被Leader廣播Proposal但沒(méi)提交的事務(wù)。

說(shuō)白了,就是Follwer接收到Leader的 commit請(qǐng)求的那些數(shù)據(jù)才有效。

在選舉機(jī)制這篇文章,我們就可以確定出新的Leader節(jié)點(diǎn)數(shù)據(jù)一定是最新的。然后Follower就進(jìn)行數(shù)據(jù)同步咯。

- END -

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開(kāi)了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽(tīng)閱讀 10,798評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書(shū)法閱讀 4,453評(píng)論 1 3
  • 沒(méi)事就多看看書(shū),因?yàn)楦褂性?shī)書(shū)氣自華,讀書(shū)萬(wàn)卷始通神。沒(méi)事就多出去旅游,別因?yàn)闆](méi)錢(qián)而找借口,因?yàn)橹灰闶〕詢(xún)€用,來(lái)...
    向陽(yáng)之心閱讀 4,964評(píng)論 3 11
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,460評(píng)論 2 7

友情鏈接更多精彩內(nèi)容