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

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

1、XA協議兩階段提交

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

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

2、消息事務+最終一致性

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

1、A系統向消息中間件發送預備消息

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

3、A執行本地事務

4、A發送提交消息給消息中間件

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

三出錯,回滾預備消息,怎么回滾?A系統實現消息中間件回調接口,消息中間件不斷執行回調接口檢查A是否成功,失敗則回滾預備消息

四出錯,A事務成功,通過回調接口,中間件檢查A成功,不需要發消息,消息中間件提交消息,完成事務

兩階段提交用在高并發,拆成消息事務A系統本地操作+發消息)+B本地操作,B系統操作由消息驅動,消息事務成功A一定成功,B會收到消息執行本地操作,失敗消息會重投,直到成功

3、TCC編程模式

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

總結

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容