- 使用阿里云云原生平台对系统进行重构和升级(2)——使用阿里云的G
- 使用阿里云云原生平台对系统进行重构和升级(10)——使用阿里云的
- 使用阿里云云原生平台对系统进行重构和升级(4)——使用阿里云的R
- 使用阿里云云原生平台对系统进行重构和升级(3)——使用阿里云的P
- 使用阿里云云原生平台对系统进行重构和升级(8)——使用阿里云的E
- 使用阿里云云原生平台对系统进行重构和升级(9)——使用阿里云的E
- 使用阿里云云原生平台对系统进行重构和升级(6)——使用阿里云的E
- 使用阿里云云原生平台对系统进行重构和升级(5)——使用阿里云的E
- 使用阿里云云原生平台对系统进行重构和升级(7)——使用阿里云的P
- 使用阿里云云原生平台对系统进行重构和升级(1)——概述
上一篇文章介绍了快递驿站系统现有的瓶颈及三步走的解决方案,文中提及了阿里云云原生平台中的多种产品和技术,从这篇文章开始对里面提及的这些内容做详细的介绍和说明,并附上代码,供大家参考。
使用阿里云的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中间件进行分库分表。
网友评论