分布式系統(tǒng)理論進階 - Raft、Zab
2016-10-26 21:50 by bangerlee, 220 閱讀, 0 評論, 收藏, 編輯引言
《分布式系統(tǒng)理論進階 - Paxos》介紹了一致性協(xié)議Paxos,今天我們來學習另外兩個常見的一致性協(xié)議——Raft和Zab。通過與Paxos對比,了解Raft和Zab的核心思想、加深對一致性協(xié)議的認識。
Raft
Paxos偏向于理論、對如何應(yīng)用到工程實踐提及較少。理解的難度加上現(xiàn)實的骨感,在生產(chǎn)環(huán)境中基于Paxos實現(xiàn)一個正確的分布式系統(tǒng)非常難[1]:
There are significant gaps between the description of the Paxos algorithm and the needs of a real-world system. In order to build a real-world system, an expert needs to use numerous ideas scattered in the literature and make several relatively small protocol extensions. The cumulative effort will be substantial and the final system will be based on an unproven protocol.
Raft[2][3]在2013年提出,提出的時間雖然不長,但已經(jīng)有很多系統(tǒng)基于Raft實現(xiàn)。相比Paxos,Raft的買點就是更利于理解、更易于實行。
為達到更容易理解和實行的目的,Raft將問題分解和具體化:Leader統(tǒng)一處理變更操作請求,一致性協(xié)議的作用具化為保證節(jié)點間操作日志副本(log replication)一致,以term作為邏輯時鐘(logical clock)保證時序,節(jié)點運行相同狀態(tài)機(state machine)[4]得到一致結(jié)果。Raft協(xié)議具體過程如下:
- Client發(fā)起請求,每一條請求包含操作指令
- 請求交由Leader處理,Leader將操作指令(entry)追加(append)至操作日志,緊接著對Follower發(fā)起AppendEntries請求、嘗試讓操作日志副本在Follower落地
- 如果Follower多數(shù)派(quorum)同意AppendEntries請求,Leader進行commit操作、把指令交由狀態(tài)機處理
- 狀態(tài)機處理完成后將結(jié)果返回給Client
指令通過log ind