五年磨一剑、16项核心专利, GTS为分布式事务带来哪些全新定义?

本文涉及的产品
图片翻译,图片翻译 100张
语种识别,语种识别 100万字符
文本翻译,文本翻译 100万字符
简介: 在企业级互联网架构专场中,来自阿里巴巴的中间件技术专家厉启鹏(寈峰)为现场的听众带来了题为《GTS-分布式事务全新解决方案》的精彩分享。在本次分享中,他重点阐述了GTS如何帮助解决分布式事务问题,包括产品GTS的基本原理、核心优势、应用场景等;介绍了GTS的商业化情况,包括应用案例、商业化后给用户带来的价值提升等。

在企业级互联网架构专场中,来自阿里巴巴的中间件技术专家厉启鹏(寈峰)为现场的听众带来了题为《GTS-分布式事务全新解决方案》的精彩分享。在本次分享中,他重点阐述了GTS如何帮助解决分布式事务问题,包括产品GTS的基本原理、核心优势、应用场景等;介绍了GTS的商业化情况,包括应用案例、商业化后给用户带来的价值提升等。
数十款阿里云产品限时折扣中,赶快点击这里,领劵开始云上实践吧!
直播视频回顾
PPT下载请点击
以下内容根据现场分享整理而成。

产品简介

GTS是行业内的第一款也是唯一的一款,专注于解决分布式事务问题的中间件。GTS被定义为一站式的分布式事务解决方案,立足点是解决所有的事务问题。应用开发中遇到的事务问题大致分为四个方面:跨库事务、服务化事务、消息事务、混合事务。

GTS与其他解决方案对比

在GTS出现之前,事务问题的解决方案主要有XA方案,补偿方案,消息方案等。
·XA方案:优点为接口标准化。缺点是阻塞协议,影响系统吞吐和可伸缩性,性能不理想,很难满足互联网大并发需求,缺乏容错机制。
·补偿方案:优点为符合业务需求。缺点是实现复杂,各种异常情况难于处理,要求每个方法实现一个反向的回滚接口,运维成本高,扩现移植性不理想。
·消息方案:优点为实现相对简单。缺点是要求应用与消息系统紧耦合,增加开发成本,要求业务实现幂等。最终一致性,适用场景受限。

_1

XA方案是在资源层面解决分布式事务的问题。补偿方案和消息方案是在应用层面解决事务问题。GTS既不在资源层面也不在应用层面,而是在中间件的层面解决事务问题。这是GTS和其他三个方案的本质不同点。在中间件层面解决有几个优势:第一,可以解决跨资源的事务问题,这个是XA方案很难做到的。如果业务系统需要访问多个资源,比如多个mysql数据库同时需要访问MYSQL以及HBASE,这个过程产生的事务问题,GTS可以解决。第二,可以解决服务化的事务问题,而且和应用是松耦合的,通过使用GTS微服务不需要嵌入解决事务的逻辑,微服务会更加简单、轻量化。第三,GTS对应用的侵入性非常低,便于应用的扩展和移植。

GTS优势

GTS的优势总结起来包括四个方面:
·完整解决方案。可以解决分布式数据库、跨数据库、服务化、消息系统场景下的分布式事务问题。
·侵入性极低。一行注解即可实现事务接入,也提供 API 接入模式使用门槛低,节省开发和运维成本。
·性能超强。高达传统分布式事务 10 倍性能,4c8g集群可达1.5万TPS。热点数据高效处理,无惧数据冲突。
·高可用。支持应用宕机、节点故障等各类异常情况下均可保持数据严格一致,支持同城主备及两地三中心部署。

产品历史

_2

GTS于2014年正式立项,由阿里高级技术专家于皋牵头研发,所谓5年磨一剑。到2015年12月份在阿里内部各业务线大规模应用。2017年2月份在阿里云公测。目前GTS拥有16项核心专利,其中包括4项国际专利。阿里巴巴的用户现在主要有三类:专有云用户、公有云用户、阿里内部用户。
GTS于5月21日正式商用,首发1月内购买,低至七折。GTS 实例规格分为 5 TPS(免费版)、20 TPS、100 TPS、200 TPS、500 TPS、2000 TPS 和 5000 TPS。

功能架构

总体架构

_3

上图为总体架构图,左侧为GTS服务端,为三个节点的组成的集群;右侧为客户端。

GTS事务模型

_4

GTS的全局事务是由若干个分支事务构成的。

