GTS 定義了一套事務框架以便描述分布式事務,在框架下支持不同事務模式運行。

核心組件定義

核心組件定義

分布式事務包含以下 3 個核心組件:

  • Transaction Coordinator(TC):事務協調器,維護全局事務的運行狀態,負責協調并驅動全局事務的提交或回滾。
  • Transaction Manager(TM):控制全局事務的邊界,負責開啟一個全局事務,并最終發起全局提交或全局回滾的決議。
  • Resource Manager(RM):控制分支事務,負責分支注冊、狀態匯報,并接收事務協調器的指令,驅動分支(本地)事務的提交和回滾。

一個典型的事務過程包括:

  1. TM 向 TC 申請開啟(Begin)一個全局事務,全局事務創建成功并生成一個全局唯一的 XID。
  2. XID 在微服務調用鏈路的上下文中傳播。
  3. RM 向 TC 注冊分支事務,將其納入 XID 對應全局事務的管轄。
  4. TM 向 TC 發起針對 XID 的全局提交(Commit)或回滾(Rollback)決議。
  5. TC 調度 XID 下管轄的全部分支事務完成提交(Commit)或回滾(Rollback)請求。

事務框架

基于架構上定義的 3 個核心組件,分布式事務被抽象成如下事務框架。

事務框架

3個核心組件的功能如下:

  • TM定義全局事務的邊界。
  • RM負責定義分支事務的邊界和行為。
  • TC、TM和RM交互,做全局的協調。交互包括開啟(Begin)、提交(Commit)、回滾(Rollback)全局事務;分支注冊(Register Branch)、狀態上報(Branch Status Report)和分支提交(Branch Commit)、分支回滾(Branch Rollback)。

事務模式

事務模式是這個框架下 RM 驅動的分支事務的不同行為模式,即事務(分支)模式。事務模式包括 AT 模式、TCC 模式、Saga 模式和 XA 模式。

  • AT 模式事務模式-AT

    AT 模式 RM 驅動分支事務的行為分為以下兩個階段:

    • 執行階段:
      1. 代理 JDBC 數據源,解析業務 SQL,生成更新前后的鏡像數據,形成 UNDO LOG。
      2. 向 TC 注冊分支。
      3. 分支注冊成功后,把業務數據的更新和 UNDO LOG 放在同一個本地事務中提交。
    • 完成階段:
      • 全局提交,收到 TC 的分支提交請求,異步刪除相應分支的 UNDO LOG。
      • 全局回滾,收到 TC 的分支回滾請求,查詢分支對應的 UNDO LOG 記錄,生成補償回滾的 SQL 語句,執行分支回滾并返回結果給 TC。
  • TCC 模式事務模式-TCC

    TCC 模式 RM 驅動分支事務的行為分為以下兩個階段:

    • 執行階段:
      1. 向 TC 注冊分支。
      2. 執行業務定義的 Try 方法。
      3. 向 TC 上報 Try 方法執行情況:成功或失敗。
    • 完成階段:
      • 全局提交,收到 TC 的分支提交請求,執行業務定義的 Confirm 方法。
      • 全局回滾,收到 TC 的分支回滾請求,執行業務定義的 Cancel 方法。
  • Saga 模式事務模式-Saga

    Saga 模式 RM 驅動分支事務的行為包含以下兩個階段:

    • 執行階段:
      1. 向 TC 注冊分支。
      2. 執行業務方法。
      3. 向 TC 上報業務方法執行情況:成功或失敗。
    • 完成階段:
      • 全局提交,RM 不需要處理。
      • 全局回滾,收到 TC 的分支回滾請求,執行業務定義的補償回滾方法。
  • XA 模式事務模式-XA

    XA 模式 RM 驅動分支事務的行為包含以下兩個階段:

    • 執行階段:
      1. 向 TC 注冊分支。
      2. XA Start,執行業務 SQL,XA End。
      3. XA prepare,并向 TC 上報 XA 分支的執行情況:成功或失敗。
    • 完成階段:
      • 收到 TC 的分支提交請求,XA Commit。
      • 收到 TC 的分支回滾請求,XA Rollback。