Paxos算法

Paxos算法的作用

Paxos一致性算法主要是解決分佈式數據一致性問題。當集羣中發生某個錯誤導致數據可能出現不一致,我們有兩個問題要解決:1. 集羣中任何節點在決議的過程中中段或者失去服務能力的情況下(故障節點不能超過一半),都能讓數據保持一致;2. 投票選舉多數派能夠讓數據損失在保證1的情況下達到最小,而Paxos算法能夠解決這兩個問題。

關於描述paxos算法寫的最好的一篇文章應該就是維基百科了地址戳這裏

學習Paxos的思想前提

  1. 當集羣中出現違反一致性的狀況發生後,可以用Paxos算法實現一致性;
  2. 在執行Paxos算法過程中,集羣任何節點都是不可靠的;
  3. Paxos算法並不是達到理想中最完美的方式,而是在錯誤的情況下達到能夠做到的現實中最完美的方式;
  4. 一種部署方式可以是:節點既是proposers,又是acceptors,還是learners,在節點中實現了Paxos算法。

Paxos算法約束


  1. 決議(value)只有在被proposers提出後才能被批准(未經批准的決議稱爲“提案(proposal)”);
  2. 在一次Paxos算法的執行實例中,只批准(chosen)一個value;
  3. learners只能獲得被批准(chosen)的value。

首先將議員的角色分爲proposers,acceptors,和learners(允許身兼數職)。proposers提出提案,提案信息包括提案編號和提議的value;acceptor收到提案後可以接受(accept)提案,若提案獲得多數acceptors的接受,則稱該提案被批准(chosen);learners只能“學習”被批准的提案。劃分角色後,就可以更精確的定義問題:

角色約束

這裏寫圖片描述
proposers
p2b:一旦一個具有value v的提案被批准(chosen),那麼以後任何proposer提出的提案必須具有value v(由於通信是異步的,P2a和P1會發生衝突才提出的進一步約束)。
acceptors
p1:一個acceptor必須接受(accept)第一次收到的提案;
P1a:當且僅當acceptor沒有迴應過編號大於n的prepare請求時,acceptor接受(accept)編號爲n的提案;
p2a:一旦一個具有value v的提案被批准(chosen),那麼之後任何acceptor再次接受(accept)的提案必須具有value v。
value
p2:一旦一個具有value v的提案被批准(chosen),那麼之後批准(chosen)的提案必須具有value v。
learners
只能“學習”被批准的提案。
leader:當完成上面的約束後,滿足條件p2c的成爲新的leader
p2c:如果一個編號爲n的提案具有value v,那麼存在一個多數派,要麼他們中所有人都沒有接受(accept)編號小於n 。

決議的提出與批准

準備階段(prepare):
1. proposer選擇一個提案編號n並將prepare請求發送給acceptors中的一個多數派;
2. acceptor收到prepare消息後,如果提案的編號大於它已經回覆的所有prepare消息,則acceptor將自己上次接受的提案回覆給proposer,並承諾不再回復小於n的提案;
批准階段(chosen):
1. 當一個proposer收到了多數acceptors對prepare的回覆後,就進入批准階段。它要向回覆prepare請求的acceptors發送accept請求,包括編號n和根據P2c決定的value(如果根據P2c沒有已經接受的value,那麼它可以自由決定value);
2. 在不違背自己向其他proposer的承諾的前提下,acceptor收到accept請求後即接受這個請求。

這個過程在任何時候中斷都可以保證正確性。例如如果一個proposer發現已經有其他proposers提出了編號更高的提案,則有必要中斷這個過程。因此爲了優化,在上述prepare過程中,如果一個acceptor發現存在一個更高編號的提案,則需要通知proposer,提醒其中斷這次提案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章