官网:Seata 是什么
概念:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
1. Seata架构
1.1. 四种事务模式
Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务模式:
- XA模式:详情参见《Seata XA 模式》基于XA协议。以 XA 协议的机制来管理分支事务的一种 事务模式。
-
- 特点:强一致性分阶段提交模式,牺牲了一定的可用性,无业务侵入
- AT 模式:参见《Seata AT 模式》文档
-
- 特点:最终一致性的分阶段事务模式,无业务侵入。也是Seata的默认模式
- TCC 是分布式事务中的二阶段提交协议,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel)。
-
- 特点:最终一致性的分阶段事务模式,有业务侵入,需要业务系统自己实现。
- Saga 模式:参见《SEATA Saga 模式》文档
-
- 特点:长事务解决方案,有业务侵入。在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务(执行处理时候出错了,给一个修复的机会)都由业务开发实现。
目前使用的流行度情况是:AT > TCC > Saga。因此,我们在学习 Seata 的时候,可以花更多精力在 AT 模式上,最好搞懂背后的实现原理,毕竟分布式事务涉及到数据的正确性,出问题需要快速排查定位并解决。
1.2. Seata事务管理中的三个重要角色
- TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。
- TM (Transaction Manager) - 事务管理器:定义全局事务的范围,开始全局事务、提交或回滚全局事务。
- RM ( Resource Manager ) - 资源管理器:管理分支事务处理的资源( Resource ),与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中,TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端。
大致流程:
- TM 请求 TC 开启一个全局事务。TC 会生成一个 XID 作为该全局事务的编号。
-
- XID会在微服务调用链中进行传播,用来保证将多个微服务的子事务关联起来
- RM 请求 TC 将本地事务注册为全局事务的分支事务,通过全局事务的 XID 进行关联。
-
- 微服务调用的时候作为一个分支事务,RM会代理事务,然后会向TC注册自己(通过调用传播过来的XID进行注册)
- RM去执行资源(SQL),然后去向TC报告结果
- TM 请求 TC 告诉 XID 对应的全局事务是进行提交还是回滚。
-
- 当TM所在管理的所有分支事务都执行完成后,有报错或者问题就通知TC进行对注册和报告的RM回滚,没有就通知TC,提交全局事务
- TC 驱动 RM 们将 XID 对应的自己的本地事务进行提交还是回滚。
-
- TC接到TM的通知后,对注册报告的事务进行提交或者回滚