Seata的工作模式

Seata的分布式模型中各个角色的作用:

1.TM(事务管理器)

是分布式事务的发起方,负责定义全局事务的边界(开始,提交,回滚),并于TC交互协调事务状态。

核心职责:

​ 通过@GlobalTransctional注解标记全局事务的起点。

​ 向TC注册全局事务

​ 根据业务逻辑决定全局事务的提交或回滚

2.TC(事务协调器)

是Seata的核心组件,负责协调全局事务的提交或回滚,维护全局事务和分支事务的状态。

核心职责:

​ 接收TM的全局事务注册请求,生成全局唯一的XID。

​ 管理分支事务的注册和状态。

​ 驱动两阶段提交(1.分支事务提交预操作 2.全局提交或回滚)

关键特性:

​ TC是独立部署的服务,需高可用以保证事务一致性

3.RM(资源管理器)

RM管理本地资源(如数据库、消息队列),负责分支事务的执行和状态报告。

核心职责:

​ 向TC注册分子事务,绑定到全局事务XID。

​ 执行本地事务的提交或回滚操作。

​ 生成并管理undo_log数据,用于事务回滚时的数据恢复。

实现机制:

​ RM通过JDBC代理拦截SQL,生成前后镜像,记录到updo_log表。

4.undo_log表

用户实现Seata的AT模式,记录事务操作的前后镜像,支持事务回滚时的数据恢复。

工作流程:

​ 1.事务提交前: RM执行SQL时,生成前后镜像并写入undo_log表。

​ 2.事务回滚时:根据undo_log中的before image恢复数据,删除对应的undo_log记录。

​ 3.事务提交后: 异步清理已提交事务的undo_log记录。

1.AT模式

如图展示了AT模式的总体工作流程

1.由TM(事务管理器)开启全局事务至TC中,生成XID

2.将XID传递到RM中所有参与事务的服务

3.:RM向TC注册分支事务,并拦截本地资源操作并于XID关联

4.在RM执行操作前将数据备份至undo_log表中

5.RM执行操作,并向TC提交事务状态

6.由TM提醒TC事务结束

7.由TC检查所有分支的事务状态

8.若所有事务都成功,则删除快照(即删除undo_log表中的数据)

​ 反之则将undo_log表中的数据回滚,将数据变为执行操作前的状态,完成后删除undo_log表中的数据

2.XA模式

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

  1. TC检测各分支事务执行状态
  2. 如果都成功,通知所有RM提交事务
  3. 如果有失败,通知所有RM回滚事务

3.TCC模式

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。需要实现三个方法:

  • Try:资源的检测和预留;
  • Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。
  • Cancel:预留资源释放,可以理解为try的反向操作。

4.Saga

  • 核心原理
    将长事务拆分为多个本地事务,通过 补偿操作 实现最终一致性。
  • 工作流程
    1. 按顺序执行多个本地事务。
    2. 若某个事务失败,依次触发已提交事务的补偿操作。
  • 特点
    • 无全局锁:适合长事务(如订单创建后异步通知物流)。
    • 异步补偿:通过状态机(State Machine)管理事务和补偿流程。
    • 适用场景:跨服务长流程(如订单创建 + 物流调度 + 支付)。

四种模式的对比

XID的解释

在 Seata 中,XID(全局事务 ID) 是分布式事务的唯一标识符,用于在分布式系统中追踪和协调一个全局事务的所有分支事务。

1. XID 的定义

  • 核心作用
    XID 是全局事务的唯一标识,贯穿整个分布式事务的生命周期,确保事务的原子性和一致性。
  • 生成者
    TC(Transaction Coordinator,事务协调器) 在 TM(事务管理器)发起全局事务时生成。

2. XID 的生命周期

全局事务启动

  • TM 调用 @GlobalTransactional 方法时,向 TC 发起“开启全局事务”请求。
  • TC 生成 XID 并返回给 TM。

分支事务注册

  • 当 RM(资源管理器)执行本地事务时,携带 XID 向 TC 注册分支事务(Branch Transaction)。

事务协调

  • TC 根据 XID 管理所有分支事务的状态(提交或回滚)。

事务结束

  • 全局事务提交或回滚后,TC 清理 XID 关联的所有分支事务信息。

3.XID的核心作用

posted @ 2025-03-19 15:05  留梦&  阅读(66)  评论(0)    收藏  举报