返回顶部
首页 > 资讯 > 数据库 >一文搞懂MySQL XA如何实现分布式事务
  • 141
分享到

一文搞懂MySQL XA如何实现分布式事务

2024-04-02 19:04:59 141人浏览 独家记忆
摘要

目录前言XA 协议如何通过Mysql XA实现分布式事务前言 mysql支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,Mysql又是如何实现分布式事务的呢?比如开

前言

mysql支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,Mysql又是如何实现分布式事务的呢?比如开发一个业务系统,它接受外部的请求,然后访问多个内部其它系统才能执行该请求。执行时我们需要同时更新多个数据库的值(D1,D2,D3)。由于系统必须处于一个一致性,也就是这三个数据库的值要么同时更新成功,要么全部不更新。不然会造成子系统有些指令成功了,有些指令尚未执行。导致对结果理解混乱。

那么,MySQL如何实现多个MySQL数据库更新的一致性呢?那就是MySQL XA。MySQL正是靠支持XA规范的二阶段提交协议,才实现了多个数据库的操作。

XA 协议

提到XA规范就得来聊一下DTP模型(Distributed Transaction Processing)。XA规范就是约定DTP模型中的两个模块事务管理器和资源管理器的通讯方式。DTP其实就是分布式事务处理

在这里插入图片描述

各个模块的作用如下:

  • AP(Application Program):应用程序,定义事务边界(定义事务开始和结束)并访问事务边界内的资源。
  • RM(Resource Manger)资源管理器: 管理共享资源并提供外部访问接口。供外部程序来访问数据库等共享资源。此外,RM还具有事务的回滚能力。
  • TM(Transaction Manager)事务管理器:TM是分布式事务的协调者,TM与每个RM进行通信,负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。

刚开始看可能觉得不好理解,总结起来该架构就是应用程序访问及使用资环管理器提供的共享资源,通过事务管理器提供的事务接口(TX interface)定义事务操作。事务管理器和资源管理会基于XA规范执行二阶段提交协议。
XA规范流程如下图所示

在这里插入图片描述

  • 应用程序AP向事务管理器TM发起事务请求
  • TM调用xa_open()建立同资源管理器的会话
  • TM调用xa_start()标记一个事务分支的开头
  • AP访问资源管理器RM并定义操作,比如插入记录操作
  • TM调用xa_end()标记事务分支的结束
  • TM调用xa_prepare()通知RM做好事务分支的提交准备工作。其实就是二阶段提交的提交请求阶段。
  • TM调用xa_commit()通知RM提交事务分支,也就是二阶段提交的提交执行阶段。
  • TM调用xa_close管理与RM的会话。
    • 这些接口一定要按顺序执行,比如xa_start接口一定要在xa_end之前。此外,这里千万要注意的是事务管理器只是标记事务分支并不执行事务,事务操作最终是由应用程序通知资源管理器完成的。另外,我们来总结下XA的接口
  • xa_start:负责开启或者恢复一个事务分支,并且管理XID到调用线程
  • xa_end:负责取消当前线程与事务分支的关系
  • xa_prepare:负责询问RM 是否准备好了提交事务分支 xa_commit:通知RM提交事务分支
  • xa_rollback:通知RM回滚事务分支

如何通过MySQL XA实现分布式事务

Mysql中存在两种XA事务,一种是内部XA事务主要用来协调存储引擎和二进制日志,一种是外部事务可以参与到外部分布式事务中(比如多个数据库实现的分布式事务),这里我们主要讨论外部事务。

注:MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。
MySQL的XA语法如下


XA {START|BEGIN} xid [JOIN|RESUME]
XA PREPARE xid
XA END xid
XA COMMIT xid[ONE PHASE]
XA ROLLBACK xid
XA RECOVER[CONVERT XID ]

其中xid作为事务ID,唯一表示一个事务分支,每个事务分支都有一个id。
首先要确认是否开启了XA 功能

在这里插入图片描述

设置隔离级别为serializable

在这里插入图片描述

执行结果

在这里插入图片描述

首先调用“XA START ‘xid' ”命令把XA事务置于ACTIVATE状态,接着执行构成事务的多条SQL语句(比如 update
t1 set c1 = ‘a' where id=1),也就是指定事务的边界。然后调用“XA END ‘xid' ”把事务放入IDLE状态,也就是结束事务边界。

在这里插入图片描述

接着,对于一个处于IDLE状态的XA事务,可以执行“XA PREPARE”命令或一个“XA COMMIT…ONE PHASE”命令,XA
PREPARE来执行二阶段提交协议的提交请求阶段。执行“XA RECOVER”命令会列出处于PREPARED状态的所有XA事务。XA
COMMIT…ONE PHASE用于预备和提交事务,也就是转换为一阶段协议,直接提交事务。

在这里插入图片描述

最后,调用“XA COMMIT”来提交事务(或者“XA ROLLBACK”回滚事务)。这样就实现了全局事务的一致性了。

在这里插入图片描述

通过上面的流程可以看到,在MySQL数据库分布式事务中,MySQL的角色其实是XA事务过程中的RM,TM是连接MySQL服务器的客户端。在分布式事务中一般会涉及到至少两个RM,所以我们说的MySQL支持XA协议是说mysql作为RM来说的,也就是说MySQL实现了XA协议中RM应该具有的功能。

到此这篇关于一文搞懂MySQL XA如何实现分布式事务的文章就介绍到这了,更多相关MySQL XA分布式事务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 一文搞懂MySQL XA如何实现分布式事务

