使用阿里云云原生平台对系统进行重构和升级(2)——使用阿里云的GTS,进行全局分布式事务处理

        上一篇文章介绍了快递驿站系统现有的瓶颈及三步走的解决方案,文中提及了阿里云云原生平台中的多种产品和技术,从这篇文章开始对里面提及的这些内容做详细的介绍和说明,并附上代码,供大家参考。

        使用阿里云的GTS,进行全局分布式事务处理。

        我们从3W1H的角度来进行描述,What?Why?Where?How?

        一、什么是全部分布式事务服务GTS(What)

        全局事务服务GTS(Global Transaction Service)用于实现分布式环境下,特别是微服务架构下的高性能事务一致性。可以与RDS、MySQL、PostgreSQL等数据源,Spring Cloud、Dubbo、HSF及其他RPC框架,MQ消息队列等中间件产品配合使用,轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合。

        个人认为比Seata、Himly这种开源的分布式事务要好,我记得之前用Himly的时候,只支持TCC的模式,虽然有自定义数据库操作粒度等优点,但是对应用的侵入性强,实现难度大,相比而言GTS配置和使用更加方便简单。GTS 让应用开发者不再需要考虑复杂的事务问题,仅需简单配置及一句 GTS 注解,对已有业务代码无侵入,就能帮您轻松实现超强性能、高可用、多数据源的分布式事务。

        二、使用GTS的优势(Why)

        优势不言而喻。首先,从开发角度来讲,配置很简单,在所需要进行事务的方法上加一个注解即可,当然也提供了多种接入方式,除了注解,还可以通过API的方式调用,节省开发和运维成本;其次,和阿里云的MQ及EDAS产品无缝集成,使用起来非常方便,通过RocketMQ中的事务消息,配合GTS也可以完成事务处理,方便有效,并且支持多种数据源,上篇文章介绍了说新系统要使用PolarDB数据库,都是支持的;最后,GTS具有高达传统分布式事务 10 倍性能,热点数据高效处理,无惧数据冲突,并且是高可用的,在应用宕机、节点故障等各类异常情况均可保证数据严格一致。

        三、GTS的应用场景(Where)

        应用场景有4个方面:

        1)通用分布式事务管理。这个是用了最多的,支持微服务框架(Spring Cloud、Dubbo 和 HSF)、数据库(DRDS、RDS、MySQL、Oracle等)、消息中间件(MQ)的组合使用,灵活方便。

        2)消息事务。这个是配合阿里云RocketMQ中的事务消息使用的,GTS 与 MQ 打通,提供事务消息处理能力,可以保证业务链路完成时发送消息,任一阶段异常时回滚消息。开发简单,在客户端声明一个注解,用以界定事务边界,调用 MQ 的事务API发送消息。

MQ中创建事务消息

        3)面向服务的架构SOA和分布式事务。提供跨库、跨服务的分布式事务支持,实现业务链路级别的分布式事务。

        4)共享出行。共享出行场景下,通过 GTS 支撑物联网系统、订单系统、支付系统、运维系统、分析系统等系各统应用事务一致性,保证海量订单和数千万流水的交易。

        四、以代码的方式讲解如何使用GTS,并附上demo(How)

        1)首先在阿里云的GTS控制台开通服务,创建事务分组。这里一定要注意的是,GTS 不支持跨地域访问。创建事务分组时,需要选择和业务系统相同的地域,否则使用时会显示连不上 GTS Server,如果ECS和EDAS购买的是杭州地区,那GTS不要买其他地区,也购买同一个地区的,推荐使用上海或者北京。

创建事务分组
确认订单开通成功
事务分组列表

        2)开通事务分组后,代码中把事务分组全称放进去即可,我们下面来看快递驿站中一个简单的场景:

用户去驿站寄件,支付邮费,生成待支付订单,当用户去支付时,我们代码需要做以下一些处理:

a.创建订单,将订单状态“待支付”改成“支付中”,

b.从用户的账户余额中,扣除邮费,

c.扣除成功后,订单状态“支付中”改成“已支付”,提示支付完成,

d.余额不足,则回滚之前的操作。

因为使用了微服务架构,数据进行了分库分表,用户余额数据在用户数据库中,订单相关数据在订单数据库中,为了保证数据的一致性,需要使用分布式事务服务GTS来完成这一系列的确认或回滚。

        3)代码片段如下:

代码片段

从上图看,代码其实非常简单,重点在于 @TxcTransaction的注解,但是要运行成功,有很多关键点要注意的,我这里一一列出来,避免大家花太多的时间踩坑。

1、首先要下载GTS SDK的开发包,建议选择最新的版本下载;

GTS版本记录

2、下载后解压,里面有2个jar包,因为我们是团队开发,所以放到了云效中的Maven私服里供下载;

上传jar到云效的Maven私服中

3、把依赖代码拷贝到项目的pom.xml文件中;

Maven依赖代码

4、代码中注入数据库连接,我们使用的是双数据源切换,需要在PolarDB和ADB中切换,代码如下:

双数据源切换

5、配置文件中datasource,加入数据源地址,我们的代码是用户库和订单库,数据库不一样,url地址也肯定不同,所以数据库不同没问题,有些朋友可能数据是同一个库的,那这里一定要注意,url地址上一定要区分比如增加spam这样的标签,虽然指向同一个库,但是连接不同,GTS才会生效,切记切记,很多朋友这里没有注意,导致代码一直运行不成功。

配置Datasource

上图中,数据库都是bmxtestdb,这样在两个微服务里面的datasource,通过url后面增加spam的标签还区分。

6、配置文件中,增加txc配置;

GTS相关配置
GTS事务分组列表

7、如果使用MySQL数据库,需要在数据库中增加txc_undo_log日志表,如果是DRDS、PolarDB,那么这张表是自带的,不需要创建;

txc_undo_log日志表

        通过以上的几步,GTS全局分布式事务就会工作了,使用起来真的是非常的简单和高效,如果您在使用过程中有任何问题,可以在本文评论中联系我,欢迎大家一起讨论,共同进步。

        下一篇文章,我们将介绍如何使用阿里云的PolarDB数据库进行数据的存储和管理,并使用PolarDB-X中间件进行分库分表。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容