實時一致性
在 TCC 模式中,我們會把原來的一個介面分為 Try 介面、Confirm 介面、Cancel 介面。
-
Try 介面用來檢查資料、預留業務資源。
-
Confirm 介面用來確認實際業務操作、更新業務資源。
-
Cancel 介面是指釋放 Try 介面中預留的資源。
所以 TCC 模式是一個很麻煩的方案,除了每個業務程式碼的工作量 X3 之外,出錯的機率也高,因為我們需要透過相應邏輯保證上面的注意事項都被處理。
06 六、Seata 中 AT 模式的自動回滾
對於使用 Seata 的人來說操作比較簡單,只需要在觸發整個事務的業務發起方的方法中加入@GlobalTransactional 標註,且使用普通的 @Transactional 包裝好分散式事務中相關服務的相關方法即可。
在 Seata 內在機制中,AT 模式的自動回滾往往需要執行以下步驟:
(一)一階段
-
解析每個服務方法執行的 SQL,記錄 SQL 的型別(Update、Insert 或 Delete),修改表並更新 SQL 條件等資訊;
-
根據前面的條件資訊生成查詢語句,並記錄修改前的資料映象;
-
執行業務的 SQL;
-
記錄修改後的資料映象;
-
插入回滾日誌:把前後映象資料及業務 SQL 相關的資訊組成一條回滾日誌記錄,插入 UNDO_LOG 表中;
-
提交前,向 TC 註冊分支,並申請相關修改資料行的全域性鎖 ;
-
本地事務提交:業務資料的更新與前面步驟生成的 UNDO LOG 一併提交;
-
將本地事務提交的結果上報給事務控制器。
收到事務控制器的分支回滾請求後,我們會開啟一個本地事務,並執行如下操作:
-
查詢相應的 UNDO LOG 記錄;
-
資料校驗:拿 UNDO LOG 中的後映象資料與當前資料進行對比,如果存在不同,說明資料被當前全域性事務之外的動作做了修改,此時我們需要根據配置策略進行處理;
-
根據 UNDO LOG 中的前映象和業務 SQL 的相關資訊生成回滾語句並執行;
-
提交本地事務,並把本地事務的執行結果(即分支事務回滾的結果)上報事務控制器。
-
收到事務控制器的分支提交請求後,我們會將請求放入一個非同步任務佇列中,並馬上返回提交成功的結果給事務控制器。
-
非同步任務階段的分支提交請求將非同步地、批次地刪除相應 UNDO LOG 記錄。
推薦閱讀:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2902748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何基於日誌,同步實現資料的一致性和實時抽取?
- openGauss 檢查時間一致性
- redis快取一致性延時雙刪程式碼實現方式詳解Redis快取
- 快取一致性最佳實踐快取
- 強一致性hash實現java版本及強一致性hash原理Java
- 報錯時,考慮“版本命名一致性”
- Lamport時間戳與一致性演算法LAMP時間戳演算法
- 一致性Hash的原理與實現
- mysqldump備份時如何保持資料的一致性MySql
- 用友微服務事務一致性實踐微服務
- 如何實現資料庫讀一致性資料庫
- Dubbo 分散式事務一致性實現分散式
- rocketmq可靠一致性的mysql落地實現MQMySql
- 一致性雜湊演算法 PHP 實現演算法PHP
- 手動實現一致性 Hash 演算法演算法
- 微服務簡單實現最終一致性微服務
- 一致性協議淺析:從邏輯時鐘到Raft協議Raft
- 自己實現一個一致性 Hash 演算法演算法
- 一致性 Hash 演算法的實際應用演算法
- 五個實現角色一致性的影像生成工具
- 使用GO實現Paxos分散式一致性協議Go分散式協議
- 一致性hash演算法原理及go實現演算法Go
- 分散式事務之最終一致性實現方案分散式
- 觀點:實現CQRS分離不如實現一致性分離 - @jroper
- mysqldump備份時的資料一致性問題--single-transactionMySql
- 資料一致性(一) - 介面呼叫一致性
- 一文搞懂一致性hash的原理和實現
- 一文搞懂一致性 hash 的原理和實現
- MySQL筆記之一致性檢視與MVCC實現MySql筆記MVC
- Golang 實現 Redis(7): Redis 叢集與一致性 HashGolangRedis
- 一致性Hash
- Kubernetes 併發控制與資料一致性的實現原理
- 基於hashicorp/raft的分散式一致性實戰教學Raft分散式
- Kubernetes併發控制與資料一致性的實現原理
- [譯] 我們是如何高效實現一致性雜湊的
- 從實戰出發,聊聊快取資料庫一致性快取資料庫
- NetCore微服務實現事務一致性masstransit之saga使用NetCore微服務
- etcd學習(7)-etcd中的線性一致性實現