简介
Apache Seata™ (incubating) 是什么?
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技术支撑。经过多年沉淀与积累,其商业化产品先后在阿里云、金融云上售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助用户快速落地分布式事务解决方案。
Seata 原理深度解析:分布式事务的一致性实现
一、核心架构设计
Seata 采用 三组件模型,通过解耦事务协调与资源管理,实现分布式事务的高效处理:
1.1 核心组件
组件 | 角色 | 关键功能 |
---|---|---|
TC (协调器) | 独立部署的服务器,作为全局事务的控制中心 | - 维护全局事务状态(开始/提交/回滚) - 协调分支事务的提交/回滚 - 存储事务元数据(XID、分支ID等) |
TM (管理器) | 嵌入微服务中的客户端组件,定义全局事务边界 | - 发起全局事务(生成XID) - 通知TC提交或回滚事务 - 管理事务上下文(XID传播) |
RM (资源管理器) | 嵌入微服务中的客户端组件,管理分支事务与本地资源交互 | - 注册分支事务到TC - 执行本地SQL并生成回滚日志(UNDO_LOG) - 响应TC的提交/回滚命令 |
1.2 协作流程
- 全局事务启动:TM 向 TC 发起
begin
请求,TC 生成全局唯一 XID。 - 分支事务注册:RM 向 TC 注册分支事务,绑定 XID。
- 执行本地事务:RM 执行 SQL,生成 前镜像(Before Image) 和 后镜像(After Image),记录到 UNDO_LOG 表。
- 提交/回滚决策:
- 成功:TM 通知 TC 提交,TC 依次通知 RM 提交分支事务(删除 UNDO_LOG)。
- 失败:TM 通知 TC 回滚,TC 通知 RM 通过前镜像恢复数据。
二、事务模式详解
Seata 支持四种事务模式,覆盖不同场景的需求:
2.1 AT 模式(默认模式)
- 原理:基于 SQL 解析的自动补偿,无需手动编码。
- 一阶段:解析 SQL,生成前后镜像并插入 UNDO_LOG,提交本地事务。
- 二阶段:
- 提交:异步删除 UNDO_LOG,释放资源。
- 回滚:通过前镜像恢复数据,校验后镜像防止脏写。
- 适用场景:常规业务(如电商订单、库存管理),零代码入侵。
2.2 TCC 模式(Try-Confirm-Cancel)
- 原理:手动实现三阶段接口,精细控制事务。
- Try:预留资源(如冻结账户余额)。
- Confirm:确认预留资源(如扣除冻结金额)。
- Cancel:释放预留资源(如解冻余额)。
- 适用场景:金融支付、高并发资金操作,需精确控制事务流程。
2.3 SAGA 模式(长事务补偿)
- 原理:通过状态机编排子事务,支持反向补偿。
- 正向流程:按顺序执行子事务并提交。
- 补偿流程:任一子事务失败时,反向执行补偿操作(如撤销订单、退款)。
- 适用场景:跨系统业务流程(如订单→物流→支付)、长周期事务(如保险理赔)。
2.4 XA 模式(依赖数据库协议)
- 原理:基于数据库原生 XA 协议,实现强一致性。
- 两阶段提交:准备阶段锁定资源,提交阶段持久化变更。
- 适用场景:传统系统迁移、强一致性要求的核心系统(如银行核心交易)。
三、数据一致性保障机制
3.1 两阶段提交(2PC)优化
- 准备阶段:
- RM 执行 SQL 并生成 UNDO_LOG,锁定资源(行级锁)。
- 向 TC 注册分支事务,等待全局决策。
- 提交阶段:
- 异步提交:分支事务提交后,异步删除 UNDO_LOG,减少阻塞。
- 批量操作:合并分支事务操作,降低 TC 负载。
3.2 全局锁与隔离级别
- 全局锁:防止脏写,确保分支事务提交前获取锁。
- 隔离级别:
- 默认:全局读未提交(Read Uncommitted),但通过全局锁避免脏读。
- 实际效果:接近读已提交(Read Committed),平衡性能与一致性。
3.3 异常处理
- 自动回滚:任一分支失败时,TC 触发全局回滚,RM 通过 UNDO_LOG 恢复数据。
- 悬挂处理:TCC 模式中,若 Try 未执行但 Cancel 先到,则拒绝执行,避免资源错误释放。
- 幂等控制:通过 XID 和 Branch ID 确保操作重复执行时的状态一致性。
四、性能优化策略
4.1 存储模式
模式 | 性能 | 可靠性 | 适用场景 |
---|---|---|---|
文件 | 高 | 低 | 单机调试、非生产环境 |
DB | 中 | 高 | TC 集群模式、生产环境 |
Redis | 高 | 中 | 高并发、低延迟场景 |