分佈式事務兩階段提交和三階段提交

分佈式事務

兩階段提交

基於XA架構,採取強一致性,遵從acid

有兩個角色: 一個全局事務管理者(Transaction manage) 也叫協調者和多個局部資源管理者(resource manage) 也叫參與者

1.請求提交階段/投票階段 (commit-request phase/ voting phase)

協調者詢問參與者是否可以正常執行,讓參與者準備提交事務,參與者執行sql操作,反饋執行結果,但事務不提交。

2.提交階段/決策階段(commit phase)

協調者根據第一階段的投標結果,彙總決定事務是提交還是回滾。當前所有的參與者提交的狀態是同意,事務纔會提交,只要有一個又問題,事務就會回滾。

二階段存在的問題

1.同步阻塞問題---- 在執行過程中,參與者佔用公共資源,其他第三方節點訪問,處於阻塞的狀態

2.單點故障問題----- 協調者單點故障問題

3.數據不一致問題----協調者出現問題,只通知了部分參與者,只有部分參與者進行了事務的提交,導致事務的不一致。

三階段提交

引入 預詢問策略和超時檢測,減少集羣的阻塞策略

1.canCommit階段

2.prepareCommit 階段

3.doCommit 階段

 

TCC分佈式事務機制,保證數據的一致性

try comfirm cancel 三個接口

三個階段

try 階段 鎖定某個資源,設置一個預備類的狀態,凍結部分數據。

confirm 階段 try 階段執行成功,執行confirm

cancel try階段執有異常,執行cancel

TCC 事務會記錄一些分佈式事務的日誌

國內開源的TCC分佈式事務框架: ByteTCC,TCC-transaction,Himly

 

 

可靠消息最終一致性方案實現的分佈式事務

使用rocketmq 實現

rocketmq 解決了一下的問題

1.本地事務與消息發送的原子性操作

2.事務參與方接受消息的可靠性

 

 

基於消息隊列的柔性事務

本地事務+定時任務+消息隊列+事件表

參考:

1.https://seata.io/zh-cn/docs/overview/what-is-seata.html----seata中文文檔

2.https://www.cnblogs.com/binyue/p/3678390.html---- 二階段提交/三階段提交

3.https://www.jianshu.com/p/bfd433bf8429----兩階段提交/三階段提交

4.https://www.cnblogs.com/jajian/p/10014145.html----TCC事務

5.https://www.cnblogs.com/haizai/p/11954339.html-----可靠消息最終一致性的分佈式解決方案

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章