分布式事务 GTS 的价值和原理浅析

GTS 今年双 11 的成绩

今年 2684 亿的背后,有一个默默支撑,低调到几乎被遗忘的中间件云产品——GTS(全局事务服务,Global Transaction Service),稳稳地通过了自 2014 年诞生以来的第 5 次“大考”。

2019 年 11 月 1 日至 12 日,GTS 日均处理分布式事务数量达 亿级 ,每天峰值 TPS 达 万级 。

这背后最重要意义在于:成绩是在给业务应用的设计和开发带来 0 负担 的前提下得到的。

GTS 带来的价值

随着企业的发展,企业业务架构面临数据、服务的分布化,几乎无可避免地要遇到分布式架构带来的数据一致性问题。

GTS 开创性地把分布式事务问题从业务中剥离出来,作为一个独立的技术切面来单独管理,以服务的形式给构建在云上的应用提供简单、易用、高效的分布式事务解决方案。

GTS 给业务应用带来的价值体现在以下几个方面:

  • 架构复杂度降低:分布式事务这个 切面 的技术问题,全部 收敛 到 GTS 提供的服务来解决。
  • 设计和开发成本减轻:业务逻辑的设计和开发,完全不需要针对是否涉及分布式事务而做任何额外的事情,对业务 0 侵入 。
  • 项目交付、迭代速度加快:归因于上述两点,项目得以很快交付和迭代。GTS 赋予业务应用 快速试错 的能力,在这个商业机会瞬息万变的时代,显得尤为重要。

设想一个典型的云原生企业应用的成长路径:

  • 1.0:单体应用,快速上线,这个时候完全不涉及分布式事务。
  • 2.0:单个数据库无法支撑,数据分布到多个数据库,产生分布式事务问题。
  • 3.0:微服务化,进一步产生跨服务的分布式事务。
  • 4.0:跨应用的整合,成为 SaaS 或 FaaS 的平台,在更大的范围,产生分布式事务问题。

基于 GTS 提供的分布式事务服务,企业发展各阶段产生的不同场景下的数据一致性问题,可以得到一站式的解决。这使得业务可以平滑自然地,像搭积木一样成长起来。

从上面示例可以看到:GTS 实际上是把分布式事务(或者说分布式场景下的数据一致性)能力,作为一种 云原生 的服务,提供给生长在云上的应用,让分布式事务不再成为业务要面临的一个令人头疼的问题,而成为一种可以弹性伸缩,按需取用的服务能力。

GTS 的原理和创新

下面,从几个方面来大体介绍 GTS 的原理和创新。

首先,GTS 把分布式事务定义为由若干本地事务(分支)组成的全局事务。被全局事务管理的全部分支,将在协调器的协调下,保证一起成功或一起回滚。

