Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。在 GitHub 上拥有超过 1.4 万 Star,毫无疑问是开源社区分布式事务领域最火爆的项目。
GTS(Global Transaction Service 全局事务服务)是阿里云上的分布事务中间件产品,用于实现分布式环境下特别是微服务架构下的高性能事务一致性。
简单来讲,Seata 项目 2019 年之初的创建是 GTS 的开源版本,经过一年的演进,GTS 商业版本开始全面提供对 Seata 的支持。
接下来,我们全面解读 GTS 是如何实现对 Seata 的支持的。
Seata 定义的分布式事务框架
首先,看一下 Seata 定义的分布式事务框架。
核心组件定义
Seata 明确定义分布式事务的 3 个核心组件:
1、Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
2、Transaction Manager (TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
3、Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
一个典型的事务过程:
1、TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
2、XID 在微服务调用链路的上下文中传播。
3、RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
4、TM 向 TC 发起针对 XID 的全局提交或回滚决议。
5、TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
事务模型和模式
基于架构上定义的 3 个角色,Seata 把分布式事务抽象成这样一个模型。
TM 定义全局事务的边界。
RM 负责定义分支事务的边界和行为。
TC 跟 TM 和 RM 交互(开启、提交、回滚全局事务;分支注册、状态上报和分支的提交、回滚),做全局的协调。
所谓 Seata 的 事务模式,准确地讲,应该是这个框架下,RM 驱动的 分支事务的不同行为模式,应该是 事务(分支)模式。
Seata 定义的事务模式
AT 模式
AT 模式 RM 驱动分支事务的行为:
执行阶段:
完成阶段:
TCC 模式
TCC 模式 RM 驱动分支事务的行为:
执行阶段:
完成阶段:
Saga 模式
Saga 模式 RM 驱动分支事务的行为:
执行阶段:
完成阶段:
XA 模式 RM 驱动分支事务的行为:
执行阶段:
完成阶段:
Seata 架构中的 TM 和 RM 和应用部署在一起,应用根据业务需求,选择合适的分布式事务模式来解决数据一致性问题。
从上述 4 类已经或即将被 Seata 框架支持的分布式事务模式的工作机制可以看到:
无论使用哪处模式,都离不开一个稳定高效的 TC 提供服务。这些服务包括(但不限于):
分布式事务的协调机制被 Seata 框架定义为一项标准化的服务。这项服务可以像 ZooKeeper 独立部署运维,给应用的分布式系统提供事务服务。
GTS 带给 Seata 用户的价值
GTS 的架构
Seata 定义的事务协议,如下图所示:
Seata 的分布式事务框架源自 GTS,二者的底层架构和事务协议是完全一致的。
GTS 的事务协议,如下图所示:
依托于阿里云的基础设施,GTS Server 以多副本、高可用集群形态部署,提供高质量的事务协调服务。
架构和协议层面的一致,使得 GTS 可以很自然地提供对 Seata 应用的事务协调支持。
只要实现具体网络通信机制上的兼容适配,就可以完整支撑 Seata 应用运行在 GTS 服务之上。
Seata 应用迁移到云上使用 GTS 服务不需要做任何编程改造,仅仅是把自运维的 Seata 的 TC Server 替换为 GTS 提供的高性能、高可靠、高可用的云服务。
GTS 作为云原生分布式事务服务的价值
随着企业的发展,企业业务架构面临数据、服务的分布化,几乎无可避免地要遇到分布式架构带来的数据一致性问题。
GTS 开创性地把分布式事务问题从业务中剥离出来,作为一个独立的技术切面来单独管理,以服务的形式给构建在云上的应用提供简单、易用、高效的分布式事务解决方案。
GTS 给业务应用带来的价值体现在以下几个方面:
设想一个典型的云原生企业应用的成长路径:
基于 GTS 提供的分布式事务服务,企业发展各阶段产生的不同场景下的数据一致性问题,可以得到一站式的解决。这使得业务可以平滑自然地,像搭积木一样成长起来。
从上面示例可以看到:GTS 实际上是把分布式事务(或者说分布式场景下的数据一致性)能力,作为一种 云原生 的服务,提供给生长在云上的应用,让分布式事务不再成为业务要面临的一个令人头疼的问题,而成为一种可以弹性伸缩,按需取用的服务能力。
GTS 支持 Seata 带来的价值
GTS 提供对开源解决方案 Seata 的兼容支持后,给 GTS 商业用户和 Seata 开源用户之间建立了一座桥梁,给两类用户创造更多价值。
对于既有的和潜在的 GTS 用户:
对于既有的和潜在的 Seata 用户:
1、基于 Seata 构建的业务系统,可以灵活进行云上或云下部署,代码 0 修改。
2、迁移上云,基于 GTS 提供的服务,可以完全省去运维 Seata TC Server 的成本:
3、另外,GTS 给 Seata 应用提供更多增值服务能力:
开源项目 Seata 和商业产品 GTS 正在并行向前演进:
1、Seata 正在打造新的分布式事务模式:XA 模式,将在不久的 1.x 版本发布(预计 1.2 或 1.3)。
2、GTS 基于开源的 Seata 内核,融合既有的和新的商业特性,打造全新的 3.0 版本。3.0 版本发布后,将支持 Seata 全部事务模式:AT、TCC、Saga 和 XA,实现开源版本和商业版本的融合。
3、版本融合后,GTS 每个版本都的发布都将实现对最新稳定开源版本的兼容支持。
GTS 的 SDK 2.9.0 版本支持基于 Seata 的应用使用 AT 模式,运行在 GTS 服务上。参考样例:
https://help.aliyun.com/document_detail/151599.html?spm=a2c4g.11174283.6.563.a9fe735d0uOm72
另外,基于 GTS 构建微服务分布式事务解决方案的更多实践,请参考阿里云最佳实践的推荐,详情参考:
https://www.aliyun.com/acts/best-practice/preview?id=387142
官网地址参考:
https://www.aliyun.com/aliware/txc