共計 2384 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章主要介紹“怎么理解 MySQL 的 2PC 和 3PC”,在日常操作中,相信很多人在怎么理解 MySQL 的 2PC 和 3PC 問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解 MySQL 的 2PC 和 3PC”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
分布式系統(tǒng)和分布式一致性問題
分布式系統(tǒng),即運行在多臺不同的網(wǎng)絡計算機上的軟硬件系統(tǒng),并且僅通過消息傳遞來進行通信和協(xié)調(diào)。
分布式一致性問題,即相互獨立的節(jié)點之間如何就一項決議達成一致的問題。
2PC(Two-Phase Commit 二階段提交)
二階段提交,是指將事務提交分成兩個部分:準備階段和提交階段。事務的發(fā)起者稱之為協(xié)調(diào)者,事務的執(zhí)行者稱為參與者。
階段一:準備階段
由協(xié)調(diào)者發(fā)起并傳遞帶有事務信息的請求給各個參與者,詢問是否可以提交事務,并等待返回結(jié)果。
個 參與者執(zhí)行事務操作,將 Undo 和 Redo 放入事務日志中(但是不提交)
如果參與者執(zhí)行成功就返回 YES(可以提交事務),失敗 NO(不能提交事務)
階段二:提交階段
此階段分兩種情況:所有參與者均返回 YES,有任何一個參與者返回 NO
所有參與者均反饋 YES 時,即提交事務。
任何一個參與者反饋 NO 時,即中斷事務。
提交事務:(所有參與者均反饋 YES)
1、協(xié)調(diào)者向所有參與者發(fā)出正式提交事務的請求(即 Commit 請求)。
2、參與者執(zhí)行 Commit 請求,并釋放整個事務期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋 Ack 完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的 Ack 消息后,即完成事務提交。
中斷事務:(任何一個參與者反饋 NO)
1、協(xié)調(diào)者向所有參與者發(fā)出回滾請求(即 Rollback 請求)。
2、參與者使用階段 1 中的 Undo 信息執(zhí)行回滾操作,并釋放整個事務期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋 Ack 完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的 Ack 消息后,即完成事務中斷。
2PC 的缺陷
1、同步阻塞:最大的問題即同步阻塞,即:所有參與事務的邏輯均處于阻塞狀態(tài)。
2、單點:協(xié)調(diào)者存在單點問題,如果協(xié)調(diào)者出現(xiàn)故障,參與者將一直處于鎖定狀態(tài)。
3、腦裂:在階段 2 中,如果只有部分參與者接收并執(zhí)行了 Commit 請求,會導致節(jié)點數(shù)據(jù)不一致。
由于 2PC 存在如上同步阻塞、單點、腦裂問題,因此又出現(xiàn)了 2PC 的改進方案,即 3PC。
3PC(Three-Phase Commit 三階段提交協(xié)議)
3PC,三階段提交協(xié)議,是 2PC 的改進版本,即將事務的提交過程分為 CanCommit、PreCommit、do Commit 三個階段來進行處理。
階段一:CanCommit
1、協(xié)調(diào)者向所有參與者發(fā)出包含事務內(nèi)容的 CanCommit 請求,詢問是否可以提交事務,并等待所有參與者答復。
2、參與者收到 CanCommit 請求后,如果認為可以執(zhí)行事務操作,則反饋 YES 并進入預備狀態(tài),否則反饋 NO。
階段二:PreCommit
此階段分為兩種情況:
1. 所有參與者均受到請求并返回 YES。
2. 有任何一個參與者返回 NO,或者有任何一個參與者超時,協(xié)調(diào)者無法收到反饋,則事務中斷
事務預提交:(所有參與者均反饋 YES 時)
1、協(xié)調(diào)者向所有參與者發(fā)出 PreCommit 請求,進入準備階段。
2、參與者收到 PreCommit 請求后,執(zhí)行事務操作,將 Undo 和 Redo 信息記入事務日志中(但不提交事務)。
3、各參與者向協(xié)調(diào)者反饋 Ack 響應或 No 響應,并等待最終指令。
中斷事務:(任何一個參與者反饋 NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋時)
1、協(xié)調(diào)者向所有參與者發(fā)出 abort 請求。
2、無論收到協(xié)調(diào)者發(fā)出的 abort 請求,或者在等待協(xié)調(diào)者請求過程中出現(xiàn)超時,參與者均會中斷事務。
階段 3:do Commit
此階段也存在兩種情況:
1、所有參與者均反饋 Ack 響應,即執(zhí)行真正的事務提交。
2、任何一個參與者反饋 NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋,即中斷事務。
提交事務:(所有參與者均反饋 Ack 響應時)
1、如果協(xié)調(diào)者處于工作狀態(tài),則向所有參與者發(fā)出 do Commit 請求。
2、參與者收到 do Commit 請求后,會正式執(zhí)行事務提交,并釋放整個事務期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋 Ack 完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的 Ack 消息后,即完成事務提交。
中斷事務:(任何一個參與者反饋 NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋時)
1、如果協(xié)調(diào)者處于工作狀態(tài),向所有參與者發(fā)出 abort 請求。
2、參與者使用階段 1 中的 Undo 信息執(zhí)行回滾操作,并釋放整個事務期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋 Ack 完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的 Ack 消息后,即完成事務中斷。
注意:進入階段三后,無論協(xié)調(diào)者出現(xiàn)問題,或者協(xié)調(diào)者與參與者網(wǎng)絡出現(xiàn)問題,都會導致參與者無法接收到協(xié)調(diào)者發(fā)出的 do Commit 請求或 abort 請求。此時,參與者都會在等待超時之后,繼續(xù)執(zhí)行事務提交。
3PC 的優(yōu)點和缺陷
優(yōu)點:降低了阻塞范圍,在等待超時后協(xié)調(diào)者或參與者會中斷事務。避免了協(xié)調(diào)者單點問題,階段 3 中協(xié)調(diào)者出現(xiàn)問題時,參與者會繼續(xù)提交事務。
缺陷:腦裂問題依然存在,即在參與者收到 PreCommit 請求后等待最終指令,如果此時協(xié)調(diào)者無法與參與者正常通信,會導致參與者繼續(xù)提交事務,造成數(shù)據(jù)不一致。
到此,關于“怎么理解 MySQL 的 2PC 和 3PC”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>