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。