三十七、XA模式

news2024/12/23 17:32:34

目录

一、XA模式原理

在XA模式中,一个事务通常被分为两个阶段:

二、Seata的XA模式

RM一阶段的工作:

TC一阶段的工作:

RM二阶段的工作:

1、优点:

2、缺点:

三、实现XA模式

1、修改yml文件,开启XA模式

2、给发起全局事务的入口方法添加@GlobalTransactional注解


一、XA模式原理

  • XA模式是一种分布式事务处理模式,常用于多个数据库之间的事务处理。
  • 在XA模式中,一个事务被视为由一个或多个资源管理器(例如数据库)控制的一系列操作。
  • 这些资源管理器必须支持XA协议,以确保事务的一致性和可靠性。

在XA模式中,一个事务通常被分为两个阶段:

  • 准备阶段和提交阶段。
  • 在准备阶段,事务管理器将事务状态记录到事务日志,通知各个资源管理器准备执行相关操作。
  • 在提交阶段,事务管理器将事务提交或回滚,并通知各个资源管理器进行相应操作。
  • XA模式保证了多个数据库之间的事务操作的一致性和可靠性。

  1. 总的思路是,RM每次完成了任务都要向事务协调者返回消息;
  2. 事务协调者根据获得的消息来选择进入下一阶段或是回滚

二、Seata的XA模式

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC一阶段的工作:

  • TC检测各分支事务执行状态

  1. 如果都成功,通知所有RM提交事务
  2. 如果有失败,通知所有RM回滚事务

RM二阶段的工作:

接收TC的指令,选择提交或回滚

1、优点:

事务的强一致性,满足 ACID 原则。
常用数据库都支持,实现简单,并且没有代码侵入

2、缺点:

因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
依赖关系型数据库实现事务

三、实现XA模式

1、修改yml文件,开启XA模式

  data-source-proxy-mode: XA

2、给发起全局事务的入口方法添加@GlobalTransactional注解

  • 发起全局事务的入口方法是指启动一个全局事务的入口方法,一方面它可以创建全局事务对象来跟踪全局事务的状态和参与者,另一方面它可以协调分支事务之间的执行,确保它们成功地提交或者回滚。
  • 在分布式系统中,由于业务涉及多个不同的节点和资源,会很容易出现分支事务之间存在数据不一致的情况,所以需要使用分布式事务来保证数据的一致性。发起全局事务的入口方法是指在这种情况下,通过调用分布式事务中间件提供的API,启动一个全局事务,将该事务拆分成多个分支事务,并为每个分支事务创建一个事务上下文,同时协调分支事务的执行,保证最终的数据一致性。
  • 不同的分布式事务中间件提供不同的API来启动全局事务,但通常都会包括创建全局事务对象和注册分支事务等步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1282970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析Linux进程管理机制

本文将深入探讨Linux操作系统中的进程管理机制,重点介绍进程的创建、调度和终止过程,以及进程间的通信方式。通过对进程相关概念和机制的全面解析,读者将能够更好地理解和应用Linux进程管理,提升系统的性能和可靠性。 引言 Linux作…

Wireshark中的ICMP协议包分析

接上文: 打开ARP响应数据包报文 通过分析可知, 1.ICMP协议尽管并不传输数据内容,仍然归于网络层,但是基于ip协议。 2.主机发送一个ICMP Echo Request的包,接受方在可正常响应的情况下,返回一个ICMP Echo R…

vue项目切换菜单添加特效

我这边mian/index.vue是配置二级路由出口 关于导航的过渡特效&#xff0c;vue官网有教程 在<style scoped lang"scss"></style>里添加自己想要的特效就可以

vscode的eslint检查代码格式不严谨的快速修复

问题&#xff1a; 原因&#xff1a;复制的代码&#xff0c;esLint检查代码格式不正确。或者写的代码位置不严谨&#xff0c;总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角&#xff0c;切换json模式 3、添加设置 "editor.codeActionsOn…

焊接专业个人简历(通用25篇)

如果大家想在焊接行业的求职中脱颖而出&#xff0c;轻松斩获心仪职位&#xff0c;参考这25篇通用的焊接专业个人简历案例&#xff0c;无论您是初学者还是资深焊工&#xff0c;都能从中找到适合自己的简历内容。参考这些简历&#xff0c;让您的求职之路更加顺畅。 焊接专业个人…

C++继承(详解)

一、继承的概念 1.1、继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结…

国际语音呼叫中心的优势有哪些?

国际语音呼叫中心是一种专业化的客户服务方式&#xff0c;它采用先进的语音技术和人工智能算法&#xff0c;为企业提供高效、准确、优质的服务。在当下商业竞争中&#xff0c;客户服务质量是企业成功的重要因素之一。而国际语音呼叫中心可以帮助企业提高客户满意度、增强客户忠…

