Seata分布式事务
约 672 字大约 2 分钟
2025-06-29
1.事务
简单来说,事务就是指一组操作,要么这些操作都执行成功,要么都执行失败
- 本地事务:单个数据库或系统中进行的事务操作
- 分布式事务在多个不同的数据库或服务之间进行的事务操作
2.分布式事务解决方案
主要有以下 6 种实现方案:
- XA
- 2PC、3PC,都是业务代码无侵入方案
- TCC
- SAGA
- 本地消息表
- 可靠消息最终一致性方案
- 最大努力通知方案
方案 | 描述 | 优点 | 缺点 | 使用场景 |
---|---|---|---|---|
XA | 两阶段提交,通过事务管理器管理多个事务 | 强一致性 | 效率低,不适合高并发场景 | 跨多个数据库的分布式事务 |
TCC | Try-Confirm-Cancel,通过三个阶段管理事务,Try 阶段检测和预留资源,Confirm 阶段执行事务,Cancel 阶段进行回滚补偿 | 强一致性,适合短流程、高并发场景 | 补偿代码复杂 | 资金支付、交易场景 |
SAGA | 补偿事务,通过本地事务和补偿操作保证最终一致性 | 无锁,高性能 | 不保证事务的隔离性 | 长事务 |
3.Seata 分布式事务
Seata 是一款阿里开源的分布式事务解决方案,是一种简单可扩展的事务框架
- 官网地址:Seata官网
- Seata支持的三种事务模式:AT 、TCC 、XA
模式 | 描述 |
---|---|
AT 模式 | Auto Transactional,两阶段提交事务,2PC 协议,对业务代码的无侵入 |
TCC 模式 | Try-Confirm-Cancel |
XA 模式 | 使用 XA 标准协议来协调多个数据源或资源的事务 |
3.1 AT 模式
本质上是两阶段提交事务,第一阶段为准备阶段,会拦截业务 SQL ,进行事务管理;第二阶段为事务提交或者事务回滚阶段
第一阶段:拦截业务 SQL
- 解析 SQL ,找到即将要更新的业务数据,将其保存为 before image
- 执行业务 SQL ,保存更新完的业务数据为 after image
- 保存数据到 undo log
第二阶段(正常提交):
- 将第一阶段保存的快照数据删除
第二阶段(回滚):
- 使用 before image 还原业务数据
4.项目业务
- 实际业务:“添加项目任务”功能涉及到两个数据库的数据操作,分别为项目数据库的任务表和流程数据库的任务审批设置表
