概述
Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。
- AT模式:《Seata事务模式之AT模式》
- TCC模式:《Seata事务模式之TCC模式》
- Saga模式:《Seata事务模式之Saga模式》
- XA模式:《Seata事务模式之XA模式》
目前使用的流行度情况:AT > TCC > Saga。因此,我们在学习Seata的时候,可以花更多精力在AT模式上,最好搞懂背后的实现原理,毕竟分布式事务涉及到数据的正确性,出问题需要快速排查定位并解决。
三种角色
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对应自己的本地事务进行提交还是回滚。
TC Server部署方式
- 单机部署:《单机部署Seata TC Server》
- 集群部署:《集群部署Seata TC Server》
框架支持情况
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-cloud-starter-alibaba-seata 的 rest 模块
同时方便我们集成到Java项目当中,Seata也提供了相应的Starter库:
因为 Seata 是基于 DataSource 数据源进行代理来拓展,所以天然对主流的 ORM 框架提供了非常好的支持:
- MyBatis、MyBatis-Plus
- JPA、Hibernate
案例情况