Springboot养老院信息管理系统的开发-计算机毕设 附源码 27500

Springboot养老院信息管理系统的开发 摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;…

正运动技术EtherCAT扩展模块接线参考以及使用流程

本文以正运动扩展模块EIO16084为例 一、EtherCAT扩展模块接线参考 EIO16084数字量扩展模块为单电源供电&#xff0c;主电源就可以给IO供电&#xff0c;主电源采用24V直流电源。 EIO16084扩展模块在扩展接线完成后&#xff0c;不需要进行进行二次开发&#xff0c;只需手动在E…

Windows系列:Zabbix agent一键部署-windows版本(windows 安装zabbix客户端安装、bat文件修改文件内容)

Zabbix agent一键部署-windows版本&#xff08;windows 安装zabbix客户端安装、bat文件修改文件内容&#xff09; 一. Zabbix agent一键部署-windows版本二. windows 安装zabbix客户端安装1.下载安装zabbix agent2.配置zabbix agent2.1 修改配置文件2.2 将zabbix agent安装为wi…

备战春招——12.04 算法

哈希表 哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_&#xff0c;完成映射操作&#xff0c;主要是相应的函数。map和set是有序的&#xff0c;使用的是树的形式&#xff0c;unordered_map和unordered_set使用的是散列比表的&#xff0c;无序。 相应函数…

Ubuntu20.04/Linux中常用软件的安装

文章目录 一、安裝与卸载微信二、安裝与卸载QQ三、安装Chrome浏览器并加入apt更新四、安裝VScode4.1 安装常用插件4.2 减小Ipch缓存&#xff1a; 五、安装代码对比工具Meld六、安裝WPS七、安装PDF阅读器Foxit Reader八、安装文献管理软件Zotero九、安装有道云笔记十、安装远程控…

多线程详解1-互斥锁,读写锁,生产者消费者模型

文章目录 互斥量mutex互斥量基本原理死锁代码实现 读写锁基本概念为什么需要读写锁&#xff1f;相关函数读写锁实现 生产-消费者模型PV操作条件变量函数生产者消费者问题生产-消费者模型实现代码 互斥量mutex 互斥量基本原理 Linux系统编程 —互斥量mutex 互斥量mutex 前文提…

webpack学习-1.起步

webpack学习-1.起步 1.基础设置2.配置文件的引入3.总结 1.基础设置 首先 webpack是干嘛的呢&#xff0c;用官网的一张图 Webpack 是一个现代的静态模块打包工具。它主要用于将前端应用程序中的各种资源&#xff08;例如 JavaScript、CSS、图片等&#xff09;打包成一个或多个…

Docker Compose简单入门

Docker Compose 简介 Docker Compose 是一个编排多容器发布式部署的工具&#xff0c;提供命令集管理容器化应用的完整开发周期&#xff0c;包括服务构建&#xff0c;启动和停止。 Docker Compose 真正的作用是在一个文件&#xff08;docker-compose.yml&#xff09;中定义并运…

《opencv实用探索·九》中值滤波简单理解

1、引言 均值滤波、方框滤波、高斯滤波&#xff0c;都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合&#xff0c;因此含有噪声的像素也会被考虑进去&#xff0c;噪声不会被消除&#xff0c;而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…

代码随想录第二十一天(一刷C语言)|回溯算法组合

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、回溯算法 1、种类 排列、组合、分割、子集、棋盘问题 2、回溯步骤 &#xff08;0&#xff09;回溯抽象 回溯法解决的问题均可以抽象为树形结构&#xff08;N叉树&#xff09; &…

渗透复现

初步接触 先进行主机发现 nmap 172.16.17.0/24 -p 80 先指定扫描80端口的 nmap 172.16.17.0/24 做的时候&#xff0c;一直没有发现之间有一个输入成了逗号 根据上面的结果&#xff0c;就可以知道了 我们会看到有几个open&#xff0c;应该就是这两个了 就会发现是可以的&…

MVCC是如何保证隔离性的

之前提到了MVCC可以一定程度上避免幻读&#xff0c;那具体MVCC是咋工作的呢&#xff1f; 需要介绍两个机制&#xff1a;read view和聚簇索引的两个隐藏列 read view 这个就是我们理解的快照&#xff0c;有四个字段&#xff0c;本事务id、活跃事务id列表&#xff08;包含自己&…

Biglnteger 和 BigDecimal类 - Java

BigInteger 和 BigDecimal类 1、应用场景 BigInteger 适合保存比较大的整型BigDecimal 适合保存精度更高的浮点型(小数) 2、BigInteger 当编程中需要处理很大的整数&#xff0c;long 不够用&#xff0c;就需要使用 Biglnteger 类。 使用 //创建&#xff1a;和类一样&…