1. 核心目标
Seata 的核心目标是为分布式系统提供高性能、易使用的事务解决方案,确保跨服务 / 跨数据库操作的原子性和一致性。其设计理念强调轻量化、无侵入性和高扩展性,通过分层架构支持不同场景的事务需求。
2. 核心组件
Seata 由三个核心组件构成:
- TC(Transaction Coordinator):事务协调器,管理全局事务的生命周期,负责事务的提交、回滚和状态记录。
- TM(Transaction Manager):事务管理器,定义全局事务的边界(开始、提交、回滚)。
- RM(Resource Manager):资源管理器,管理分支事务,与数据库交互,执行分支事务的提交或回滚。
3. 事务模式
Seata 支持四种事务模式,覆盖不同业务场景的需求:
(1)AT 模式(自动补偿)
- 特点:无侵入性,自动生成回滚日志,适用于大多数 CRUD 场景。
- 原理:
- 全局事务开始时,Seata 拦截 SQL 操作,记录数据快照(前镜像和后镜像)。
- 若全局事务需要回滚,RM 根据快照逆向执行 SQL。
- 适用场景:电商下单、库存扣减等简单业务。
(2)TCC 模式(Try-Confirm-Cancel)
- 特点:手动控制补偿逻辑,适用于复杂业务逻辑。
- 原理:
- Try:预留资源(如冻结资金)。
- Confirm:确认提交,执行实际操作。
- Cancel:释放预留资源。
- 适用场景:金融交易、账户余额变更等高一致性要求场景。
(3)Saga 模式
- 特点:长事务处理,通过事件驱动的补偿机制实现最终一致性。
- 原理:将长事务拆分为多个本地事务,通过状态机驱动执行,若某一步失败则逆向执行补偿操作。
- 适用场景:订单支付、物流配送等跨多个服务的异步流程。
(4)XA 模式
- 特点:基于数据库 XA 协议,强一致性但性能较低。
- 适用场景:对数据一致性要求极高且性能压力较小的场景。
4. 工作流程
以 AT 模式为例,全局事务流程如下:
- TM 发起全局事务:定义事务边界。
- RM 执行分支事务:
- 执行业务 SQL 前,记录数据前镜像。
- 执行业务 SQL,记录数据后镜像。
- 向 TC 报告分支事务状态。
- TC 协调全局事务:
- 所有分支事务成功 → 提交全局事务。
- 任一分支事务失败 → 回滚所有分支事务(基于快照逆向执行)。
5. 优势与特点
- 高性能:AT 模式通过无侵入方式减少业务代码改造,性能损耗低。
- 易集成:支持 Spring Cloud、Dubbo 等主流框架,提供客户端 SDK。
- 多语言支持:除 Java 外,还支持 Go、Python 等语言。
- 灵活扩展:通过 SPI 机制可自定义事务模式和存储方案。
6. 适用场景
- 微服务架构:跨多个服务的事务操作(如电商下单、支付、库存更新)。
- 分布式数据库:分库分表场景下的事务一致性。
- 混合云环境:跨不同数据源的事务管理。
7. 局限性
- CAP 权衡:AT 模式默认保证最终一致性,若需强一致性需结合 XA 模式。
- 性能瓶颈:高并发场景下,TC 可能成为单点瓶颈(需集群部署)。
- 异常处理:需合理设计补偿逻辑(如幂等性、重试机制)。
总结
Seata 通过分层架构和多种事务模式,为分布式系统提供了灵活且高效的事务解决方案。其 AT 模式的无侵入性和自动化补偿能力,使其成为微服务场景下的首选方案。然而,在复杂业务或对强一致性要求极高的场景中,需结合 TCC 或 XA 模式使用。随着开源生态的不断完善,Seata 已成为分布式事务领域的重要标准之一。