Raft一致性算法用於保證在分佈式的條件下,全部的節點能夠執行相同的命令序列,並達到一致的狀態。這類的問題能夠歸結爲「Replicated state machines」問題。html
相比於Paxos,Raft最大的特色就是可理解性。相信讀過Paxos論文的人應該對此深有體會。git
Raft把一致性問題,分解成三個比較獨立的子問題,並給出每一個子問題的解決方法:github
選舉:描述Raft是如何選擇一個leader的,這個部分很受容易理解了。算法
日誌複製:描述Raft的leader是如何把日誌複製到集羣的各個節點上的。安全
安全性:描述Raft是如何保證「State Machine Safety Property」。異步
官方資源(包括了論文、各個語言的實現、一些學習視頻)分佈式
一個歸納性的中文PPTspa
中文翻譯.net
Paxos 協議是一個解決分佈式系統中,多個節點之間就某個值(提案)達成一致(決議)的通訊協議。它可以處理在少數派離線的狀況下,剩餘的多數派節點仍然可以達成一致
整體說來,paxos就是經過兩個階段肯定一個決議:
Phase1:肯定誰的編號最高,只有編號最高者纔有權利提交proposal;
Phase2:編號最高者提交proposal,若是沒有其餘節點提出更高編號的proposal,則該提案會被順利經過;不然,整個過程就會重來。
你編號高,我比你更高,反覆如此,算法永遠沒法結束,這叫活鎖。FLP Impossibility已經證實,在異步通訊中不存在任何一致性算法,活鎖即是Paxos沒法解決的硬傷。
Phase1,Phase2很是像2PC中的兩個階段,所以paxos本質上是多個2PC交替執行! 另外,即便你明白了,在實現時會知道有多難,工程實現與理論差距很大!