其次,GTS 定义了一个事务模型,把整个全局事务过程模型化为 TM、RM、TC 三个组件之间协作的机制。

  • Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
  • Transaction Manager (TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
  • Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

一个典型的分布式事务过程:

  1. TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
  2. XID 在微服务调用链路的上下文中传播。
  3. RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
  4. TM 向 TC 发起针对 XID 的全局提交或回滚决议。
  5. TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

第三,GTS 创新地基于 SQL 解析实现对业务无侵入的自动补偿回滚机制。这种机制,GTS 将其命名为 Auto Transaction (AT) 模式。基本工作原理如下:

GTS 把全局事务分为两个阶段:执行阶段 和 完成阶段 。

执行阶段:

GTS 的 JDBC 数据源代理通过对业务 SQL 的解析,把业务数据在更新前后的数据镜像组织成回滚日志,利用 本地事务 的 ACID 特性,将业务数据的更新和回滚日志的写入在同一个 本地事务 中提交。

这样,可以保证:任何提交的业务数据的更新一定有相应的回滚日志存在。

基于这样的机制,分支的本地事务便可以在全局事务的 执行阶段 提交,马上释放本地事务锁定的资源。

完成阶段:

  • 如果 TM 发出的决议是全局提交,此时分支事务此时已经完成提交,不需要同步协调处理(只需要异步清理回滚日志),完成阶段 可以非常快速地完成。

  • 如果 TM 发出的决议是全局回滚,RM 收到协调器发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚。

最后,GTS 通过事务协调器集群以及对业务应用节点的容错,实现一个拒绝单点故障的高可用服务。

一方面,GTS 服务集群机制,保障任意服务节点宕机,可以其他节点无缝接管。
另一方面,应用任意节点的宕机,相应事务分支的请求也会路由到连接相同数据库的其他节点上,不影响全局事务的完整执行。

分布式事务模式融合及标准化(保护)

截止目前,还没有任何一种分布式事务的技术方案,可以满足所有场景的问题。GTS 的 AT 模式适用于绝大部分常见场景,但仍有一些场景更适合于使用业界其他的分布式事务解决方案。GTS 会把各类解决方案融合到 GTS 提供的云服务框架中,为云原生应用提供一站式的分布式事务服务。

这是 GTS 的抽象出的事务框架。通过这个抽象,分布式事务得以从整体架构中剥离出来,形成一个单独的技术切面,作为服务提供给应用。

简单来说,基于这个框架的应用,其分布式事务问题,就收敛到基于 RM 的分支事务机制和 TC 提供的稳定、可靠的服务中。分而治之,才能更有效地解决问题。

当前分布式应用层面,最具代表性的事务模式有 4 种,分别是 AT、TCC、Saga 和 XA,这些模式各有优缺点和适用的场景。

下面列出 4 种事务模式的优劣,以及在 GTS 的事务框架中的映射。

AT

优势: 业务无侵入;轻量,不依赖数据库的高级特性;回滚较少的场景性能高。

劣势: 隔离性不高,目前只能支持到接近 读已提交 的程度,更高的隔离级别,实现成本将非常高。

TCC

优势: 适用场景广泛;隔离性和性能都可以做极致优化。

劣势: 业务侵入性非常高。

Saga

优势: 长事务。

劣势: 有一定业务侵入性;隔离性差。

XA

优势: 业务无侵入;隔离性好。

劣势: 阻塞协议。

GTS 与开源

为了更好地构建一个云原生的分布式事务标准,2019 年初,GTS 选择了开源,发起了开源项目 SEATA(曾用名 FESCAR)。项目开源不到 1 年时间,收获 STAR 数已经突破 1.2 万,Contributor 超过 120 名,获得社区的广泛关注和认可。

分布式事务一直以来都可以称得上是世界性难题,希望可以通过 SEATA 这个开放的平台,聚集全世界的智慧来给这道难题交上一份让人满意的答卷。

进一步,GTS 将这份答卷转化为阿里云上高效、稳定、可靠的服务,赋能给广大云原生开发者。

总结

GTS 自从 2014 年诞生于阿里巴巴中间件的 5 年来,从支撑集团内第一个业务方开始,经历了从内部到云产品化,从封闭到开源,从单一模式到兼容并蓄和标准化,一直坚定地走在分布式事务领域的最前沿。

GTS 的目标是云原生时代,分布式事务的全面解决方案,任何分布式事务需求,在 GTS 上都能找到满意的答案。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka java.net.UnknownHostException: node4 Error connecting to node node4:9092

解决:修改kafka的server.properties文件 vim /kafka安装路径/config/server.properties 去除下面这行配置的注释,并设置对应的ip地址 #advertised.listenersPLAINTEXT://your.host.name:9092 advertised.listenersPLAINTEXT://192.168.92.104:9092 重启…

看全新升级的KubeSphere 3.0 如何助力企业在容器混合云时代乘风破浪?

数据时代,层出不穷的创新型业务对企业IT提出了更高的要求,业务、技术和管理方面的挑战也逐渐显现。对此,越来越多的企业希望能够快速、简单地创建企业应用,敏捷地满足业务创新的需求,同时还能维持极高的企业级服务水平…

5G的7大用途,你知道几个?

阿里妹导读:5G时代悄悄来临,甚至成为街头巷尾都在讨论的话题。相信你一定有过一些疑问:什么是5G?仅仅只是网速更快吗?5G如何做到毫秒级的延迟?网络切片是什么?5G的标准之争是怎么回事&#xff0…

ALive:淘宝双11直播,技术同学却可以“偷懒”?

“疯狂的”淘宝直播间 今年直播又火了! 2019年双11淘宝直播带来近 200亿 成交,以天猫双11交易总额2684亿计算,直播已经占总成交额的近 7.45%! 今年的变化 除了以往的手淘和猫客,现在 UC 浏览器、新浪微博、支付宝、…

虚拟机安装centos

到官网下载centos系统: https://www.centos.org/download/ 有三种选择(DVD IOS,Everything IOS, Minimal IOS(精简版的)),建议使用DVD IOS 安装虚拟机: #选择典型安装: #选择稍后安装&#…

KAFKA SpringBoot2 Nacos 消息异步发送和消费消息(进阶篇)

文章目录一、基础集成1. 技术选型2. 导入依赖3. kafka配置4. auto-offset-reset 简述5. 新增一个订单类6. 生产者(异步)7. 消费者8. kafka配置类9.单元测试9. 效果图10. 源码地址11.微服务专栏一、基础集成 1. 技术选型 软件/框架版本jdk1.8.0_202spri…

看懂别人的代码,只是成为高效程序员的第一步!

作者 | SeattleDataGuy译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)在为面试做准备的时候,很多软件工程师都花费了大量时间做编程题和完善简历。最终在找到一份工作后,无论是在创业公司、Google、亚马…

响应速度不给力?解锁正确缓存姿势

