Seata的AT模式的執行流程

loong3發表於2024-10-13

Seata角色術語
TC - 事務協調者
維護全域性和分支事務的狀態,驅動全域性事務提交或回滾,即Seata服務端。

TM - 事務管理器
定義全域性事務的範圍:開始全域性事務、提交或回滾全域性事務,在事務發起的客戶端。

RM - 資源管理器
管理分支事務處理的資源,與TC交談以註冊分支事務和報告分支事務的狀態,並驅動分支事務提交或回滾,在分支事務執行的客戶端。

Seata執行流程
Seata AT模式
第一階段
透過代理資料來源DataSourceProxy對業務SQL進行解析,轉換成undolog,並與業務SQL在一個事務內入庫,然後註冊分支事務、提交、上報狀態。
過程:
解析 SQL:得到 SQL 的型別(UPDATE),表(product),條件(where name = 'TXC')等相關的資訊。
查詢前映象:根據解析得到的條件資訊,生成查詢語句,定位資料。
得到前映象:執行業務 SQL:更新這條記錄的 name 為 'GTS'。
查詢後映象:根據前映象的結果,透過 主鍵 定位資料。
得到後映象:插入回滾日誌:把前後映象資料以及業務 SQL 相關的資訊組成一條回滾日誌記錄,插入到 UNDO_LOG 表中。

二階段-回滾
收到 TC 的分支回滾請求,開啟一個本地事務,執行如下操作。
透過 XID 和 Branch ID 查詢到相應的 UNDO LOG 記錄。
資料校驗:拿 UNDO LOG 中的後鏡與當前資料進行比較,如果有不同,說明資料被當前全域性事務之外的動作做了修改。這種情況,需要根據配置策略來做處理,詳細的說明在另外的文件中介紹。
根據 UNDO LOG 中的前映象和業務 SQL 的相關資訊生成並執行回滾的語句

第二階段
分散式事務操作成功,則TC通知RM非同步刪除undolog。

分散式事務操作失敗,TM向TC傳送回滾請求,RM 收到協調器TC發來的回滾請求,透過 XID 和 Branch ID 找到相應的回滾日誌記錄,透過回滾記錄生成反向的更新 SQL 並執行,以完成分支的回滾。

相關文章