_5
GTS的客户端包含两部分:GTS Client和RM。在全局事务开始时,GTS Client会连接服务端,服务端会返回xid给Client;Client端将xid传输给涉及到全局事务的所有RM;之后,全局事务中的每一个RM需要开启一个分支事务,RM需要向服务端获取一个分支事务的ID号;之后,RM会汇报状态给服务端,服务端会知道每一个分支事务的执行情况,然后根据情况返回给Client端,以完成数据提交工作。

GTS与微服务集成架构

_6

GTS与微服务框架集成的架构如上图所示。业务应用在调用微服务时首先会通过GTS Server发起一个全局事务,获取到全局事务ID后。业务应用进行服务调用,同时会将全局事务ID,也就是xid传输到每个服务端。业务应用在调用a、b之后如果调用微服务c的时候出现了异常,这个时候业务应用会通知服务端,由服务端驱动微服务的RM进行服务的回滚。这个回滚对服务是透明的。

容错机制

GTS允许服务端出现宕机情况,它可以保证这种情况下事务的一致性。如果应用是多机部署的,在应用节点宕机的情况下GTS仍然可以保证数据的一致性。
·服务节点宕机

_7

如上图所示,在回滚的过程中,S3出现宕机情况之后,App1连接不上S3。此时,S1里面有S3的备用信息,那么App1会自动连接S1,由S1协助完成App1刚刚没有完成的回滚的工作。
·应用节点宕机

_8

如上图所示,App2是客户端发起了回滚操作,如果回滚的过程中app1所在的节点宕机,这个时候,GTS服务端会驱动其他app1的RM完成回滚。

扩展机制

_9

GTS支持横向扩展。由上图可以看出,一个逻辑组可以映射不同的物理组,而且不同的逻辑组可以映射到同一个物理组。

_10

在应用节点非常多的情况下,可以通过不同的逻辑组去映射不同的物理结点,以达到横向扩展的效果。

AT&MT

GTS提供AT模式(自动模式)和MT(手动)两种模式。AT模式可以覆盖90%以上的场景,也是我们首先推荐使用的模式。可以自动回滚、对业务无侵入。MT模式是GTS对TCC的一种支持,主要适用于多个系统集成的场景。两种模式可以组合使用。

应用场景

解决跨数据库的事务问题

_11

数据库可以是同构数据库,异构数据库,关系数据库,非关系数据库等。GTS可以保证多种情况下的事务一致性。

解决微服务调用的事务问题

_12

微服务经常会遇到各种事务问题,GTS非常适合解决这样的问题。比如应用嵌套调用微服务等,GTS都可以保证事务的一致性。

解决多系统集成的事务问题

_13

上图为用户的案例。放款应用调用金融系统中的信用核心的服务去完成系统评估,调用风控中心服务为客户做风险评估,调用额度中心生成放款额度,最后调用银行的支用服务和合法校验服务,完成放款的操作。

解决混合事务问题

_14

当应用调用多个服务时,GTS也可以解决这样的混合事务问题。

实践操作

AT模式

_15

上图所示例子为转账操作。

_16

如上图所示,配置文件里需要加两个东西,第一个是GTS提供的一个数据源,第二个是需要加TxcTransactionScaner

MT模式

_17

MT模式是调用第三方接口,或者是在不同系统集成的时候可能用到的一种模式。
在不同的阶段,GTS会调用不同的方法,当方法调用失败的时候GTS会有一定的策略去处理,保证方法的正确实行。
相关文章
|
4月前
|
监控 Java
分布式链路监控系统问题之Span在OpenTracing规范中的定义是什么
分布式链路监控系统问题之Span在OpenTracing规范中的定义是什么
|
存储 分布式计算 安全
分布式文件系统(HDFS产生背景及定义 HDFS优缺点 HDFS体系架构 HDFS文件块大小)
分布式文件系统(HDFS产生背景及定义 HDFS优缺点 HDFS体系架构 HDFS文件块大小)
255 0
|
7月前
|
SQL 分布式计算 Java
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
80 0
|
存储 缓存 分布式计算
深入 rdd 定义_什么叫做弹性分布式数据集 | 学习笔记
快速学习 深入 rdd 定义_什么叫做弹性分布式数据集
167 0
|
Dubbo 应用服务中间件 数据处理
分布式系统定义|学习笔记
快速学习分布式系统定义
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
126 2
基于Redis的高可用分布式锁——RedLock
|
12天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
26 8
|
28天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
54 16
|
21天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
36 5