概述
Seata是阿里巴巴开源的分布式事务解决方案,前身为Fescar,旨在让分布式事务像本地事务一样简单可控。2019年更名为Seata(Simple Extensible Autonomous Transaction Architecture)。
核心特性
- 高性能:通过优化的事务处理流程减少性能损耗
- 低侵入性:对业务代码改动小,易于集成
- 高可用性:支持集群部署,保证服务稳定性
- 多语言支持:除了Java,还支持Go、Python等语言的SDK
事务模式
Seata目前支持四种事务模式:
- AT模式:默认使用的事务模式,本质上是2PC协议的优化实现
- TCC模式:通过业务层面实现的事务控制,需要手动编写Try、Confirm和Cancel
- Saga模式:长事务解决方案,通过事件驱动的方式处理分布式事务
- XA模式:基于XA协议的传统分布式事务实现
架构组成
Seata AT事务模型包含三个核心组件:
TM(Transaction Manager,事务管理器)
- 负责全局事务的开启、提交或回滚
- 以jar包形式嵌入业务应用
RM(Resource Manager,资源管理器)
- 负责分支事务的注册和状态上报
- 管理本地事务资源(如数据库连接)
TC(Transaction Coordinator,事务协调器)
- 独立部署的服务端组件
- 维护全局事务和分支事务的状态
- 通常需要集群部署以保证高可用性
TM与RM的角色定义
全局事务发起方作为TM:
- 负责全局事务生命周期的管理
- 根据业务逻辑决定全局事务的最终状态
事务参与者作为RM:
- 每个RM对应一个具体的分支事务
- 需要实现prepare/commit/rollback三个基本接口
AT模式两阶段提交
第一阶段:分支事务提交
- TM启动全局事务,向TC注册全局事务
- RM执行分支事务,记录undo log
- 向TC注册分支事务
- 提交本地事务
第二阶段:全局事务决议
- TC汇总事务状态
- 如果所有分支事务都成功:TC异步通知各RM删除undo log
- 如果有任一分支事务失败:TC根据undo log执行补偿操作