1. 概述
Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
1.1 四种事务模式
Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务模式:
-
AT 模式:参见《Seata AT 模式》文档
-
TCC 模式:参见《Seata TCC 模式》文档
-
Saga 模式:参见《SEATA Saga 模式》文档
-
XA 模式:正在开发中...
目前使用的流行度情况是:AT > TCC > Saga。因此,我们在学习 Seata 的时候,可以花更多精力在 AT 模式上,最好搞懂背后的实现原理,毕竟分布式事务涉及到数据的正确性,出问题需要快速排查定位并解决。
“友情提示:具体的流行度,胖友可以选择看看 Wanted: who's using Seata 每个公司登记的使用方式。
1.2 三种角色
在 Seata 的架构中,一共有三个角色:
-
TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。
-
TM (Transaction Manager) - 事务管理器:定义全局事务的范围,开始全局事务、提交或回滚全局事务。
-
RM ( Resource Manager ) - 资源管理器:管理分支事务处理的资源( Resource ),与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中,TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端。
在 Seata 中,一个分布式事务的生命周期如下:
“友情提示:看下艿艿添加的红色小勾。
-
TM 请求 TC 开启一个全局事务。TC 会生成一个 XID 作为该全局事务的编号。
“
XID,会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起。
-
RM 请求 TC 将本地事务注册为全局事务的分支事务,通过全局事务的 XID 进行关联。
-
TM 请求 TC 告诉 XID 对应的全局事务是进行提交还是回滚。
-
TC 驱动 RM 们将 XID 对应的自己的本地事务进行提交还是回滚。
1.3 框架支持情况
Seata 目前提供了对主流的微服务框架的支持:
-
Dubbo
“
通过
seata-dubbo
集成 -
SOFA-RPC
“
通过
seata-sofa-rpc
集成 -
Motan
“
通过
seata-motan
集成 -
gRPC
“
通过
seata-grpc
集成 -
Apache HttpClient
“
通过
seata-http
集成 -
Spring Cloud OpenFeign
“
通过
spring-cloud-starter-alibaba-seata
的feign
模块 -
Spring RestTemplate
“
通过
spring-c