2024年用Go轻松完成一个XA分布式事务,保姆级教程,2024年最新看完阿里P9大牛的“Golang成长笔记”我悟了

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

分布式事务简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

分布式事务方案包括:

  • xa

  • tcc

  • saga

  • 可靠消息

下面我们看看最简单的xa

XA

XA是由X/Open组织提出的分布式事务的规范,XA规范主要定义了(全局)事务管理器™和(局部)资源管理器(RM)之间的接口。本地的数据库如mysql在XA中扮演的是RM角色

XA一共分为两阶段:

第一阶段(prepare):即所有的参与者RM准备执行事务并锁住需要的资源。参与者ready时,向TM报告已准备就绪。 第二阶段 (commit/rollback):当事务管理者™确认所有参与者(RM)都ready后,向所有参与者发送commit命令。

目前主流的数据库基本都支持XA事务,包括mysql、oracle、sqlserver、postgre

我们看看本地数据库是如何支持XA的:

第一阶段 准备

XA start ‘4fPqCNTYeSG’

UPDATE user_account SET balance=balance + 30,update_time=‘2021-06-09 11:50:42.438’ WHERE user_id = ‘1’

XA end ‘4fPqCNTYeSG’

XA prepare ‘4fPqCNTYeSG’

– 当所有的参与者完成了prepare,就进入第二阶段 提交

xa commit ‘4fPqCNTYeSG’

xa实践


介绍了这么多,我们来实践完成一个微服务上的xa事务,加深分布式事务的理解,这里采用dtm作为分布式事务的管理者,来运行其中一个xa的demo

安装go 安装mysql

获取dtm

git clone https://github.com/yedf/dtm.git

cd dtm

配置mysql

cp conf.sample.yml conf.yml

vi conf.yml

运行示例

go run app/main.go xa

从日志里,能够找到XA部分的输出,最后成功提交完成了事务

服务1输出

XA start ‘4fPqCNTYeSG’

UPDATE user_account SET balance=balance - 30,update_time=‘2021-06-09 11:50:42.438’ WHERE user_id = ‘1’

XA end ‘4fPqCNTYeSG’

XA prepare ‘4fPqCNTYeSG’

服务2输出

XA start ‘4fPqCPijxyC’

UPDATE user_account SET balance=balance + 30,update_time=‘2021-06-09 11:50:42.493’ WHERE user_id = ‘2’

XA end ‘4fPqCPijxyC’

XA prepare ‘4fPqCPijxyC’

服务1输出

xa commit ‘4fPqCNTYeSG’

#服务2输出

xa commit ‘4fPqCPijxyC’

整个交互的时序详情如下

v2-50e5b46d1f5242a6df88a47e048c3f93_b.jpg

代码如下:

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值