一、AT(auto transaction)模式
這是一種無侵入式分布式事務解決方案,該模式下,用戶只需要關注自己的“業務SQL”(這是第一個階段),seata框架會自動生成分布式事務的二階段提交或回滾。
一階段:
在該階段,seata會攔截業務SQL,首先解析SQL語義,找到對應要更新的業務數據,在業務數據更新之前,將其保存成“before image”(未更新前的原始數據--回滾數據),然后執行業務SQL,更新業務數據。在更新之后,再將其保存為“after image”(更新之后的數據--提交數據),最后生成行鎖,以上操作全部在一個數據庫事務內完成,這樣保證了一階段事務的原子性。
二階段提交:
二階段如果是提交的話,因為業務SQL在一階段已經提交至數據庫,所以seata框架只需要將一階段保存的快照數據和行鎖刪掉即可。
二階段回滾:
seata需要回滾一階段已經執行的業務SQL,使用一階段存儲的“before image”還原業務數據;但在還原前,要首先校驗臟寫,對比數據庫當前業務數據和“after image”,如果兩份數據完全一樣,說明沒有臟寫,
可以還原業務數據,如果不一致,說明出現臟寫,需要人工干預。
二、TCC模式
該模式需要用戶根據自己的業務場景(因此侵入性太強,但是整個過程不涉及鎖,性能較高),實現Try、Confirm和Cancel三個操作,事務發起方在一階段執行Try方法,二階段執行Confirm或Cancel方法。
三、可靠消息最終一致性
這里我們一般選擇RocketMQ。
轉載:基於RocketMQ分布式事務 - 完整示例 - 知乎 (zhihu.com)