(二)分布式事務(wù)解決方案

分布式事務(wù)解決方案:基于XA協(xié)議的兩階段提交、消息事務(wù)+最終一致性、TCC編程模式

1、XA協(xié)議兩階段提交

分布式事務(wù)協(xié)議兩部分:(1)事務(wù)管理器(負責本地資源提交和回滾)??(2)本地資源管理器(DB實現(xiàn)了XA接口)。

缺點:性能不理想,無法滿足高并發(fā)。mysql的XA實現(xiàn),沒有記錄prepare階段日志,主備切換不一致。許多nosql也沒支持XA

2、消息事務(wù)+最終一致性

基于消息中間件的兩階段提交,將本地事務(wù)發(fā)消息放一個分布式事務(wù),本地成功且對外發(fā)消息成功,要么都失敗,RocketMQ支持

1、A系統(tǒng)向消息中間件發(fā)送預備消息

2、消息中間件保存預備消息并返回成功

3、A執(zhí)行本地事務(wù)

4、A發(fā)送提交消息給消息中間件

步驟一、二出錯,整個事務(wù)失敗,不會執(zhí)行A的本地操作

三出錯,回滾預備消息,怎么回滾?A系統(tǒng)實現(xiàn)消息中間件回調(diào)接口,消息中間件不斷執(zhí)行回調(diào)接口檢查A是否成功,失敗則回滾預備消息

四出錯,A事務(wù)成功,通過回調(diào)接口,中間件檢查A成功,不需要發(fā)消息,消息中間件提交消息,完成事務(wù)

兩階段提交用在高并發(fā),拆成消息事務(wù)A系統(tǒng)本地操作+發(fā)消息)+B本地操作,B系統(tǒng)操作由消息驅(qū)動,消息事務(wù)成功,A一定成功,B會收到消息執(zhí)行本地操作,失敗消息會重投,直到成功

3、TCC編程模式

兩階段變種,代碼人為實現(xiàn)兩階段。Try、Confirm和Cancel。下單:Try扣庫存Confirm更新訂單狀態(tài),失敗Cancel恢復庫存。

總結(jié)

部分控制:變種兩階段提交,消息事務(wù)+最終一致性、TCC模式。并發(fā)量和性能很好,一致性減弱

完全控制:完全實現(xiàn)兩階段提交。犧牲性能,保障一致

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容