详细介绍seata框架中的四种模式

Seata 是一个开源的分布式事务解决方案,提供了四种事务模式:AT(自动补偿事务)TCC(Try-Confirm-Cancel)SAGA(长事务)XA(强一致性事务)。每种模式适用于不同的业务场景,具有各自的优缺点。下面详细介绍这四种模式:


1. AT 模式(Auto Transaction)

原理

AT 模式是一种无侵入式的分布式事务解决方案,基于两阶段提交(2PC)优化而来。它通过数据快照(undo_log)实现事务回滚,适用于支持本地 ACID 事务的关系型数据库(如 MySQL)。

  • 第一阶段(Prepare)
    • 解析 SQL,生成 before_image(更新前的数据快照)。
    • 执行业务 SQL 并提交本地事务。
    • 生成 after_image(更新后的数据快照)和行锁。
  • 第二阶段(Commit/Rollback)
    • 提交:异步删除 undo_log
    • 回滚:对比 after_image 和当前数据,若无脏写,则用 before_image 恢复数据;否则需人工干预。

优点

  • 无代码侵入,仅需 @GlobalTransactional 注解。
  • 高性能,一阶段直接提交,不阻塞资源。
  • 自动回滚,基于快照恢复数据。

缺点

  • 最终一致性,二阶段提交是异步的。
  • 依赖数据库,仅适用于关系型数据库。
  • 存在脏写风险,需全局锁避免并发冲突。

适用场景

  • 短事务,如订单支付、库存扣减等。
  • 对性能要求高,但对强一致性要求不严格的业务。

2. TCC 模式(Try-Confirm-Cancel)

原理

TCC 模式需要手动实现三个接口:Try(预留资源)、Confirm(提交)、Cancel(回滚)。适用于高并发、高一致性要求的场景。

  • Try:检查并预留资源(如冻结账户余额)。
  • Confirm:确认执行业务(如扣减冻结金额)。
  • Cancel:释放预留资源(如解冻金额)。

优点

  • 高性能,无全局锁,适用于高并发。
  • 支持非关系型数据库(如 Redis、MongoDB)。
  • 强一致性,业务可控性强。

缺点

  • 代码侵入性强,需手动编写补偿逻辑。
  • 需保证幂等性,防止重复提交或回滚。

适用场景

  • 资金交易(如转账、支付)。
  • 需要精确控制事务补偿的业务。

3. SAGA 模式(长事务)

原理

SAGA 模式适用于长事务,通过事件驱动的方式,将事务拆分为多个子事务,每个子事务有对应的补偿操作。适用于跨多个服务的复杂业务流程。

  • 正向操作:依次执行各子事务(如创建订单、扣库存)。
  • 补偿操作:若某子事务失败,则逆向执行已提交的子事务(如取消订单、回滚库存)。

优点

  • 支持长事务,适用于跨多个微服务的流程。
  • 异步执行,提高系统吞吐量。

缺点

  • 最终一致性,存在中间状态。
  • 补偿逻辑复杂,需手动实现回滚。

适用场景

  • 订单+库存+物流等多步骤业务。
  • 跨系统调用,如电商下单流程。

4. XA 模式(强一致性事务)

原理

XA 模式基于数据库原生 XA 协议,采用两阶段提交(2PC),确保强一致性。适用于需要严格 ACID 的场景。

  • 第一阶段(Prepare):各 RM(资源管理器)执行 SQL 但不提交,锁定资源。
  • 第二阶段(Commit/Rollback):TC(事务协调器)决定全局提交或回滚。

优点

  • 强一致性,满足 ACID 特性。
  • 无代码侵入,仅需配置 XA 数据源。

缺点

  • 性能低,锁定资源时间长。
  • 依赖数据库支持 XA 协议(如 MySQL、Oracle)。

适用场景

  • 金融级交易,如银行转账。
  • 需要严格数据一致性的业务。

模式对比

模式一致性性能代码侵入性适用场景
AT最终一致短事务(订单、库存)
TCC强一致资金交易(支付)
SAGA最终一致长事务(电商下单)
XA强一致金融交易(银行转账)

如何选择?

  1. 需要无侵入?AT 或 XA
  2. 需要高性能?AT 或 TCC
  3. 长事务?SAGA
  4. 强一致性?XA 或 TCC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

研创通之逍遥峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值