2PC Two-Phase-Commit 二階段提交
協(xié)調(diào)者:Coordinator 統(tǒng)一調(diào)度所有分布式節(jié)點(diǎn)的執(zhí)行邏輯
參與者:Participant 被調(diào)度的分布式節(jié)點(diǎn)
階段一:提交事務(wù)請(qǐng)求(投票階段)
1蒙挑、事務(wù)詢問(wèn)疾党。
協(xié)調(diào)者像所有參與者發(fā)送事務(wù)內(nèi)容,等待參與者響應(yīng)
2、執(zhí)行事務(wù)左驾。
參與者執(zhí)行事務(wù),記錄UNDO和REDO信息(用于回滾)
3泥畅、各參與者向協(xié)調(diào)者事務(wù)詢問(wèn)的響應(yīng)豌骏。
如果參與者執(zhí)行成功返回yes,失敗返回no
階段二:執(zhí)行事務(wù)提交
如果協(xié)調(diào)者得到都是yes
1汁蝶、發(fā)送提交請(qǐng)求
發(fā)送commit給各參與者
2渐扮、事務(wù)提交
參與者收到commit請(qǐng)求之后,執(zhí)行事務(wù)提交掖棉,釋放事務(wù)資源
3墓律、反饋事務(wù)提交結(jié)果
參與者反饋ACK給協(xié)調(diào)者
4、完成事務(wù)
協(xié)調(diào)者收齊所有ACK幔亥,完成事務(wù)
如果協(xié)調(diào)者收到no或者某參與者超時(shí)
1耻讽、發(fā)送回滾請(qǐng)求
協(xié)調(diào)者發(fā)送rollback請(qǐng)求給眾參與者
2、事務(wù)回滾
參與者收到rollback帕棉,通過(guò)記錄中的UNDO信息针肥,執(zhí)行回滾,完成后釋放事務(wù)資源
3笤昨、反饋事務(wù)回滾結(jié)果
參與者完成rollback祖驱,向協(xié)調(diào)者發(fā)送ACK
4、中斷事務(wù)
協(xié)調(diào)者集齊所有ACK消息后瞒窒,完成事務(wù)中斷捺僻。
優(yōu)點(diǎn):原理簡(jiǎn)單,實(shí)現(xiàn)方便
缺點(diǎn):
- 同步阻塞
二階段提交執(zhí)行過(guò)程中,所有參與該事務(wù)操作的邏輯都處于阻塞狀態(tài) - 單點(diǎn)問(wèn)題
協(xié)調(diào)者單點(diǎn)匕坯,如果出現(xiàn)問(wèn)題束昵,則參與者會(huì)被鎖定 - 數(shù)據(jù)不一致
階段二,步驟2中葛峻,協(xié)調(diào)者發(fā)送commit請(qǐng)求時(shí)锹雏,如果發(fā)現(xiàn)局部網(wǎng)絡(luò)異常或者協(xié)調(diào)者未發(fā)送完commit請(qǐng)求之前奔潰术奖,導(dǎo)致部分參與者收到commit礁遵,其他參與者無(wú)法提交事務(wù),導(dǎo)致整個(gè)分布式系統(tǒng)出現(xiàn)數(shù)據(jù)不一致 - 太過(guò)保守
任意節(jié)點(diǎn)的失敗會(huì)導(dǎo)致整個(gè)事務(wù)失敗