分布式事务 GTS 的价值和原理浅析
来自:阿里巴巴中间件
GTS 今年双 11 的成绩
今年 2684 亿的背后,有一个默默支撑,低调到几乎被遗忘的中间件云产品——GTS(全局事务服务,Global Transaction Service),稳稳地通过了自 2014 年诞生以来的第 5 次“大考”。
2019 年 11 月 1 日至 12 日,GTS 日均处理分布式事务数量达 亿级 ,每天峰值 TPS 达 万级 。
GTS 带来的价值
随着企业的发展,企业业务架构面临数据、服务的分布化,几乎无可避免地要遇到分布式架构带来的数据一致性问题。
-
架构复杂度降低:分布式事务这个 切面 的技术问题,全部 收敛 到 GTS 提供的服务来解决。
-
设计和开发成本减轻:业务逻辑的设计和开发,完全不需要针对是否涉及分布式事务而做任何额外的事情,对业务 0 侵入 。
-
项目交付、迭代速度加快:归因于上述两点,项目得以很快交付和迭代。GTS 赋予业务应用 快速试错 的能力,在这个商业机会瞬息万变的时代,显得尤为重要。
-
1.0:单体应用,快速上线,这个时候完全不涉及分布式事务。
-
2.0:单个数据库无法支撑,数据分布到多个数据库,产生分布式事务问题。
-
3.0:微服务化,进一步产生跨服务的分布式事务。
-
4.0:跨应用的整合,成为 SaaS 或 FaaS 的平台,在更大的范围,产生分布式事务问题。
GTS 的原理和创新
下面,从几个方面来大体介绍 GTS 的原理和创新。
-
Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
-
Transaction Manager (TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
-
Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
-
TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
-
XID 在微服务调用链路的上下文中传播。
-
RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
-
TM 向 TC 发起针对 XID 的全局提交或回滚决议。
-
TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
-
如果 TM 发出的决议是全局提交,此时分支事务此时已经完成提交,不需要同步协调处理(只需要异步清理回滚日志),完成阶段 可以非常快速地完成。
-
如果 TM 发出的决议是全局回滚,RM 收到协调器发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚。
另一方面,应用任意节点的宕机,相应事务分支的请求也会路由到连接相同数据库的其他节点上,不影响全局事务的完整执行。
GTS 的事务模式
截止目前,还没有任何一种分布式事务的技术方案,可以满足所有场景的问题。GTS 的 AT 模式适用于绝大部分常见场景,但仍有一些场景更适合于使用业界其他的分布式事务解决方案。
劣势:隔离性不高,目前只能支持到接近 读已提交 的程度,更高的隔离级别,实现成本将非常高。
劣势:业务侵入性非常高。
劣势:有一定业务侵入性;隔离性差。
劣势:较重的依赖;阻塞协议。
GTS 会把各类解决方案融合到 GTS 提供的云服务框架中,为云原生应用提供一站式的分布式事务服务。
GTS 与开源
为了更好地构建一个云原生的分布式事务标准,2019 年初,GTS 选择了开源,发起了开源项目 Seata(曾用名 Fescar)。项目开源不到 1 年时间,收获 STAR 数已经突破 1.2 万,Contributor 超过 120 名,获得社区的广泛关注和认可。
Seata:https://github.com/seata/seata
总结
GTS 自从 2014 年诞生于阿里巴巴中间件的 5 年来,从支撑集团内第一个业务方开始,经历了从内部到云产品化,从封闭到开源,从单一模式到兼容并蓄和标准化,一直坚定地走在分布式事务领域的最前沿。
煊檍,GitHub ID:sharajava,阿里巴巴中件间 GTS 研发团队负责人,SEATA 开源项目发起人,曾在 Oracle 北京研发中心多年,从事 WebLogic 核心研发工作。长期专注于中间件,尤其是分布式事务领域的技术实践。
长按订阅更多精彩▼
如有收获,点个在看,诚挚感谢