阿里妹导读:响应时间长,遇到性能瓶颈时,开发者第一个想到的总是性能优化。《什么技能产品经理不会提,但技术人必须懂?》讲到了什么时候需要使用缓存。但缓存的用法是什么?一旦缓存使用不当,或稍…

Spring Boot2 集成 jasypt 3.0.4 配置文件敏感信息加密

文章目录1. 导入依赖2. yml中添加配置文件3. 加解密工具类4. 敏感信息替换5. 编译打包6. 启动项目1. 导入依赖 <!--敏感信息加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifa…

技术直播:1小时突击Java工程师面试核心(限免报名)

后疫情时代&#xff0c;连程序员这个多金的职业也遭受到了一定程度的打击。从各大招聘网站和多次面试经历中&#xff0c;相信大家已经意识到&#xff0c;面试官对程序员技能体系和项目经验考核似乎更严苛了。你在面试中常常为什么苦恼呢&#xff1f;简历撰写&#xff1f;数据算…

重塑云上的 Java 语言

音乐无国界&#xff0c;但是音乐人有国界。 云原生亦如此。虽没有限定的编程语言&#xff0c;但应用所使用的编程语言已经决定了应用部署运行的行为。 Java 诞生于20年前&#xff0c;拥有大量优秀的企业级框架&#xff0c;践行 OOP 理念&#xff0c;更多体现的是严谨以及在长…

5分钟带你看懂 GCanvas渲染引擎的演进

本文内容大纲&#xff1a; 1、轻量级图形渲染引擎与应用 2、渲染引擎演进与优化之路 3、渲染引擎未来的发展方向 GCanvas 的定位是遵循 w3c 标准的跨平台的轻量级图形渲染引擎。有清晰的定位和目标&#xff0c;并且紧贴现有的业务&#xff0c;为业务提供丰富表现形式。 GCa…

免费技术直播:唐宇迪带你一节课了解机器学习经典算法

常常有小伙伴在后台反馈&#xff1a;机器学习经典算法有哪些&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【一节课掌握机器学习经典算法-线性回归模型】。本次直播将帮大家了解…

Centos7 安装Go环境

文章目录1. 下载2. 解压 和目录创建3. 配置环境变量4. 刷新环境变量5. 验证1. 下载 https://golang.google.cn/dl/ wget https://golang.google.cn/dl/go1.17.1.linux-amd64.tar.gz2. 解压 和目录创建 tar -zxvf go1.17.1.linux-amd64.tar.gz -C /usr/local/ mkdir gocode3…

深度学习在商户挂牌语义理解的实践

​导读&#xff1a;高德地图拥有几千万的POI兴趣点&#xff0c;例如大厦、底商、学校等数据&#xff0c;而且每天不断有新的POI出现。为了维持POI数据的鲜度&#xff0c;高德会通过大量的数据采集来覆盖和更新。现实中POI名称复杂&#xff0c;多变&#xff0c;同时&#xff0c;…

云计算与星辰大海的结合——不要回答,来自百亿光年外的未知信号

作者 | 硬核云顶宫责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;今年在疫情的影响下&#xff0c;各国的经济发展都遇到了一些困难&#xff0c;甚至除中国以外的主要经济体都会进入了负增长的情况&#xff0c;不过越是这样的时候&#xff0c;越…

让大数据分析更简单,4步教你玩转MongoDB BI Connector

MongoDB使用BI Connector支持BI组件直接使用SQL或ODBC数据源方式直接访问MongoDB,在早期MongoDB直接使用Postgresql FDW实现 SQL到MQL的转换,后来实现更加轻量级的mongosqld支持BI工具的连接。 安装 BI Connector 参考 Install BI Connectorhttps://docs.mongodb.com/bi-conne…

谷歌排名第一的编程语言,收下这份资料,小白也能学的会!

学习 Python 的过程中你是否有过这样的问题&#xff1a; 应用方向太多了&#xff0c;不知道该选择哪个&#xff0c;也不知道学习路径是什么。 入门简单&#xff0c;但是精通很难&#xff0c;每次学完做练习项目时都头疼&#xff0c;没思路&#xff0c;甚至怀疑自己不适合编程。…

SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译

文章目录一、集成1. 官方介绍地址2. 添加仓库和插件3. 编译打包二、安装go环境和编译2.1. 安装go2.2. 编译三、运行3.1. 正常运行3.2. 二次加密运行3.3. 测试结果四、IntelliJ IDE 反编译测试4.1. 将加密的jar进行解压4.2. 打开解压后的文件夹4.3. class文件查看4.4. 配置文件反…

每秒7亿次请求,阿里新一代数据库如何支撑?

阿里妹导读&#xff1a;Lindorm&#xff0c;就是云操作系统飞天中面向大数据存储处理的重要组成部分。Lindorm是基于HBase研发的、面向大数据领域的分布式NoSQL数据库&#xff0c;集大规模、高吞吐、快速灵活、实时混合能力于一身&#xff0c;面向海量数据场景提供世界领先的高…