Seata支持几种分布式事务
  Seata 作为主流的分布式事务解决方案,支持以下四种事务模式,覆盖不同业务场景的需求:
# 🔧 1. AT 模式(Auto Transaction)
原理:基于二阶段提交(2PC)优化,通过 SQL 解析 + 回滚日志 实现自动补偿,业务侵入性低。
 工作流程:
- 一阶段:
- 解析业务 SQL,生成前置快照(Before Image)和业务操作后的快照(After Image)。
 - 将快照存入 
undo_log表,与业务 SQL 在同一本地事务中提交。 
 - 二阶段:
- 提交:异步删除 
undo_log日志。 - 回滚:根据 
undo_log生成反向 SQL 补偿数据。
适用场景: 
 - 提交:异步删除 
 
- 常规业务(如订单创建、库存扣减),需快速接入分布式事务。
优点: - 业务无侵入,仅需配置代理数据源。
缺点: - 依赖数据库行锁,高并发下可能阻塞(如热点数据更新)。
 
# ⚙️ 2. TCC 模式(Try-Confirm-Cancel)
原理:通过 业务编码 实现两阶段,需手动编写三个阶段方法:
- Try:资源预留(如冻结库存、预扣余额)。
 - Confirm:执行实际业务(如扣减冻结资源)。
 - Cancel:释放预留资源(如解冻库存)。
关键要求: - Confirm/Cancel 需保证 幂等性(网络重试可能导致重复调用)。
 - 需处理 三大异常:
- 空回滚:未执行 Try 时触发 Cancel(需检查事务记录)。
 - 幂等:重复调用 Confirm/Cancel 需返回相同结果。
 - 悬挂:Cancel 在 Try 前执行(需事务状态记录)。
适用场景: 
 - 高性能需求(如支付、秒杀),或需强隔离性的金融业务。
优点: - 无全局锁,性能优于 AT 模式。
缺点: - 代码侵入性强,需为每个业务编写三阶段逻辑。
 
# 🔄 3. SAGA 模式
原理:长事务拆分为多个本地事务,通过 补偿操作 实现最终一致性。
 实现方式:
- 编排式(Orchestration):
- 中央协调器(如 Seata 状态机)控制流程,依次调用服务。
 
 - 协同式(Choreography):
- 服务间通过 事件驱动(如消息队列)触发后续操作。
工作流程: 
 - 服务间通过 事件驱动(如消息队列)触发后续操作。
 - 若某步骤失败,按 逆序触发补偿操作(如订单取消 → 库存恢复)。
适用场景: - 跨服务长流程(如电商下单、保险理赔),支持异步执行。
优点: - 支持复杂业务流程,无阻塞问题。
缺点: - 补偿逻辑复杂,需保证 最终一致性。
 
# 🗂️ 4. XA 模式
原理:基于数据库的 标准两阶段提交(2PC),由事务管理器(TM)协调资源管理器(RM)。
- 一阶段(Prepare):各参与者预提交并锁定资源。
 - 二阶段(Commit/Rollback):协调者根据一阶段结果通知提交或回滚。
适用场景: - 强依赖数据库事务协议的传统系统(如银行转账)。
优点: - 强一致性保证,兼容支持 XA 协议的数据库(如 MySQL、Oracle)。
缺点: - 性能低(同步阻塞),协调者单点故障风险。
 
# 💎 模式对比与选型建议
| 模式 | 一致性 | 侵入性 | 性能 | 适用场景 | 
|---|---|---|---|---|
| AT | 最终一致 | 无 | 中(有锁阻塞) | 常规业务(订单、库存) | 
| TCC | 最终一致 | 高 | 高 | 高并发、金融交易 | 
| SAGA | 最终一致 | 中 | 高(异步) | 长流程、跨服务业务 | 
| XA | 强一致 | 低 | 低 | 传统数据库强一致需求 | 
选型原则:
- 追求低侵入 → AT 模式
 - 追求高性能 → TCC 模式
 - 流程复杂且长 → SAGA 模式
 - 强一致性需求 → XA 模式
 
# ⚠️ 生产注意事项
- 幂等设计:TCC/SAGA 的 Confirm/Cancel 需支持重复调用。
 - 隔离性补偿:AT 模式可能脏读,可通过 
SELECT FOR UPDATE强制读已提交。 - 监控与日志:使用 Seata Dashboard 跟踪全局事务状态。
 
参考官方文档:Seata 事务模式详解 (opens new window)。
编辑  (opens new window)
  上次更新: 2025/06/24, 00:41:57