本文链接: https://lsjlt.com/news/156681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一文搞懂MySQL XA如何实现分布式事务
    目录前言XA 协议如何通过MySQL XA实现分布式事务前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开...
    99+
    2024-04-02
  • 一文带你搞懂Redis分布式锁
    目录1、分布式锁简介2、setnx3、Redis-分布式锁-阶段14、Redis-分布式锁-阶段25、Redis-分布式锁-阶段36、Redis-分布式锁-阶段47、Redis-分布...
    99+
    2024-04-02
  • 一文搞懂MySQL事务特性
    本文主要给大家简单讲讲MySQL事务特性,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL事务特性这篇文章可以给大家带来一些实际帮助。事务特性ACID...
    99+
    2024-04-02
  • MySQL数据库分布式事务XA的实现原理分析
      1 原理   关于MySQL数据库的分布式事务XA,分布式事务实现的原理,可见[3];关于MySQL XA的说明,可见[1][2]。   MySQL XA分为两类,内部XA与外部XA;内部XA用于同一...
    99+
    2024-04-02
  • 一文让你搞懂如何手写一个redis分布式锁
    目录场景搭建环境分析解决问题分析1分析2分析3总结场景 既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。 高并发售票问题就是一个经典案例。 搭建环境 准备redis服务,设...
    99+
    2022-11-13
    Redis分布式锁 Redis 锁
  • 一文快速搞懂MySQL InnoDB事务ACID实现原理
    【51CTO.com原创稿件】说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念。其实事务的本质就是锁、并发和重做日志的结合体。 这一篇主要讲一下 InnoDB 中的事务到底是如何...
    99+
    2024-04-02
  • 基于 XA 事务协议,用代码实现一个二阶段分布式事务
    在具体的 Demo 之前,先来补充一点 XA 事务的知识:DTP 模型与 XA 规范。DTP 模型与 XA 规范是由 X/Open 维护,也就是现在的 open group,官方网址:http://www.opengroup.org/。op...
    99+
    2023-06-02
  • 一文教你迅速解决分布式事务XA一致性问题
    近日,腾讯云发布了分布式数据库解决方案(DCDB),其最明显的特性之一就是提供了高于开源分布式事务XA的性能。大型业务系统有着用户多、并发高的特点,在这方面,集中式数据库(单机数据库)的性能很难支持,因此主流的互联网公司往往采用分布式(架构...
    99+
    2023-06-04
  • 搞懂Java分布式锁实现看这篇文章就对了
     前言:随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理机每秒钟所执行的指令还多。如果你愿意付出两倍的价钱,将得到同样的CPU,但它却以更高的时钟速率运行。因此...
    99+
    2023-06-02
  • 一文搞懂如何实现Go 超时控制
    为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至...
    99+
    2022-06-07
    GO
  • Redis如何实现分布式事务的一致性
    Redis是一个高性能、分布式内存数据库,被广泛应用在分布式系统中。在分布式系统中,如何实现事务的一致性一直是一个难题,而Redis提供的事务机制可以帮助开发者解决这个问题。本文将介绍Redis如何实现分布式事务的一致性,并展示代码示例。一...
    99+
    2023-11-07
    redis 分布式事务 一致性
  • 一文搞懂JavaScript如何实现图片懒加载
    目录实现思路准备知识data-*getBoundingClientRect()throttlewindow.innerHeight完整代码js部分CSS部分运行结果总结图片懒加载,往...
    99+
    2024-04-02
  • 一文搞明白Java Spring Boot分布式事务解决方案
    目录前言1. 什么是反向补偿2. 基本概念梳理3. 什么是两阶段提交4. AT 模式5. TCC 模式6. XA 模式7. Saga 模式前言 分布式事务,咱们前边也聊过很多次了,网...
    99+
    2024-04-02
  • 如何用C#实现SAGA分布式事务
    目录背景成功的 SAGA异常的 SAGA子事务屏障写在最后背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的...
    99+
    2022-11-13
    Saga分布式事务 C#实现SAGA分布式事务
  • Spring Boot + RabbitMQ如何实现分布式事务
    小编给大家分享一下Spring Boot + RabbitMQ如何实现分布式事务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一:分布式事务解决方案1.两阶段提交(2PC)第一阶段:事务协调器要求每个涉及到事务的数据库预提...
    99+
    2023-06-03
  • 如何在Redis中实现分布式事务
    在Redis中实现分布式事务可以通过使用 Redis 的事务机制 MULTI/EXEC 和 WATCH 命令来实现。以下是实现分布式...
    99+
    2024-04-09
    Redis
  • 一文搞懂如何实现Java,Spring动态启停定时任务
    目录为什么需要定时任务Java定时任务的原理Timer+TimerTaskScheduledThreadPoolExecutorTimer VS ScheduledThreadPoo...
    99+
    2024-04-02
  • 一文搞懂SpringBoot如何利用@Async实现异步调用
    目录前言简单使用异步处理异步回调自定义线程池注意事项(一定注意)前言 异步调用几乎是处理高并发,解决性能问题常用的手段,如何开启异步调用?SpringBoot中提供了非常简单的方式,...
    99+
    2024-04-02
  • springboot整合rocketmq如何实现分布式事务
    这篇文章给大家分享的是有关springboot整合rocketmq如何实现分布式事务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 执行流程(1) 发送方向 MQ 服务端发送消息。(2) MQ Server 将...
    99+
    2023-06-15
  • BaikalDB技术实现内幕(一)-- 分布式事务实现
    本系列文章主要介绍HTAP数据库BaikalDB的技术实现细节。 作者介绍:罗小兵,百度商业平台研发部高级研发工程师,主要负责BaikalDB事务能力,全局二级索引等方向的研发工作。 欢迎关注 Star github.com/baidu/...
    99+
    2016-05-06
    BaikalDB技术实现内幕(一)-- 分布式事务实现
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作