北京云栖大会Tech Insight Workshop:《用分布式事务中间件来保障金融级交易系统的一致性》篇

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
简介: 在本章节中会介绍如何通过引入蚂蚁中间件的分布式事务产品来保证金融级交易系统的一致性问题,并且会分别介绍分布式事务的两种模式:TCC模式和自动模式的使用方式。

背景介绍

本篇是北京云栖大会Tech Insight Workshop金融云主题《使用SOFA来快速构建金融级分布式交易系统》中的一个组成部分.

通过前面的篇章,我们已经借助SOFA Boot框架构建了基于微服务架构的分布式交易系统框架,以及借助数据访问代理将系统的订单库由单库单表模式改造为分库分表,便于支撑平台日益增长的数据量。

在本章节中会介绍如何通过引入蚂蚁中间件的分布式事务产品来保证金融级交易系统的一致性问题,并且会分别介绍分布式事务的两种模式:TCC模式和自动模式的使用方式。

DEMO整体架构与说明

image

实验涉及SOFA产品

环境准备

  • 通过之前步骤的操作,目前分布式交易系统DEMO已经具备了交易与支付两个微服务
  • 在这里我们依然需要基于SOFA Boot框架构建一个Core工程(facade范式):【账务】服务,该服务将用于处理消费者和商家之前的转账操作。(具体实现代码会在审核后放出)
  • 基于事务的视角,【支付】服务发起转账(事务)请求,【账户】服务处理实际的转账(事务)操作,那么【支付】服务在这里被视为事务的发起者,而【账户】服务被视为事务的参与者。
  • 分布式事务被简称为DTX(Distribution Transaction)

详细步骤

基于TCC模式的代码改造

  • 为【参与者】代码工程增加分布式事务的依赖包
    image

image
image

  • 基于facade范式构建的工程,在service模块XML文件中配置分布式事务扫描器
    image
  • 在facade中设计并参与者的从属业务(AccountTransMinus & AccountTransAdd)需要提供的TCC接口
    image
  • 在service中实现参与者的从属业务接口
    image
  • 实现了接口后就可以提供RPC服务进行发布了(生产者)
    image
  • 将会基于共享版中间件进行发布,配置相关云上共享版的账户,截止当前步骤TCC模式下的参与者代码修改已经完成
    image
  • 为【发起方】(【支付】服务)代码工程增加分布式事务的依赖包
    image

image

  • 为【支付】服务引入【账务】服务的RPC调用的依赖,以及引入对应的bean
    image

image
image

  • 模块XML文件中引入DTX扫描器
    image
  • 改造【支付】服务,开启分布式事务,调用【账务】服务的两个从属业务接口
    image
  • 至此,基于TCC模式下的分布式事务改造就完成了(当然,需要配置对应的账务数据库,相关的DDL语句与DAL代码请在DEMO源码开放出后进行参照)。

基于自动模式的代码改造

可以看到,基于TCC的分布式事务改造虽然并不复杂,但是毕竟需要对已有的业务实现进行改造。自动模式的诞生就是为了解决这个问题,它的出现很大程度上可以通过不修改已有的业务代码就可以实现事务一致性的保障。

  • 为【参与者】工程引入分布式事务的依赖包
    image

image
image

  • 配置分布式事务的扫描器
    image
  • 通过原始业务代码中增加注解,来表示这里的业务逻辑包含事务,需要保障一致性
    image
  • 修改数据源配置
    image
  • 因为自动模式需要在参与者所使用的数据源中记录事务信息,所以需要手动在对应的业务数据库中创建两张表
