區塊鏈共識演算法(4)分散式一致性演算法Paxos
# 分散式一致性演算法Paxos
Paxos是一種基於訊息傳遞的分散式一致性演算法,由Leslie Lamport(萊斯利·蘭伯特)於1990提出。
是目前公認的解決分散式一致性問題的最有效演算法之一。
### 要解決的問題及應用場景
Paxos演算法要解決的問題,可以理解為:一個非同步通訊的分散式系統中,如何就某一個值(決議)達成一致。
而此處非同步通訊是指,訊息在網路傳輸過程中存在丟失、超時、亂序現象。
其典型應用場景為:
在一個分散式系統中,如果各節點初始狀態一致,而且每個節點執行相同的命令序列,那麼最後就可以得到一個一致的狀態。
為了保證每個節點執行相同的命令序列,即需要在每一條指令上執行一致性演算法(如Paxos演算法),來保證每個節點指令一致。
### 概念定義
Proposal:為了就某一個值達成一致而發起的提案,包括提案編號和提案的值。
涉及角色如下:
* Proposer:提案發起者,為了就某一個值達成一致,Proposer可以以任意速度、發起任意數量的提案,可以停止或重啟。
* Acceptor:提案批准者,負責處理接收到的提案,響應、作出承諾、或批准提案。
* Learner:提案學習者,可以從Acceptor處獲取已被批准的提案。
### 約定
Paxos需要遵循如下約定:
* 1、一個Acceptor必須批准它收到的第一個提案。
* 2、如果編號為n的提案被批准了,那麼所有編號大於n的提案,其值必須與編號為n的提案的值相同。
### 演算法描述
階段一:準備階段
* 1、Proposer選擇一個提案編號n,向Acceptor廣播Prepare(n)請求。
* 2、Acceptor接收到Prepare(n)請求,
如果編號n大於之前已經響應的所有Prepare請求的編號,
那麼將之前批准過的最大編號的提案反饋給Proposer,並承諾不再接收編號比n小的提案。
否則不予理會。
階段二:批准階段
* 1、Proposer收到半數以上的Acceptor響應後,
如果響應中不包含任何提案,那麼將提案編號n和自己的值,作為提案傳送Accept請求給Acceptor。
否則將編號n,與收到的響應中編號最大的提案的值,作為提案傳送Accept請求給Acceptor。
* 2、Acceptor收到編號為n的Accept請求,
只要Acceptor尚未對編號大於n的Prepare請求做出響應,就可以批准這個提案。
### 死迴圈問題
如果Proposer1提出編號為n1的提案,並完成了階段一。
與此同時Proposer2提出了編號為n2的提案,n2>n1,同樣也完成了階段一。
於是Acceptor承諾不再批准編號小於n2的提案,當Proposer1進入階段二時,將會被忽略。
同理,此時,Proposer1可以提出編號為n3的提案,n3>n2,又會導致Proposer2的編號為n2的提案進入階段二時被忽略。
以此類推,將進入死迴圈。
解決辦法:
可以選擇一個Proposer作為主Proposer,並約定只有主Proposer才可以提出提案。
因此,只要主Proposer可以與過半的Acceptor保持通訊,那麼但凡主Proposer提出的編號更高的提案,均會被批准。
### Learner
一旦Acceptor批准了某個提案,即將該提案發給所有的Learner。
為了避免大量通訊,Acceptor也可以將批准的提案,發給主Learner,由主Learner分發給其他Learner。
考慮到主Learner單點問題,也可以考慮Acceptor將批准的提案,發給主Learner組,由主Learner組分發給其他Learner。
### 參考文件
* [Paxos Made Simple(中文翻譯版)](https://github.com/oldratlee/translations/tree/master/paxos-made-simple)
* [微信自研生產級paxos類庫PhxPaxos實現原理介紹](https://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483695&idx=1&sn=91ea422913fc62579e020e941d1d059e#rd)
* [【原創】一步一步理解Paxos演算法](https://mp.weixin.qq.com/s?__biz=MjM5MDg2NjIyMA==&mid=203607654&idx=1&sn=bfe71374fbca7ec5adf31bd3500ab95a&key=8ea74966bf01cfb6684dc066454e04bb5194d780db67f87b55480b52800238c2dfae323218ee8645f0c094e607ea7e6f&ascene=1&uin=MjA1MDk3Njk1&devicetype=webwx&version=70000001&pass_ticket=2ivcW%2FcENyzkz%2FGjIaPDdMzzf%2Bberd36%2FR3FYecikmo%3D)
### 後記
Paxos演算法相對難以理解和實現,因此後來又出現了更容易理解和實現的Raft演算法。
後續會單獨總結。
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 區塊鏈共識演算法(1)分散式一致性演算法Raft區塊鏈演算法分散式Raft
- 區塊鏈共識之Paxos演算法理解與實戰區塊鏈演算法
- 區塊鏈共識演算法(6)分散式一致性演算法2PC和3PC區塊鏈演算法分散式
- 區塊鏈主流共識演算法區塊鏈演算法
- 第4章 區塊鏈靈魂:共識演算法區塊鏈演算法
- Paxos——分散式一致性演算法分散式演算法
- paxos分散式一致性演算法分散式演算法
- 分散式一致性演算法Paxos分散式演算法
- 可用於區塊鏈的共識演算法區塊鏈演算法
- 區塊鏈主流共識演算法彙總區塊鏈演算法
- 分散式共識演算法分散式演算法
- 深入剖析分散式一致性共識演算法分散式演算法
- Paxos共識演算法詳解演算法
- 區塊鏈中五種常見共識演算法區塊鏈演算法
- 讀懂區塊鏈共識機制 :PoW、PoS、PAXOS、RAFT、PBFT區塊鏈Raft
- 分散式理論(五) - 一致性演算法Paxos分散式演算法
- 區塊鏈共識演算法(3)PoS權益證明演算法區塊鏈演算法
- 從PAXOS到ZOOKEEPER分散式一致性原理與實踐--Paxos演算法分散式演算法
- 區塊鏈共識演算法(5)DPoS股份授權證明演算法區塊鏈演算法
- 分散式一致性演算法-paxos詳解與分析分散式演算法
- 淺談 CAP 和 Paxos 共識演算法演算法
- 分散式系統Paxos演算法分散式演算法
- 解密區塊鏈最強心臟 迅雷鏈共識演算法詳解解密區塊鏈演算法
- 【阿菜讀論文】區塊鏈共識演算法綜述區塊鏈演算法
- 萬字長文:解讀區塊鏈7類共識演算法區塊鏈演算法
- 分散式協議與演算法-Paxos演算法分散式協議演算法
- 從分散式一致性到共識機制(二)Raft演算法分散式Raft演算法
- 搞懂分散式技術2:分散式一致性協議與Paxos,Raft演算法分散式協議Raft演算法
- 區塊鏈共識機制區塊鏈
- 分散式系統之Raft共識演算法分散式Raft演算法
- (二)區塊鏈的共識演算法:PoS 及其 例子 程式碼 實現區塊鏈演算法
- 區塊鏈知識系列 - PBFT 共識區塊鏈
- 區塊鏈知識系列 - Raft 共識區塊鏈Raft
- paxos-分散式系統資料一致性演算法學習分散式演算法
- 區塊鏈共識的確定性區塊鏈
- 區塊鏈100講: 區塊鏈共識的確定性區塊鏈
- 一文帶你瞭解區塊鏈中15種共識演算法區塊鏈演算法
- 分散式共識新演算法:PigPaxos突破Paxos通訊瓶頸,吞吐量提高盡3.5倍分散式演算法