3PC Three-Phase-Commit 二階段提交
分為三步:CanCommit辱士、PreCommit和do Commit
階段一:CanCommit
1泪掀、事務(wù)詢問
協(xié)調(diào)者向參與者發(fā)送包含事務(wù)內(nèi)容的canCommit請求
2、各參與者向協(xié)調(diào)者反饋詢問的響應(yīng)
參與者根據(jù)自身狀態(tài)反饋yes或no
階段二:PreCommit
協(xié)調(diào)者集齊yes
1颂碘、發(fā)送預(yù)提交請求
協(xié)調(diào)者給各參與者發(fā)送preCommit請求异赫,進(jìn)入prepared階段
2、事務(wù)預(yù)提交
參與者接收到preCommit头岔,執(zhí)行事務(wù)祝辣,將UNDO和REDO信息記錄到事務(wù)日志中
3、各參與者向協(xié)調(diào)者反饋事務(wù)執(zhí)行的響應(yīng)
參與者反饋ACK
協(xié)調(diào)者收到no
1切油、發(fā)送中斷請求
協(xié)調(diào)者發(fā)送abort
2、中斷事務(wù)
參與者收到abort或者在階段一或二中超時名惩,都會中斷事務(wù)
階段三:do Commit
協(xié)調(diào)者收到所有ack
1澎胡、發(fā)送提交請求
協(xié)調(diào)者收到所有ack,給所有參與者發(fā)送doCommit請求
2娩鹉、事務(wù)提交
參與者接收到doCommit請求后攻谁,正式執(zhí)行事務(wù)提交,是否事務(wù)資源
3弯予、反饋事務(wù)提交結(jié)果
參與者反饋ACK消息
4戚宦、完成事務(wù)
協(xié)調(diào)者收到所有ACK消息,完成事務(wù)
中斷事務(wù)(二階段收到no锈嫩,或者等待超時受楼,沒集齊二階段的ACK)
1、發(fā)送中斷請求
協(xié)調(diào)者向所有參與者發(fā)送abort
2呼寸、事務(wù)回滾
參與者收到abort艳汽,利于UNDO信息回滾事務(wù),釋放資源
3对雪、反饋事務(wù)回滾結(jié)果
參與者反饋ACK
4河狐、中斷事務(wù)
協(xié)調(diào)者集齊所有ACK,中斷事務(wù)
進(jìn)入階段三可能會遇到兩種情況
- 協(xié)調(diào)者崩潰
- 網(wǎng)絡(luò)故障
無論出現(xiàn)哪種情況,最終參與者都收不到doCommit和abort請求馋艺,這時栅干,參與者在等待超時后,會繼續(xù)進(jìn)行事務(wù)提交
優(yōu)點(diǎn):解決2PC的單點(diǎn)故障影響整個系統(tǒng)問題
缺點(diǎn):參與者超時后會繼續(xù)提交事務(wù)捐祠,會出現(xiàn)數(shù)據(jù)不一致性