Seata最全详解(图文全面总结)

微服务是大型架构的核心,下面我重点详解Seata@mikechen

Seata

Seata,全程是“Simple Extensible Automatic Transaction Architecture“,是蚂蚁金服/阿里巴巴开源的一套高性能、易使用的分布式事务解决方案。

它的核心目标是提供一个一站式的分布式事务解决方案,让用户像使用本地事务一样使用分布式事务。

Seata最全详解(图文全面总结)

 

 

Seata架构

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

Seata最全详解(图文全面总结)

1.TC(Transaction Coordinator)事务协调者

全局事务的控制中心。

负责:

维护全局事务状态;

协调各个分支事务的提交与回滚;

管理事务会话信息;

通常部署为独立的 Seata Server。

2. TM(Transaction Manager)事务管理者

位于业务发起方(例如订单服务)。

负责:

开启全局事务;

提交或回滚全局事务;

通过 @GlobalTransactional 注解自动与 TC 通信。

3. RM(Resource Manager)资源管理者

负责:

管理分支事务的资源(数据库连接);

执行分支事务的提交或回滚;

向 TC 注册分支事务;

一般由 Seata 的数据源代理(如 DataSourceProxy)实现。

 

Seata原理

以“用户下单 → 扣减库存 → 扣减余额”为例。

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面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