關於2PC(二階段提交)和3PC(三階段提交)的理解
分散式系統和分散式一致性問題
分散式系統,即執行在多臺不同的網路計算機上的軟硬體系統,並且僅透過訊息傳遞來進行通訊和協調。
分散式一致性問題,即相互獨立的節點之間如何就一項決議達成一致的問題。
2PC(Two-Phase Commit 二階段提交)
二階段提交,是指將事務提交分成兩個部分:準備階段和提交階段。事務的發起者稱之為協調者,事務的執行者稱為參與者。
階段一:準備階段
由協調者發起並傳遞帶有事務資訊的請求給各個參與者,詢問是否可以提交事務,並等待返回結果。
個 參與者執行事務操作,將Undo和Redo放入事務日誌中(但是不提交)
如果參與者執行成功就返回YES(可以提交事務),失敗NO(不能提交事務)
階段二:提交階段
此階段分兩種情況:所有參與者均返回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(Three-Phase Commit 三階段提交協議)
3PC,三階段提交協議,是2PC的改進版本,即將事務的提交過程分為CanCommit、PreCommit、do Commit三個階段來進行處理。
階段一:CanCommit
1、協調者向所有參與者發出包含事務內容的CanCommit請求,詢問是否可以提交事務,並等待所有參與者答覆。
2、參與者收到CanCommit請求後,如果認為可以執行事務操作,則反饋YES並進入預備狀態,否則反饋NO。
階段二: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,後續將單獨總結。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2640723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩階段提交2PC 和 三階段提交3pc
- 分散式:分散式事務(CAP、兩階段提交、三階段提交)分散式
- mysql兩階段提交和組提交MySql
- 分散式事務(二)之三階段提交分散式
- 分散式事務的兩階段提交和三階段提交分別有什麼優缺點?分散式
- [Mysql]兩階段提交MySql
- 三階段提交(Three-phase commit)MIT
- 分散式事務(二)之兩階段提交分散式
- 二階段提交協議(Two Phase Commitment Protocol)協議MITProtocol
- vitess兩階段提交事務Vite
- MySQL事務提交的三個階段介紹MySql
- 三階段分佈(3PC)
- 一致性協議之三階段提交協議
- 分散式基礎,啥是兩階段提交?分散式
- MySQL兩階段提交過程原理簡述MySql
- 分散式事務對於兩階段提交的錯誤處理分散式
- 分散式事務處理兩階段提交機制和原理分散式
- [分享] 使用 golang 理解 MySQL 的兩階段提交- 軒脈刃 de 刀光劍影GolangMySql
- 【分享】使用 golang 理解 mysql 的兩階段提交- 軒脈刃 de 刀光劍影GolangMySql
- 經典的兩階段提交演算法原理及缺陷演算法
- 全網最牛X的!!! MySQL兩階段提交串講MySql
- 人生的二階段。
- 分散式事務--兩階段提交(2PC-Prepare/Commit)分散式MIT
- 第二階段-cssCSS
- 位元組跳動流式資料整合基於Flink Checkpoint兩階段提交的實踐和優化優化
- 最新拓薪Java高階階段及ERP實戰專案(階段三)Java
- 統一過程(UP)定義了初啟階段、精化階段、構建階段、移交階段和產生階段,每個階段以達到某個里程碑時結束,其中()的里程碑是生命週期架構。 A.初啟階段 B.精化階段 C.構建階段 D.移交階段架構
- 初學Java的5個階段,你在哪個階段?Java
- 關於Html+css階段學習總結HTMLCSS
- 第二階段三次PTA作業總結
- 第二階段複習——組合
- OOP課第三階段總結OOP
- SSL連線分為兩個階段:握手和資料傳輸階段
- 階段測試
- 開發階段
- 強化階段
- 客服系統的三個發展階段
- 【高階RAG技巧】使用二階段檢索器平衡檢索的效率和精度