CREATE TABLE `dtx_row_lock` (
  `action_id` varchar(128) NOT NULL COMMENT '分支事务号',
  `tx_id` varchar(128) NOT NULL COMMENT '主事务号',
  `table_name` varchar(64) DEFAULT NULL COMMENT '表名称',
  `row_key` varchar(512) NOT NULL COMMENT '行唯一key',
  `instance_id` varchar(32) NOT NULL COMMENT '实例id',
  `context` varchar(2000) DEFAULT NULL COMMENT '分支上下文',
  `feature` varchar(2000) DEFAULT NULL COMMENT '扩展属性',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`row_key`,`instance_id`),
  KEY `idx_txid_action_id` (`action_id`,`tx_id`,`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='行锁';
CREATE TABLE `dtx_branch_info` (
  `action_id` varchar(128) NOT NULL COMMENT '分支事务号',
  `tx_id` varchar(128) NOT NULL COMMENT '主事务号',
  `status` varchar(4) DEFAULT NULL COMMENT '事务状态',
  `log_info` blob COMMENT 'undo/redo log',
  `biz_type` varchar(32) DEFAULT NULL COMMENT '发起方业务类型',
  `instance_id` varchar(32) DEFAULT NULL COMMENT '实例id',
  `context` varchar(2000) DEFAULT NULL COMMENT '分支上下文',
  `feature` varchar(2000) DEFAULT NULL COMMENT '扩展属性',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`action_id`),
  KEY `idx_txid_action_id` (`action_id`,`tx_id`,`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分支记录日志';
  • 至此,自动模式下参与者的修改就完成了
  • 进行对发起方的修改,首先是添加依赖包
    image

image
image
image

  • 增加分布式事务的扫描器
    image
  • 增加注释,以表明这里包含事务
    image
  • 修改数据源
    image
  • 至此,基于自动模式的【发起方】的代码改造也已完成。相关的DEMO源码需要在审核后对外进行发布。

结论

至此,基于SOFA这个可扩展的分布式云平台所构建的金融交易系统就创建完毕了,整个DEMO分别涉及到分布式数据库,微服务框架,分布式事务等构建金融相关应用所需的基本服务框架,整体的构建过程也比较清晰明了,便于用户的快速入手。在最后环节的分布式事务演示中可以看到,基于自动模式的分布式事务对业务的改造量非常的小,基本可以说是没有侵入性,非常适合需要低成本快速接入分布式事务来保证业务的一致性,同时对TPS以及并发要求不高的业务场景使用。

目录
相关文章
|
2月前
|
消息中间件 人工智能 开发框架
火速收藏!2025 云栖大会 AI 中间件议程看点全公开(附免费报名通道)
2025 云栖大会“云智一体 · 碳硅共生”的主题下,9月26日,云栖小镇D1-3馆「AI 中间件论坛」将聚焦 AI 时代中间件的技术演进与创新实践,带来 AI 开发框架、消息队列、事件驱动架构及 API 网关等关键技术在 AI 领域的前沿技术探索、最新产品发布、落地实践经验。
372 30
|
2月前
|
人工智能 Cloud Native 中间件
【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!
2025 年 9 月 24 日至 26 日,杭州·云栖小镇,4 大论坛、20+ 主题分享,从云原生到 AI 原生,我们诚邀您共赴企业智能化升级浪潮之巅。
|
人工智能 Linux 云栖大会
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
报名倒计时2天啦,欢迎大家来“操作系统技术Workshop”打卡。专家讲解原理、现场实战演练,AI、C++ 20专场任选。
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
|
供应链 Cloud Native 安全
|
Cloud Native 安全 Linux
议程剧透!1个主论坛4场Workshop,龙蜥操作系统峰会盛大来袭 | 2022 云栖大会
每场 Workshop 开放 30 个报名名额,人人一份龙蜥伴手礼!先报先审!
议程剧透!1个主论坛4场Workshop,龙蜥操作系统峰会盛大来袭 | 2022 云栖大会
|
分布式数据库 关系型数据库 数据库
|
2月前
|
存储 人工智能 安全
阿里云中企出海技术分论坛精华概览 | 2025云栖大会回顾
2025云栖大会中企出海技术分论坛聚焦中国企业全球化挑战,阿里云联合易点天下、技威时代等企业,分享从“走出去”到“扎下根”的技术路径。论坛展示阿里云在基础设施、网络、安全、AI与数据库等领域的创新成果,推出全球一张网、AI网关、瑶池数据库等解决方案,助力企业构建安全、智能、敏捷的全球云底座,推动中国技术出海迈向新阶段。
阿里云中企出海技术分论坛精华概览 | 2025云栖大会回顾
|
2月前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
2159 13
人工智能 运维 架构师
258 0

热门文章

最新文章

下一篇
oss云网关配置