1. 程式人生 > >[zookeeper] zab協議

[zookeeper] zab協議

一、描述

zab(ZooKeeper Atomic Broadcast原子訊息廣播協議),是zookeeper一致性協議,zab協議主要包括兩種模式,訊息廣播和奔潰恢復

二、角色

zookeeper中主要的兩種角色,leader和follower,這兩種角色都有投票權

三、訊息廣播

1.follower收到prosoal等寫事務的提議

2.follower會發送給leader

3.leader會為每個follower建立一個佇列,以tcp方式保證訊息的fifo特性,以保證訊息的順序

4.當收到超過半數的ack的follower的回覆後,會想每個follower傳送commit請求

這與2pc(兩階段提交)相似,當時區別在於1.zab不需要等待全部follower的ack才進行下一步commit操作。2.zab簡化了邏輯,移除了中斷邏輯

但是這樣還是無法解決類似2pc提交時候,如leader接受到足夠的ack後,傳送commit後,只有一部分follower收到了,而另一部分沒有收到commit,

這時候leader奔潰退出,這樣會導致資料不一致情況,這樣就需要奔潰恢復來解決這個問題

四、奔潰恢復

當zookeeper的leader奔潰後,zookeeper叢集需要從奔潰中恢復,這樣需要選舉出新的leader,而新leader被選舉出來,該leader的事務id時最大的,

以保證當前的leader包含最新的提交的資料,這樣後續其follower與leader資料同步的時候,可以知道哪些資料時需要提交的,哪些資料是需要丟棄的