微服务是大型架构的核心,下面我重点详解Seata分布式事务@mikechen
Seata
Seata 是阿里巴巴开源的分布式事务框架,核心目标是以最小侵入性保障分布式业务的一致性。
它提供事务协调器(TC)、事务管理(Global/Branch)和多种事务模式(AT、TCC、Saga 等)。

既支持数据库层面自动补偿,也支持程序级补偿机制。
Seata 强调性能与可扩展性,适用于电商、金融等对数据一致性要求较高的场景。
分布式事务
分布式事务,指在多个独立的资源管理器(例如不同服务或数据库)之间。
保证原子性、一致性、隔离性和持久性(ACID)的操作集合。
挑战主要来自网络延迟、部分故障、服务自治和多种数据存储。
为应对这些挑战,业界出现了两类常用思路:强一致性(如分布式两阶段提交)与最终一致性(补偿或补偿式编排)。
Seata 集成了若干实际可用模式以平衡一致性、性能与可用性。
Seata架构
Seata 架构,如下图所示:

Transaction Coordinator(TC)
事务协调器,负责事务状态管理、全局事务的创建与最终决议。
Transaction Manager(TM)
发起全局事务的人或模块,负责开启/提交/回滚全局事务。
Resource Manager(RM)
各业务资源侧(通常为微服务或数据库)的分支事务管理器,负责注册分支事务并执行本地操作与回滚/补偿准备。
Seata原理
Seata 工作流程,如下所示:

┌───────────────────────────────┐
│ TC (协调者) │
└──────────────▲────────────────┘
│
┌─────────────────┼───────────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ TM │ │ RM │ │ RM │
│(事务管理)│ │(资源管理)│ │(资源管理)│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
│----开启事务---->│ │
│<---注册分支----│ │
│------提交/回滚命令------------->│
工作流程概述:
-
TM 向 TC 申请开启全局事务;
-
各个 RM 注册分支事务;
-
TM 发起提交或回滚;
-
TC 协调各 RM 执行;
-
确保所有分支事务保持一致。
Seata事务模式
事务模式:AT、TCC、Saga 等。

AT(Automatic Transaction,基于行级锁与 undo/redo 日志)
特点:对应用侵入性最小,基于数据库的 undo/redo 日志自动回滚或补偿,适用于关系型数据库场景。
优点:实现透明,性能较好,易于迁移已有应用。
局限:依赖数据库特性,不适用于非关系型存储或存在长事务场景。
TCC(Try-Confirm-Cancel)
特点:显式的三段式接口:Try(资源预留)、Confirm(确认提交)、Cancel(取消释放)。由业务方实现幂等与补偿逻辑。
优点:对业务行为更可控,适合需要显式预留和释放资源的场景。
局限:开发工作量较大,需要实现三套接口与幂等性保证。
Saga(补偿式长事务编排)
特点:将一个全局事务拆成一系列局部事务,若某步失败则按逆序调用补偿事务以消除已生效的步骤。
优点:适合长事务、跨多个服务与异步场景,可实现最终一致性。
局限:补偿逻辑复杂,事务隔离性较弱,需要业务设计支持可补偿操作。
Seata 在设计上支持多种模式以满足不同业务与技术栈需求。
AT 适用于大多数关系型数据库场景,TCC 与 Saga 更适合复杂业务或非关系型资源。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》