IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql XA 分布式事务 -> 正文阅读

[大数据]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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:08:56  更:2022-06-29 19:12:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 5:38:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码