參考:html
Paxos 一致性協議能夠說是一致性協議研究的起點,也以難以理解聞名。其實協議自己並無多難理解,它的難理解性主要體如今:爲什麼如此設計協議以及如何證實其正確性。本文嘗試經過流程圖來講明協議的內容以及基本應用過程,不涉及如何證實其正確性。算法
Paxos 能夠分爲兩種:微信
本文只關注單 Paxos 的原理,理解了單 Paxos,多 Paxos 也就不難理解了。網絡
在協議中,每一個節點能夠同時扮演以上多個角色。分佈式
Paxos
經過上面的流程,若是有多個節點同時提出各自的提議,Paxos 就能夠保證從中選出一個惟一肯定的值,保證分佈式系統的一致性。學習
下面咱們經過例子來理解 Paxos 的實際應用過程。spa
假設如今有五個節點的分佈式系統,此時 A 節點打算提議 X 值,E 節點打算提議 Y 值,其餘節點沒有提議。
Paxos-1.net
假設如今 A 節點廣播它的提議(也會發送給本身),因爲網絡延遲的緣由,只有 A,B,C 節點收到了。注意即便 A,E 節點的提議同時到達某個節點,它也必然有個前後處理的順序,這裏的「同時」不是真正意義上的「同時」。
Paxos-2設計
A,B,C接收提議以後,因爲這是第一個它們接收到的提議,acceptedProposal 和 acceptedValue 都爲空。
Paxos-3htm
因爲 A 節點已經收到超半數的節點響應,且返回的 acceptedValue 都爲空,也就是說它能夠用 X 做爲提議的值來發生 Accept 請求,A,B,C接收到請求以後,將 acceptedValue 更新爲 X。
Paxos-4
A,B,C 會發生 minProposal 給 A,A 檢查發現沒有大於 1 的 minProposal 出現,此時 X 已經被選中。等等,咱們是否是忘了D,E節點?它們的 acceptedValue 並非 X,系統還處於不一致狀態。至此,Paxos 過程尚未結束,咱們繼續看。
Paxos-5
此時 E 節點選擇 Proposal ID 爲 2 發送 Prepare 請求,結果就和上面不同了,由於 C 節點已經接受了 A 節點的提議,它不會三心二意,因此就告訴 E 節點它的選擇,E 節點也很紳士,既然 C 選擇了 A 的提議,那我也選它吧。因而,E 發起 Accept 請求,使用 X 做爲提議值,至此,整個分佈式系統達成了一致,你們都選擇了 X。
Paxos-6
上面是 Paxos 的一個簡單應用過程,其餘複雜的場景也能夠根據流程圖慢慢推導,這裏只是拋磚引玉。