zab協議概述
zab協議是爲分佈式協調服務zooKeeper專門設計的一種支持崩潰恢復的原子廣播協議。
zab協議不像paxos是一種通用的分佈式一致性算法,它是一種特別爲zookeeper設計的崩潰可恢復的原子消息廣播算法!
paxos算法概述
poxos算法是萊斯利蘭伯特(Leslie Lamport)於1990提出的一種基於消息傳遞且具有高度容錯性的一致性算法;
拜占庭將軍問題
拜占庭帝國有許多隻軍隊,不同軍隊的將軍之間必須制定一個統一的行動計劃,從而做出進攻或者撤退的決定。同時,各個將軍在地理上都是被分割開來的,只能依靠軍隊的通訊員來進行通訊。然而,在所有的通訊員中可能會存在叛徒,這些叛徒可以任意篡改信息,從而達到欺騙將軍的目的!
這就是著名的“拜占庭將軍問題”。從理論上來說在分佈式計算領域,試圖在異步系統和不可靠的通道上達到一致性是不可能的!
paxos算法主要有三類節點:
- 提議者(Proposer):提議一個值;
- 接受者(Acceptor):對每個提議進行投票;
- 告知者(Learner):被告知投票的結果,不參與投票過程。
zab與paxos算法聯繫與區別
聯繫:
- 兩者都存在於一個類似於leader進程的角色,負責協調follower進程的運行;
- leader進程都會等待超過半數的follower做出正確的反饋後,纔會將提案進行提交;
- 在zab協議中,在每個proposal都包含一個epoch用來代表當前的leader週期,在paxos算法中,同樣存在這樣一個屬性,名字變成了Ballot;
區別:
設計目標不同,zab協議目標是構建一個高可用的分佈式數據主備系統,paxos算法是用於構建一個分佈式的一致性狀態機。