分佈式系統03——一致性算法之Paxos

本文將爲各位帶來分佈式算法中的 Paxos 算法。關注我的公衆號「Java面典」,每天 10:24 和你一起了解更多 Java 相關知識點。

一致性算法

在前兩篇文章中,已經給各位介紹了分佈式事務與分佈式事務解決方案。在解決分佈式事務時,CAP 三者無法同時滿足,往往都會選擇一定程度上的犧牲分佈式系統的強一致性而滿足系統的高可用性。在滿足分佈式系統的最終一致性時,就需要用到分佈式一致性算法。

什麼是 Paxos

Paxos 算法解決的問題是一個分佈式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分佈式數據庫系統中,如果各節點的初始狀態一致,每個節點執行相同的操作序列,那麼他們最後能得到一個一致的狀態。爲保證每個節點執行相同的命令序列,需要在每一條指令上執行一個“一致性算法”以保證每個節點看到的指令一致。zookeeper 使用的 zab 算法是該算法的一個實現。 在 Paxos 算法中,有三種角色:Proposer,Acceptor,Learners。

Paxos 的三種角色

Proposer

只要 Proposer 發的提案被半數以上 Acceptor 接受,Proposer 就認爲該提案裏的 value 被選定了;

Acceptor

只要 Acceptor 接受了某個提案,Acceptor 就認爲該提案裏的 value 被選定了;

Learner

Acceptor 告訴 Learner 哪個 value 被選定,Learner 就認爲那個 value 被選定。

Paxos 算法原理

paxos 流程圖.png

階段一(準 leader 確定 )

(a) Proposer 選擇一個提案編號 N,然後向半數以上的 Acceptor 發送編號爲 N 的 Prepare 請求;

(b) 如果一個 Acceptor 收到一個編號爲 N 的 Prepare 請求,且 N 大於該 Acceptor 已經響應過的所有 Prepare 請求的編號,那麼它就會將它已經接受過的編號最大的提案(如果有的話)作爲響應反饋給 Proposer,同時該 Acceptor 承諾不再接受任何編號小於 N 的提案。

階段二(leader 確認)

(a) 如果 Proposer 收到半數以上 Acceptor 對其發出的編號爲 N 的 Prepare 請求的響應,那麼它就會發送一個針對[N,V]提案的 Accept 請求給半數以上的 Acceptor。注意:V 就是收到的響應中編號最大的提案的 value,如果響應中不包含任何提案,那麼 V 就由 Proposer 自己決定;

(b) 如果 Acceptor 收到一個針對編號爲 N 的提案的 Accept 請求,只要該 Acceptor 沒有對編號大於 N 的 Prepare 請求做出過響應,它就接受該提案。

分佈式系統系列推薦

分佈式系統02——分佈式事務解決方案

分佈式系統01——什麼是分佈式事務

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