分布式系統(tǒng)理論進(jìn)階 - Raft、Zab
2016-10-26 21:50 by bangerlee, 220 閱讀, 0 評(píng)論, 收藏, 編輯引言
《分布式系統(tǒng)理論進(jìn)階 - Paxos》介紹了一致性協(xié)議Paxos,今天我們來學(xué)習(xí)另外兩個(gè)常見的一致性協(xié)議——Raft和Zab。通過與Paxos對(duì)比,了解Raft和Zab的核心思想、加深對(duì)一致性協(xié)議的認(rèn)識(shí)。
Raft
Paxos偏向于理論、對(duì)如何應(yīng)用到工程實(shí)踐提及較少。理解的難度加上現(xiàn)實(shí)的骨感,在生產(chǎn)環(huán)境中基于Paxos實(shí)現(xiàn)一個(gè)正確的分布式系統(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年提出,提出的時(shí)間雖然不長(zhǎng),但已經(jīng)有很多系統(tǒng)基于Raft實(shí)現(xiàn)。相比Paxos,Raft的買點(diǎn)就是更利于理解、更易于實(shí)行。
為達(dá)到更容易理解和實(shí)行的目的,Raft將問題分解和具體化:Leader統(tǒng)一處理變更操作請(qǐng)求,一致性協(xié)議的作用具化為保證節(jié)點(diǎn)間操作日志副本(log replication)一致,以term作為邏輯時(shí)鐘(logical clock)保證時(shí)序,節(jié)點(diǎn)運(yùn)行相同狀態(tài)機(jī)(state machine)[4]得到一致結(jié)果。Raft協(xié)議具體過程如下:
- Client發(fā)起請(qǐng)求,每一條請(qǐng)求包含操作指令
- 請(qǐng)求交由Leader處理,Leader將操作指令(entry)追加(append)至操作日志,緊接著對(duì)Follower發(fā)起AppendEntries請(qǐng)求、嘗試讓操作日志副本在Follower落地
- 如果Follower多數(shù)派(quorum)同意AppendEntries請(qǐng)求,Leader進(jìn)行commit操作、把指令交由狀態(tài)機(jī)處理
- 狀態(tài)機(jī)處理完成后將結(jié)果返回給Client
指令通過log ind