分散式事務之Seata的AT模型

我睡觉时候不困發表於2024-10-13

在Seata的事務管理中有三個重要的角色:

  • TC (Transaction Coordinator) - 事務協調者:維護全域性和分支事務的狀態,協調全域性事務提交或回滾。
  • TM (Transaction Manager) - 事務管理器:定義全域性事務的範圍、開始全域性事務、提交或回滾全域性事務。
  • RM (Resource Manager) - 資源管理器:管理分支事務,與TC交談以註冊分支事務和報告分支事務的狀態,並驅動分支事務提交或回滾。
    Seata支援四種不同的分散式事務解決方案:
  • XA
  • TCC
  • AT
  • SAGA
    在這裡先簡要說一下AT模型
    AT模型是分為兩個階段來工作的,並且該模型保證了事務的最終一致性,但是中間可能會有資料不一致的情況,比如一個交易服務在結算購物車訂單時,會將購物車中被結算的商品清空,然後減少被清除的商品的庫存,倘若結賬時出現錯誤,並且結賬和清空購物車兩個介面在不同的事務中,這樣就會導致商品未結算,但是實際上購物車中的商品已經被清空了,這樣就導致了資料的不一致。
    不過這只是暫時的,因為AT模型的原理是全域性事務中有一個事務未提交成功,那麼所有的事務都會回滾,並且恢復資料,具體如下:

基本流程圖

image

首先該模型開啟全域性事務
階段一:所有事務首先向TC註冊分支事務,然後執行sql後都會直接提交,並且在undo-log表中存放臨時資料,也就是資料快照,以防後面回滾時恢復資料,最後TC報告自己的事務狀態。
階段二:所有事務如果都提交成功,那麼所有的分支事務都刪除undo-log表中的資料快照,如果有一個及以上的事務提交失敗,那麼所有已經提交過的事務都回滾,並且恢復資料。

相關文章