微服务是大型架构的核心,下面我重点详解Seata@mikechen
Seata
Seata,全程是“Simple Extensible Automatic Transaction Architecture“,是蚂蚁金服/阿里巴巴开源的一套高性能、易使用的分布式事务解决方案。
它的核心目标是提供一个一站式的分布式事务解决方案,让用户像使用本地事务一样使用分布式事务。

Seata架构
Seata 整体由三大核心组件构成:

1.TC(Transaction Coordinator)事务协调者
全局事务的控制中心。
负责:
维护全局事务状态;
协调各个分支事务的提交与回滚;
管理事务会话信息;
通常部署为独立的 Seata Server。
2. TM(Transaction Manager)事务管理者
位于业务发起方(例如订单服务)。
负责:
开启全局事务;
提交或回滚全局事务;
通过 @GlobalTransactional 注解自动与 TC 通信。
3. RM(Resource Manager)资源管理者
负责:
管理分支事务的资源(数据库连接);
执行分支事务的提交或回滚;
向 TC 注册分支事务;
一般由 Seata 的数据源代理(如 DataSourceProxy)实现。
Seata原理
以“用户下单 → 扣减库存 → 扣减余额”为例。
Seata 的完整执行流程如下:

1️⃣ TM 开启全局事务
订单服务中的方法加上 @GlobalTransactional
TM 请求 TC 创建全局事务,生成唯一 XID(全局事务ID)
@GlobalTransactional
public void createOrder() {
orderService.create();
stockService.deduct();
accountService.deduct();
}
2️⃣ RM 注册分支事务
每个参与的服务(库存、账户)在执行数据库操作时,通过 DataSourceProxy 自动向 TC 注册分支事务;
并记录 Undo Log。
3️⃣ 本地事务执行
各服务执行自己的业务SQL,执行成功但未提交(处于本地事务状态);
4️⃣ TM 请求提交/回滚
如果整个业务方法执行成功,TM 向 TC 发送 commit 请求;
如果任意异常发生,则发送 rollback 请求。
5️⃣ TC 协调所有RM
TC 根据全局事务状态,通知所有RM:
6️⃣ 全局事务结束
TC 更新全局事务状态为 已完成(Committed/RolledBack)。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》