Seata的實現原理主要圍繞其核心架構(TC/TM/RM)和事務模式(如AT、TCC等)展開,通過協調全局事務與分支事務的協作保證數據一致性。以下是核心實現原理的詳細解析:
?? ??一、核心架構協作機制??
Seata通過 ??TC(事務協調器)、TM(事務管理器)、RM(資源管理器)?? 三組件協同工作:
-
??全局事務啟動(TM主導)??
- TM通過
@GlobalTransactional
注解標記事務起點,向TC申請開啟全局事務,生成全局唯一 ??XID?? 。 - XID通過RPC調用鏈傳播至所有關聯服務(如訂單服務→庫存服務→賬戶服務)。
- TM通過
-
??分支事務注冊(RM執行)??
- 各服務的RM向TC注冊分支事務,關聯到同一XID的全局事務中。
- RM執行本地事務(如更新數據庫),并在提交前記錄 ??回滾日志(undo_log)??(AT模式)或調用TCC預留接口(TCC模式)。
-
??全局事務決議(TC調度)??
- TM根據業務結果通知TC提交或回滾全局事務。
- TC驅動所有RM執行最終操作:
- ??提交??:異步刪除undo_log(AT模式)或調用Confirm接口(TCC模式)。
- ??回滾??:根據undo_log生成反向SQL補償數據(AT模式)或調用Cancel接口(TCC模式)。
? ??關鍵點??:XID在調用鏈中透傳,確保所有分支事務歸屬同一全局事務;TC作為中央調度器維護事務狀態。
🔧 ??二、AT模式(自動補償)的實現細節??
AT模式是Seata的默認模式,通過 ??SQL解析 + 回滾日志?? 實現無侵入事務控制:
??1. 第一階段:本地事務提交與日志記錄??
- ??SQL攔截與解析??
RM攔截業務SQL(如UPDATE product SET stock=stock-1
),解析語義并提取操作的數據范圍。 - ??生成數據鏡像??
- 查詢當前數據快照作為 ??前鏡像(before_image)??(修改前的數據)。
- 執行業務SQL,查詢修改后數據作為 ??后鏡像(after_image)?? 。
- ??記錄undo_log??
在??同一本地事務??中提交業務SQL和undo_log(包含前后鏡像的JSON),并向TC申請??全局鎖??(防止其他事務修改同一數據)。
??2. 第二階段:異步提交或補償回滾??
- ??提交??:TC異步刪除undo_log,釋放全局鎖(毫秒級完成)。
- ??回滾??:
- RM根據XID和分支ID查找undo_log,對比后鏡像與當前數據:
- 若一致,用前鏡像生成反向SQL(如
UPDATE product SET stock=stock+1
)執行補償。 - 若不一致(數據被其他事務修改),根據策略(如重試或人工干預)處理。
- 若一致,用前鏡像生成反向SQL(如
- 補償操作在本地事務中完成,確保原子性。
- RM根據XID和分支ID查找undo_log,對比后鏡像與當前數據:
?? ??隔離性保障??:通過??全局鎖機制??實現寫隔離。例如:事務A持有數據X的全局鎖時,事務B需等待鎖釋放才能修改X,避免臟寫。
🔄 ??三、其他模式的實現差異??
??模式?? | ??實現原理?? | ??適用場景?? |
---|---|---|
??TCC?? | 業務層手動實現三階段: |
- ??Try??:預留資源(如凍結庫存)
- ??Confirm??:提交資源(實際扣減)
- ??Cancel??:釋放資源(解凍庫存)
需保證冪等性和空回滾處理。 | 高一致性場景(支付、轉賬) |
| ??SAGA?? | 將長事務拆分為子任務鏈,每個子事務提交后觸發下一個;失敗時按逆序調用補償操作。 | 跨服務長流程(保險理賠、物流) |
| ??XA?? | 基于數據庫XA協議: - 一階段:RM執行SQL但不提交,持有數據庫鎖
- 二階段:TC通知所有RM提交/回滾
強一致但性能低(同步阻塞)。 | 傳統金融系統 |
?? ??四、性能與可靠性設計??
- ??全局鎖優化??
- 鎖沖突時采用退避重試機制,超時自動回滾分支事務。
- 高并發場景建議避免跨服務操作同一行數據。
- ??異步化處理??
- AT模式二階段提交異步刪除undo_log,減少阻塞。
- ??高可用部署??
- TC支持集群化(如注冊到Nacos),事務日志持久化到數據庫(避免單點故障)。
💎 ??總結??
Seata的核心實現圍繞 ??XID全局事務鏈??、??分支事務狀態管理?? 及 ??多模式補償機制??:
- ??AT模式??:通過SQL解析+undo_log實現自動回滾,犧牲部分性能換取低侵入性;
- ??TCC/SAGA??:業務層控制補償邏輯,性能更高但開發復雜;
- ??全局鎖與異步設計??:平衡一致性與并發性能,適合多數微服務場景。
實際選型需結合業務需求:簡單場景用AT,高性能要求用TCC,長流程用SAGA,強一致用XA。