分布式事務seata
- 角色組成
- 角色指責
- AT模式
- TCC模式
角色組成
- TC:事務協調者,維護全局和分支事務的狀態,驅動全局事務提交或回滾。
- TM:事務管理者,定義全局事務的范圍:開始全局事務、提交或回滾全局事務。
- RM:資源管理器,管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。
TC為單獨部署的Server服務端,TM和RM為嵌入到應用中的Client客戶端。
角色指責
- TM請求TC開啟一個全局事務。TC會生成一個XID作為該全局事務的編號。XID會在微服務的調用鏈路中傳播,保證將多個微服務的子事務關聯在一起。
- RM請求TC將本地事務注冊為全局事務的分支事務,通過全局事務的XID進行關聯。
- TM通知TC告訴XID對應的全局事務是進行提交還是回滾。
- TC驅動RM們將XID對應的自己的本地事務進行提交還是回滾。
AT模式
兩階段提交:
一階段:生成undolog(前置鏡像、后置鏡像),拿到本地鎖,做業務數據修改,拿到全局鎖,提交本地事務。如果未拿到全局鎖,超時失敗將回滾本地事務,釋放本地鎖。
二階段:
成功:(異步操作)刪除undolog,釋放全局鎖。
失敗:查找undolog,驅動RM回滾本地事務,釋放全局鎖。
TCC模式
TCC模式與AT模式比更靈活,不需要依賴數據庫。但是需要手動實現try、commit、cancel3個方法。TCC框架還存在3個問題:空回滾、冪等、懸掛。使用useTCCFence參數(增加日志表記錄全局事務狀態)可以解決。