有責(zé)任感的 zab

定義

Zookeeper Atomic Broadcast

Zookeeper 是通過 Zab 協(xié)議來保證分布式事務(wù)的最終一致性。

原因

Multi-Paxos 雖然能就一系列值達(dá)成共識(shí),但不關(guān)心共識(shí)后的值是什么,同時(shí)它也不關(guān)心指令的順序性。

而 zab 協(xié)議借鑒了 paxos,但是它是特別為Zookeeper設(shè)計(jì)的支持崩潰恢復(fù)的原子廣播協(xié)議

模型

zab 實(shí)現(xiàn)了一個(gè)主備的模型,只有一臺(tái) leader 負(fù)責(zé)處理外部的寫事務(wù)請(qǐng)求,然后同步給其他 follower。

Zookeeper 客戶端會(huì)隨機(jī)的鏈接到 zookeeper 集群中的一個(gè)節(jié)點(diǎn),如果是讀請(qǐng)求,就直接從當(dāng)前節(jié)點(diǎn)中讀取數(shù)據(jù);如果是寫請(qǐng)求,那么節(jié)點(diǎn)就會(huì)向 Leader 提交事務(wù),Leader 接收到事務(wù)提交,會(huì)廣播該事務(wù),只要超過半數(shù)節(jié)點(diǎn)寫入成功,該事務(wù)就會(huì)被提交。

要點(diǎn)

消息廣播

基本過程

  1. leader 收到消息
  2. leader 廣播消息
  3. leader 收到大多數(shù) follower 的確認(rèn)
  4. leader 向所有 follower 廣播 commit 消息,同時(shí)自身也會(huì)完成事務(wù)提交
  5. follower 收到 commit 并自己 commit

細(xì)節(jié)點(diǎn)

  • 每個(gè)事務(wù)都有一個(gè)全局遞增的唯一 ID,ZXID,zab需要保證執(zhí)行順序,每個(gè)事務(wù)必須按 ZXID 排序后處理
  • leader 和 每一個(gè) follower 之間都有一個(gè) FIFO queue,除了解耦之外,同時(shí)也一定程度的保證了事務(wù)的執(zhí)行順序

崩潰恢復(fù)

原則

  • ZAB 協(xié)議確保那些已經(jīng)在 Leader 提交的事務(wù)最終會(huì)被所有服務(wù)器提交。
  • ZAB 協(xié)議確保丟棄那些只在 Leader 提出/復(fù)制,但沒有提交的事務(wù)。

實(shí)現(xiàn)方式

  1. 崩潰后進(jìn)行選舉
  2. 根據(jù) ZXID 選舉 leader,ZXID 最大,同時(shí)新選舉出來的 Leader 不能包含未提交的 Proposal
  3. 選舉成功開始同步數(shù)據(jù)
  4. leader 確認(rèn)事務(wù)是否已經(jīng)被過半的 follower 提交,進(jìn)行數(shù)據(jù)同步,保證數(shù)據(jù)一致
  5. 等到 Follower 將所有尚未同步的事務(wù) Proposal 都從 Leader 服務(wù)器上同步過來并且應(yīng)用到內(nèi)存數(shù)據(jù)中以后,Leader 才會(huì)把該 Follower 加入到真正可用的 Follower 列表中
  6. 進(jìn)入消息廣播模式

ZXID

一共 64 位,高 32 位代表了每代 Leader 的唯一性,低 32 代表了每代 Leader 中事務(wù)的唯一性。

總結(jié)

  • 為什么說 zab 有責(zé)任感呢?因?yàn)樗蛣e人不要的地方再,如果有消息被提交了,那么就不會(huì)忘記了。

  • 為了實(shí)現(xiàn)這個(gè)目標(biāo),它做了什么保證措施呢?

  1. 選舉的時(shí)候保證,保證了 ZXID 最大(其實(shí)這個(gè)和 raft 類似,就是指向了日志最多的人)
  2. 利用隊(duì)列保證,消息來的時(shí)候都通過了隊(duì)列,所以一定程度也保證了先來先處理
  • 消息廣播就是一個(gè) 2PC 只不過奔潰恢復(fù)解決了 2PC 的單點(diǎn)問題
  • 本質(zhì)還是一個(gè)主備,壓力還是在主節(jié)點(diǎn)上哦
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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