mysql XA 分布式事务

因系统各种业务上的拆分,将多个业务服务拆分到了不同的服务器上,形成了微服务。而实际生产环境中,我们总会遇一些需要多个微服务联合提供服务的场景,并需要保证每个微服务都需有事务的四大特性(原子性、一致性、隔离性、持久性)。典型的场景如下单就会牵涉到3个服务(会员服务、订单服务、商品服务)。在下单的同时,我们需要保证订单的成功创建和商品库存的正确减少。

由此,我做了一些资料的准备工作,发现可以使用分布式事务,我比较熟悉的是tcc,但具体tcc的底层实现是如何的,我也不太清楚,但我再mysql的官方文档上找到了这个问题的解决方案。即XA事务

关于XA事务的介绍详解请点击这里

以下是我做的测试,首先我们通过命令打开两个mysql连接,并做好测试表的准备工作。

如上是我的测试数据。我将用这个数据来测试XA事务。

第一步:client1 创建一个xa事务

xa start "mysql_xa_1";
update users set nickname='tanyong123' where id=1;
update users set versionId = 22 where id=1;
xa end "mysql_xa_1";
xa prepare "mysql_xa_1";

其中mysql_xa_1 是事务id,我们总是要保证事务id的唯一性,不可以重复

发现我这里创建成功了,

第二步:创建client2 效验数据是否已持久化到文件层

检测我刚才执行的sql语句是否已持久化到文件层。
新开一个连接client2

可以发现刚刚xa中执行的事务语句并没有持久化进来。

第三步:效验client2 拿着client1的事务id 能否提交成功


可以发现,提交失败了。那么是否是因为我的client1连接没有关闭(退出),而导致client2无法提交成功呢?基于这个,我又做了一个测试,退出client1的mysql连接。再次让client2执行事务

由图可发现提交成功了,我们创建client3 看下xa事务提交的数据是否持久化到文件层了。

由此可知已持久化到文件层。

总结

基于如上测试,我们可知,当client1创建好xa事务后通过事务id是可以让client2去提交事务的。

基于这个原理,我设计了一个简单的分布式事务模型图

业务方通过restful 或是 rpc 获取到xa事务id,根据其他业务的执行结果判断对这些xa事务执行回滚还是提交。

xa 事务回滚命令

xa rollback "mysql_xa_1"

mysql_xa_1 为事务id

分布式事务TCC


两个事务的处理主要在于要有一个中间人做协调器,一旦监控到一方失败,那么协调器就会回滚所有任务的事务。后续附上具体的代码实现。如上图所示为我理解的具体原理实行图。

TCC事务实现,我采用依赖go语言开发的DTM事务管理器
DTM教程

mysql XA 分布式事务、DTM TCC事务(多语言支持)相关推荐

  1. java tcc事务 例子_分布式事务之TCC事务模型

    正文 我们先套一个业务场景进去,如下图所示 那页面点了支付按钮,调用支付服务,那我们后台要实现下面三个步骤 [1] 订单服务-修改订单状态 [2] 账户服务-扣减金钱 [3] 库存服务-扣减库存 达到 ...

  2. rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...

    分布式事务 我们知道在单数据库系统中,实现数据的一致性,通过数据库的事务来处理比较简单.在微服务或分布式系统中,各个独立的服务都会有自己的数据库,而不是在同一个数据库中,所以当一组事务(如商品交易中, ...

  3. 分布式事务(三)、柔性事务之 TCC、Saga、本地消息表、事务消息、最大努力通知

    目录 [前言] TCC Saga [通知型事务] 本地消息表 MQ事务消息 最大努力通知 总结 分布式事务: 分布式事务(一).CAP,BASE理论 分布式事务(二).刚性事务之 2PC.3PC [前 ...

  4. 事务 跨库事务 分布式事务及解决方案

    什么是事务? 本地事务 事务传播行为: 事务的四大特性 ACID 并发事务产生的问题可以分为4类 事务的隔离级别 什么是分布式事务 分布式涉及到的原理: CAP原理: BASE理论 柔性事务和刚性事务 ...

  5. 什么是分布式事务?2PC、XA、3PC、TCC

    Table of Contents 事务 分布式事务 2PC - Two-phase commit protocol,即两阶段提交协议 同步阻塞 单点故障 数据不一致问题 小结一下 2PC 分布式数据 ...

  6. php mysql xa_分布式事务之——MySQL对XA事务的支持

    MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持.MySQL Connector/J 从5.0.0版本之后开始直接提供对XA的支持. 需要注意的是, 在DTP模型中,my ...

  7. mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务

    概述 前面已经介绍了2PC和3PC方面的内容,那么MySQL数据库在分布式事务这块又是怎么规划呢? XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准 ...

  8. 深入解析:MySQL对分布式事务 XA Transactions 的支持

    导读:MySQL对分布式事务(XA Transactions)进行了很好的支持,我们看看它是怎么做的,并实战验证其提供的分布式事务控制语句效果. MySQL从5.0.3开始,InnoDB存储引擎支持X ...

  9. mysql xa 实现_MySQL数据库分布式事务XA的实现原理分析

    1 原理 关于MySQL数据库的分布式事务XA,分布式事务实现的原理,可见[3];关于MySQL XA的说明,可见[1][2]. MySQL XA分为两类,内部XA与外部XA;内部XA用于同一实例下跨 ...

  10. MySQL数据库分布式事务XA实现原理分析

    MySQL XA分为两类,内部XA与外部XA;内部XA用于同一实例下跨多个引擎的事务,由大家熟悉的Binlog作为协调者;外部XA用于跨多MySQL实例的分布式事务,需要应用层介入作为协调者(崩溃时的 ...

最新文章

  1. 结对编程--------四则运算 实验总结2
  2. 智能医疗战场 人工智能如何赋能健康智能终端?
  3. [笔记]modelsim前仿后仿各种问题
  4. 图像处理基本算法 形状特征
  5. rtsp 协议读取视频进行分析并返回结果到websocket server
  6. js室内地图开发_使用JS+Three.js+Echart开发商场室内地图客流信息统计功能(下)...
  7. 试用阿里开源的Arthas小记
  8. Instrumentation 功能介绍(javaagent)
  9. leetcode 两数之和 java版本
  10. OpenSSL密码库算法笔记——第6.5章 密钥协商
  11. 电压比较器,电压比较器原理
  12. 数据抓取的艺术(一~三):Selenium+Phantomjs数据抓取环境配置
  13. 证明您履历表经验的防弹五步法
  14. ArcGIS实验四 不同坡度植被覆盖率分析
  15. mac插网线不能上网_苹果笔记本连接网线不能上网怎么回事
  16. GDB 的几个用法(until, finish, tui)
  17. Test failed due to unrecognized service account for this product, please submit initial report for t
  18. 二、LaTeX学习笔记——基本结构、设置表格、文字变形及符号、插入图片
  19. R 关于NA的处理办法
  20. 我在大厂写React学到了什么?性能优化篇

热门文章

  1. Pearson相关分析
  2. git 学习指南 学习资料笔记
  3. WebCracker4.0和monster字典——路由器登陆密码破解工具
  4. linux防恶意软件防病毒 防护工具
  5. 使用OBS屏幕录制时色彩错误问题解决方案
  6. Xilinx浮点数IP核使用记录
  7. 小程序uv访客怎么刷_微信小程序获取访客数据-使用攻略
  8. 什么是前后端分离技术?
  9. proposal_target_layer.py (FPN)
  10. 手机设置邮箱无法验证服务器失败,用手机邮箱设置怎么总显示无法验证帐户信息...