文章目錄
- 一、簡介
- 二、四種模式
- (1)AT
- 1)過程
- 2)優點
- (2)TCC
- 1)過程
- 2)三種異常處理
- 3)優點
- (3)Sage
- 1)過程
- 2)适用場景
- 3)三種異常
- 4)優點
- (4)XA
- 1)過程
- 2)優點
- 三、問題
- (1)如何選擇模式?
- 四、資料
一、簡介
Seata
(Simple Extensible Autonomous Transaction Architecture):簡單可擴充自治事務架構
Seata
提供全方位分布式事務解決方案
Seata
有四種模式:
- AT
- TCC
- Sage
- XA
二、四種模式
(1)AT
在 AT 模式下,使用者隻需關心自己的 “業務SQL”
AT 模式分為兩個階段:
- 一階段:執行使用者
SQL
- 二階段:
架構自動生成Seata
如圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN1YjNyMTY5IDZxEGM1ITNzYzX3EjN1UTMxIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
1)過程
- 一階段
在一階段,Seata 會攔截“業務 SQL”,首先解析 SQL 語義,找到“業務 SQL”要更新的業務資料,在業務資料被更新前,将其儲存成“before image”,然後執行“業務 SQL”更新業務資料,在業務資料更新之後,再将其儲存成“after image”,最後生成行鎖。以上操作全部在一個資料庫事務内完成,這樣保證了一階段操作的原子性。
如圖:
- 二階段送出
二階段如果是送出的話,因為“業務 SQL”在一階段已經送出至資料庫, 是以 Seata 架構隻需将一階段儲存的快照資料和行鎖删掉,完成資料清理即可。
如圖:
- 二階段復原
二階段如果是復原的話,Seata 就需要復原一階段已經執行的“業務 SQL”,還原業務資料。復原方式便是用“before image”還原業務資料;但在還原前要首先要校驗髒寫,對比“資料庫目前業務資料”和 “after image”,如果兩份資料完全一緻就說明沒有髒寫,可以還原業務資料,如果不一緻就說明有髒寫,出現髒寫就需要轉人工處理。
如圖:
2)優點
AT 模式的一階段、二階段送出和復原均由 Seata 架構自動生成,使用者隻需編寫“業務 SQL”,便能輕松接入分布式事務,AT 模式是一種對業務無任何侵入的分布式事務解決方案。
(2)TCC
TCC分為三個階段:
- Try:做業務檢查和資源預留
- Confirm:确認送出
- Cancel:業務執行錯誤需要復原的狀态下執行分支事務的業務取消,預留資源釋放
1)過程
- Try
- Confirm
- Cancel
2)三種異常處理
- 空復原:Try未執行,Cancel 執行了
出現原因:
- 幂等:多次調用方法(Confirm)
出現原因:
- 網絡異常
- TC Server 異常
- 懸挂:Cancel接口 比 Try接口先執行
出現原因:
- 逾時
3)優點
相對于 AT 模式,TCC 模式對業務代碼有一定的侵入性,但是 TCC 模式無 AT 模式的全局行鎖,TCC 性能會比 AT 模式高很多。
(3)Sage
Sage 是長事務解決方案,事務驅動,參見
Event Sourcing
如圖:
1)過程
如圖:
2)适用場景
- 業務流程長/多
- 參與者包含其他公司或遺留系統服務,無法提供 TCC 模式要求的三個接口
- 典型業務系統:如金融網絡(與外部金融機構對接)、網際網路微貸、管道整合、分布式架構服務內建等業務系統
- 銀行業金融機構使用廣泛
3)三種異常
- 空補償:原服務未執行,補償服務執行了
出現原因:
- 原服務逾時(丢包)
- Saga 事務觸發復原
- 未收到原服務請求,先收到補償請求
- 懸挂:補償服務比原服務先執行
- 原服務逾時(擁堵)
- Saga 事務復原,觸發復原
- 擁堵的原服務到達
- 幂等:原服務與補償服務都需要保證幂等性
4)優點
- 一階段送出本地資料庫事務,無鎖,高薪能
- 補償服務即正向服務的 “反向”,高吞吐
- 參與者可異步執行,高吞吐
(4)XA
XA 模式是
Seata
将會開源的另一種無侵入的分布式事務解決方案
1)過程
2)優點
- 無侵入
- 将快照資料和行鎖等通過 XA 指令委托給了資料庫來完成
三、問題
(1)如何選擇模式?
四種分布式事務模式,分别在不同的時間被提出,每種模式都有它的适用場景
AT 模式是無侵入的分布式事務解決方案,适用于不希望對業務進行改造的場景,幾乎0學習成本。
TCC 模式是高性能分布式事務解決方案,适用于核心系統等對性能有很高要求的場景。
Saga 模式是長事務解決方案,适用于業務流程長且需要保證事務最終一緻性的業務系統,Saga 模式一階段就會送出本地事務,無鎖,長流程情況下可以保證性能,多用于管道層、內建層業務系統。事務參與者可能是其它公司的服務或者是遺留系統的服務,無法進行改造和提供 TCC 要求的接口,也可以使用 Saga 模式。
XA模式是分布式強一緻性的解決方案,但性能低而使用較少。
四、資料
https://linux.cn/article-11164-1.html