分布式事務與Seate框架


https://www.cnblogs.com/jian0110/p/14925087.html

https://www.cnblogs.com/jian0110/p/14762509.html

  • AP: Application 表示應用程序
  • RM: Resource Manager 資源管理器,比如數據庫
  • TM: Transaction Manager 表示事務管理器,協調事務和管理資源,類似於Spring的Transaction Manager。

 

 

一、AT模式介紹

 

  同樣地,還是得先復習下分布式事務的相關理論部分:AT模式是Seata最主推的分布式事務且基於XA演進而來的解決方案,主要有三個角色:TM、RM和TC,其中TM和RM作為Seata的客戶端和業務集成,TC作為Seata服務器獨立部署TM向TC注冊一個全局事務並生成全局唯一的XID;在AT模式下,數據庫資源被當做RM,訪問RM時,Seata會對請求進行攔截;每個本地事務提交時,RM會向TC(Transaction Coordinator,事務協調器)注冊一個分支事務。

 

從三個角色TM、RM和TC的角度來記錄具體的流程的話,可以總結如下:

  • TM向TC注冊全局事務,並生成全局唯一XID;
  • RM向TC注冊分支事務,並將其納入到該XID對應的全局事務范圍。
  • RM向TC匯報資源的准備狀態
  • TC匯總所有事務參與者的執行狀態,決定分布式事務全部回滾還是提交
  • TC通知所有的RM提交/回滾事務

從具體的微服務角度總結,假設分別有三個:MicroService-1, MicroService-2, MicroService-3,流程圖如下:

 

二、Seata AT模式的實現原理

1. AT模式的第一階段實現

  解析業務SQL,更新業務數據,保存更新前后鏡像到undo_log。在業務操作數據庫流程中,Seata會基於數據源代理(0.9以后支持自動代理)對原執行SQL進行解析。之后通過本地事務的ACID特性,將這兩步操作(保存業務數據前后鏡像到undo_log, 更新業務數據)在本地事務中進行提交

 

 

 

 

 

 

 

訂單服務:

    TM(microService):seata-order-service

    RM(DB Resources):jdbc:mysql://127.0.0.1:3306/order

 

@GlobalTransactional // TM開啟全局事務 @Transactional(rollbackFor = Exception.class)

// 這里先檢查有沒有庫存了, 生產環境下這里是需要for update數據庫鎖,或者分布式鎖

 

 

1.TCC補償型方案(互聯網最常用的方案)

TCC 是一種比較成熟的分布式數據一致性解決方案,實際上是把一個完整業務拆分為三個步驟:

  Try:主要是數據的校驗或者資源的預留;

  Confirm:確認真正執行的任務,只操作Try階段預留的資源;

  Cancel:取消執行,釋放Try階段預留的資源。

其實TCC是2PC的思想,第一階段通過Try進行准備工作,第二階段Confirm/Cancel表示Try階段操作的確認和回滾

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM