區塊鏈共識演算法(6)分散式一致性演算法2PC和3PC
# 分散式一致性演算法2PC和3PC
為了解決分散式一致性問題,產生了不少經典的分散式一致性演算法,本文將介紹其中的2PC和3PC。
2PC即Two-Phase Commit,譯為二階段提交協議。
3PC即Three-Phase Commit,譯為三階段提交協議。
### 分散式系統和分散式一致性問題
分散式系統,即執行在多臺不同的網路計算機上的軟硬體系統,並且僅通過訊息傳遞來進行通訊和協調。
分散式一致性問題,即相互獨立的節點之間如何就一項決議達成一致的問題。
### 2PC
2PC,二階段提交協議,即將事務的提交過程分為兩個階段來進行處理:準備階段和提交階段。
事務的發起者稱協調者,事務的執行者稱參與者。
##### 階段1:準備階段
* 1、協調者向所有參與者傳送事務內容,詢問是否可以提交事務,並等待所有參與者答覆。
* 2、各參與者執行事務操作,將Undo和Redo資訊記入事務日誌中(但不提交事務)。
* 3、如參與者執行成功,給協調者反饋YES,即可以提交;如執行失敗,給協調者反饋NO,即不可提交。
##### 階段2:提交階段
此階段分兩種情況:所有參與者均反饋YES、或任何一個參與者反饋NO。
所有參與者均反饋YES時,即提交事務。
任何一個參與者反饋NO時,即中斷事務。
提交事務:(所有參與者均反饋YES)
* 1、協調者向所有參與者發出正式提交事務的請求(即Commit請求)。
* 2、參與者執行Commit請求,並釋放整個事務期間佔用的資源。
* 3、各參與者向協調者反饋Ack完成的訊息。
* 4、協調者收到所有參與者反饋的Ack訊息後,即完成事務提交。
附如下示意圖:
中斷事務:(任何一個參與者反饋NO)
* 1、協調者向所有參與者發出回滾請求(即Rollback請求)。
* 2、參與者使用階段1中的Undo資訊執行回滾操作,並釋放整個事務期間佔用的資源。
* 3、各參與者向協調者反饋Ack完成的訊息。
* 4、協調者收到所有參與者反饋的Ack訊息後,即完成事務中斷。
附如下示意圖:
### 2PC的缺陷
* 1、同步阻塞:最大的問題即同步阻塞,即:所有參與事務的邏輯均處於阻塞狀態。
* 2、單點:協調者存在單點問題,如果協調者出現故障,參與者將一直處於鎖定狀態。
* 3、腦裂:在階段2中,如果只有部分參與者接收並執行了Commit請求,會導致節點資料不一致。
由於2PC存在如上同步阻塞、單點、腦裂問題,因此又出現了2PC的改進方案,即3PC。
### 3PC
3PC,三階段提交協議,是2PC的改進版本,即將事務的提交過程分為CanCommit、PreCommit、do Commit三個階段來進行處理。
##### 階段1:CanCommit
* 1、協調者向所有參與者發出包含事務內容的CanCommit請求,詢問是否可以提交事務,並等待所有參與者答覆。
* 2、參與者收到CanCommit請求後,如果認為可以執行事務操作,則反饋YES並進入預備狀態,否則反饋NO。
##### 階段2:PreCommit
此階段分兩種情況:
* 1、所有參與者均反饋YES,即執行事務預提交。
* 2、任何一個參與者反饋NO,或者等待超時後協調者尚無法收到所有參與者的反饋,即中斷事務。
事務預提交:(所有參與者均反饋YES時)
* 1、協調者向所有參與者發出PreCommit請求,進入準備階段。
* 2、參與者收到PreCommit請求後,執行事務操作,將Undo和Redo資訊記入事務日誌中(但不提交事務)。
* 3、各參與者向協調者反饋Ack響應或No響應,並等待最終指令。
中斷事務:(任何一個參與者反饋NO,或者等待超時後協調者尚無法收到所有參與者的反饋時)
* 1、協調者向所有參與者發出abort請求。
* 2、無論收到協調者發出的abort請求,或者在等待協調者請求過程中出現超時,參與者均會中斷事務。
##### 階段3:do Commit
此階段也存在兩種情況:
* 1、所有參與者均反饋Ack響應,即執行真正的事務提交。
* 2、任何一個參與者反饋NO,或者等待超時後協調者尚無法收到所有參與者的反饋,即中斷事務。
提交事務:(所有參與者均反饋Ack響應時)
* 1、如果協調者處於工作狀態,則向所有參與者發出do Commit請求。
* 2、參與者收到do Commit請求後,會正式執行事務提交,並釋放整個事務期間佔用的資源。
* 3、各參與者向協調者反饋Ack完成的訊息。
* 4、協調者收到所有參與者反饋的Ack訊息後,即完成事務提交。
中斷事務:(任何一個參與者反饋NO,或者等待超時後協調者尚無法收到所有參與者的反饋時)
* 1、如果協調者處於工作狀態,向所有參與者發出abort請求。
* 2、參與者使用階段1中的Undo資訊執行回滾操作,並釋放整個事務期間佔用的資源。
* 3、各參與者向協調者反饋Ack完成的訊息。
* 4、協調者收到所有參與者反饋的Ack訊息後,即完成事務中斷。
注意:進入階段三後,無論協調者出現問題,或者協調者與參與者網路出現問題,都會導致參與者無法接收到協調者發出的do Commit請求或abort請求。
此時,參與者都會在等待超時之後,繼續執行事務提交。
附示意圖如下:
### 3PC的優點和缺陷
優點:降低了阻塞範圍,在等待超時後協調者或參與者會中斷事務。避免了協調者單點問題,階段3中協調者出現問題時,參與者會繼續提交事務。
缺陷:腦裂問題依然存在,即在參與者收到PreCommit請求後等待最終指令,如果此時協調者無法與參與者正常通訊,會導致參與者繼續提交事務,造成資料不一致。
### 後記
無論2PC或3PC,均無法徹底解決分散式一致性問題。
解決一致性問題,唯有Paxos,後續將單獨總結。
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 區塊鏈共識演算法(1)分散式一致性演算法Raft區塊鏈演算法分散式Raft
- 區塊鏈共識演算法(4)分散式一致性演算法Paxos區塊鏈演算法分散式
- 區塊鏈主流共識演算法區塊鏈演算法
- 分散式一致性協議之2PC和3PC分散式協議
- 分散式事務-2PC和3PC分散式
- 區塊鏈主流共識演算法彙總區塊鏈演算法
- 可用於區塊鏈的共識演算法區塊鏈演算法
- 分散式共識演算法分散式演算法
- 深入剖析分散式一致性共識演算法分散式演算法
- 第4章 區塊鏈靈魂:共識演算法區塊鏈演算法
- 區塊鏈中五種常見共識演算法區塊鏈演算法
- 區塊鏈共識演算法(3)PoS權益證明演算法區塊鏈演算法
- 分散式事務(1)---2PC和3PC理論分散式
- 區塊鏈共識演算法(5)DPoS股份授權證明演算法區塊鏈演算法
- 解密區塊鏈最強心臟 迅雷鏈共識演算法詳解解密區塊鏈演算法
- 區塊鏈共識之Paxos演算法理解與實戰區塊鏈演算法
- 【阿菜讀論文】區塊鏈共識演算法綜述區塊鏈演算法
- 從分散式一致性到共識機制(二)Raft演算法分散式Raft演算法
- 萬字長文:解讀區塊鏈7類共識演算法區塊鏈演算法
- 分散式系統之Raft共識演算法分散式Raft演算法
- 區塊鏈共識機制區塊鏈
- (二)區塊鏈的共識演算法:PoS 及其 例子 程式碼 實現區塊鏈演算法
- 區塊鏈100講: 區塊鏈共識的確定性區塊鏈
- 區塊鏈知識系列 - Raft 共識區塊鏈Raft
- 區塊鏈知識系列 - PBFT 共識區塊鏈
- 一文帶你瞭解區塊鏈中15種共識演算法區塊鏈演算法
- 區塊鏈演算法區塊鏈演算法
- 區塊鏈共識的確定性區塊鏈
- 分散式系統架構1:共識演算法Paxos分散式架構演算法
- 幽默!分散式系統共識演算法的三階段分散式演算法
- (一)區塊鏈的共識演算法:整體介紹 及 分叉 的通俗講解區塊鏈演算法
- 一個基於PoS共識演算法的區塊鏈例項解析(升級版)演算法區塊鏈
- 區塊鏈共識演算法(2)PoW挖礦演算法原理及其在比特幣、以太坊中的實現區塊鏈演算法比特幣
- paxos分散式一致性演算法分散式演算法
- Paxos——分散式一致性演算法分散式演算法
- 016 | 漫談區塊鏈共識機制區塊鏈
- 區塊鏈共識機制的演進區塊鏈
- zarusz/SlimCluster:在.NET中實現的Raft分散式共識演算法Raft分散式演算法