一文带你速通Seata的XA模式

news2024/11/28 23:48:18

目录

XA规范协议

基本介绍

分布式事务处理模型角色

两阶段提交

Seata的XA的模式

基本介绍

具体使用

小结


XA规范协议

基本介绍

在讲解Seate中的XA模式之前我们先来了解了解什么是XA规范。XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范描述了全局的TM与局部的RM之间的接口,XA 规范 在上世纪 90 年代初就被提出。目前,几乎所有主流的数据库都对 XA 规范 提供了支持。

XA 规范使用两阶段提交(2PC,Two-Phase Commit)来保证所有资源同时提交或回滚任何特定的事务。

它不是一个网络协议而是定义了 事务管理器(Transaction Manager)、应用程序(Application Program) 和 资源管理器(Resource Manager) 之间交互的 CAPI(Common Application Programming Interface) 接口标准 

分布式事务处理模型角色

DTP(Distributed Transaction Processing)模型定义如下角色:

  • AP:即应用程序,可以理解为使用DTP分布式事务的程序
  •  RM:资源管理器,可以理解为事务的参与者,一般情况下是指一个数据库的实例,通过资源管理器对该数据库进行控制,资源管理器控制着分支事务
  • TM:事务管理器,负责协调和管理事务,事务管理器控制着全局事务,管理实务生命周期,并协调各个RM。全局事务是指分布式事务处理环境中,需要操作多个数据库共同完成一个工作,这个工作即是一个全局事务。

DTP模式定义TM和RM之间通讯的接口规范叫XA,简单理解为数据库提供的2PC接口协议,基于数据库的XA协议来实现的2PC又称为XA方案。

两阶段提交

俩阶段分为 准备阶段 和 提交阶段,它对分布式事务管理的流程如下

  • 准备阶段:AP与TM交互,开启一个 全局分布式事务,并发送请求到每个RM,执行数据变更逻辑,此时每个RM会向TM发送请求注册 分支事务,在执行完业务逻辑后报告准备提交的状态(事务执行完未提交),之后AP会根据RM的响应在 提交阶段 做出反馈
  • 提交阶段:如果所有的RM都回复“是”,表示它们已经准备好提交,那么AP会在该阶段向TM发出提交请求,分布式事务提交;否则,AP会向TM发出中止请求,分布式事务回滚

案例解释:

应用程序(AP)持有商品库和余额库两个数据源。


应用程序(AP)通过TM通知余额库(RM)和商品库(RM),来创建订单和减余额,RM此时未提交事务,此时商品和余额资源锁定。

如果TM收到执行回复,只要有一方失败则分别向其他RM发送回滚事务,回滚完毕,资源锁释放。

如果TM收到执行回复,全部成功,此时向所有的RM发起提交事务,提交完毕,资源锁释放。

Seata的XA的模式

基本介绍

我们都知道在Seata中有三个核心角色:事务管理器(Transaction Manager)资源管理器(Resource Manager) 和 事务协调者(Transaction Coordinator)。

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

但是,在Seata中三个角色的定义与XA协议标准中角色的定义有所区别:

事务管理器(Transaction Manager)应该对应XA协议中的应用程序(Application Program)

事务协调者(Transaction Coordinator)对应XA协议中的事务管理器(Transaction Manager)

在Seata对原始的XA模式做了简单的封装和改造,以适应自己的事务模型,基本架构如图:

RM一阶段的工作:

① 注册分支事务到TC

② 执行分支业务但不提交

③ 报告执行状态到TC

TC二阶段的工作:

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

    a.如果都成功,通知所有RM提交事务

    b.如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

具体使用

 修改application.yml文件(每个参与事务的微服务),开启XA模式:

seata:
  data-source-proxy-mode: XA

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

    @GlobalTransactional
    @Transactional(rollbackFor = Exception.class)
    public void saveOrder(OrderSaveParam orderSaveParam) {
        // 参数校验等必要操作
        // ...

        // 修改库存
        reduceGoodsCount(goodsCountMap);

        // 扣除余额
        reduceMoney(id,money);


        // 异常回滚事务
        int i = 1 / 0;
    }

小结

性能:低

模式:CP,强一致性

难易程度:简单,基于数据库自带特性实现,无需改表 

应用场景:金融行业,并发量不大,但数据很重要的项目

优点:

  • 事务的强一致性,满足ACID原则。

  • 常用数据库都支持,实现简单,并且没有代码侵入

缺点:

  • 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差

  • 依赖关系型数据库实现事务

  • 死锁(协议阻塞):XA prepare 后,分支事务进入阻塞阶段,收到 XA commit 或 XA rollback 前必须阻塞等待。如果没有一个靠谱的协调者存在,比如abc三个库的数据被二阶段决议为提交,此时ab收到的指令,提交后,c库在收到指令后挂了,并没有提交xa事务,或者协调者没有做到二阶段重试,那么这个没有提交的xa事务将会一直 持有锁,造成死锁的局面
  • 性能差:性能的损耗主要来自两个方面:一方面,事务协调过程,增加单个事务的 RT;另一方面,并发事务数 据的锁冲突,降低吞吐。其实主要原因就是上面的阻塞跟数据锁定造成,因为xa的一阶段并非提交,如果一阶段都是提交的场景下,由于At模式的一阶段提交,at的性能是优于xa,因为它锁在tc一侧集中释放,无需多个库进行本地的锁释放

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

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

相关文章

计算机毕业设计项目选题推荐(免费领源码)java+Springboot+Mysql邻家优选超市线上线下购物系统小程序92713

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

运维那些事儿|2023年,运维还有出路吗?

作为一名运维,不知道你有没有这样的感受。 觉得自己的工作没什么成长空间。每天装个系统、跑个机房、跑个脚本,忙来忙去也没忙出来什么名堂,含金量低不说,薪资也一直没见涨,所以你开始陷入迷茫,会疑惑&…

第二证券:机构策略:大盘有望继续走出震荡攀升走势

3053点上方途径压力较为明显,短期内打破3053点上方途径需求量能的不断释放,周三两市成交量再度打破万亿,这为后市向上打破奠定了基础,短线大盘打破前期3053点上方途径难以一蹴即至,但先行目标科创100、国证2000现已光复…

【Linux C IO多路复用】多用户聊天系统

目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中,IO多路复用是一种机制,它允许一个进程能够监视多个文件描述符(sockets、pipes等)的可读、可写和异常等事件。这样&#xf…

基于RTLS的资产追踪

第1章 什么是资产追踪? 资产跟踪使最终用户能够监控和管理物理对象,无论是在配送中心、制造工厂、仓库还是医疗保健环境中,仅举几个可能的场景。 资产跟踪通常由硬件和软件组成,旨在报告物理对象的状态,特别强调位置…

目标检测标注的时代已经过去了?

在快速发展的机器学习领域,有一个方面一直保持不变:繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割,长期以来人工标记的数据集一直是监督学习的基础。 然而,由于一个创新性的工具 AutoDistill,这…

Kakao账号注册全流程,如何Kakao多开?

Kakao是目前韩国地区最流行的通讯生活服务软件,相当于我们国内的微信,如果您的业务正准备或者正在进军这个区域,那么少不了需要注册并使用这个平台,甚至需要Kakao多开(多账号同时管理与使用),本…

C# OpenCvSharp 通过特征点匹配图片

SIFT匹配 SURF匹配 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; using static System.Net…

Presentation Prompter 5.4.2(mac屏幕提词器)

Presentation Prompter是一款演讲辅助屏幕提词器软件,旨在帮助演讲者在公共演讲、主持活动或录制视频时更加流畅地进行演讲。以下是Presentation Prompter的一些特色功能: 提供滚动或分页显示:可以将演讲稿以滚动或分页的形式显示在屏幕上&a…

奇安信360天擎getsimilarlist存在SQL注入漏洞

奇安信360天擎getsimilarlist存在SQL注入漏洞 一、产品描述二、漏洞描述三、漏洞复现1.手动复现2.自动化复现①nulei扫描yaml ②小龙POC检测工具下载地址 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的…

Studio One6最新中文特别版下载安装教程

PreSonus Studio One是PreSonus出品的一款功能强大的音乐创作软件。主要为用户提供音乐创作、录音、编辑、制作等功能。它可以让你创造音乐,无限的轨道,无限的MIDI和乐器轨道,虚拟乐器和效果通道,这些都是强大和完美的。在Studio …

sprinboot使用自定义注解切面 aop aspectj

sprinboot使用自定义注解切面 主要依赖定义注解接口定义切面使用注解打印切面获取参数 主要依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--切面依赖…

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测实战专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读。其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的内容&#xff0c;其中的实战案例不仅有简单的模型类似于机器…

STM32F407-Discovery的硬件FPU

本文基于STM32 HAL 库版本&#xff1a;STM32Cube_FW_F4_V1.27.0 1. STM32F407的FPU简介 FPU&#xff1a;Float Point Unit&#xff0c;也就是浮点运算单元。如果是定点 CPU&#xff08;没有 FPU 的 CPU&#xff09;计算浮点数&#xff0c;则按照 IEEE-754 标准&#xff0c;完…

UltraEdit v22.0.0.19(高级文本编辑器)

UltraEdit是一款多功能文本编辑器&#xff0c;该软件功能强大&#xff0c;界面友好&#xff0c;使用方便&#xff0c;支持语法高亮、代码折叠、宏等高级功能&#xff0c;适用于编辑文本、十六进制、ASCII码等多种类型的文件。 UltraEdit v22.0.0.19(高级文本编辑器) UltraEd…

硬盘有未分配空间C盘扩展卷却显示灰色不能扩展

买的惠普暗影精灵9新电脑&#xff0c;512G硬盘&#xff0c;回来后我寻思把盘分成三个盘&#xff0c;没注意点到哪了发现C盘就剩下了10G还有200多G未分配的空间&#xff0c;但C盘却无法扩展卷&#xff08;如下图&#xff09;。问了之前一个老哥后才知道是因为C盘和未分配磁盘直接…

ASO优化之如何进行ios和Android关键词研究1

应用商店优化包含许多不同子领域&#xff0c;其中之一就是关键词研究。适当的关键词研究会将应用带入应用程序商店的搜索结果中&#xff0c;并且搜索排名会产生免费的自然下载。 1、准备关键词研究。 为了让研究打下坚实的基础&#xff0c;需要创建一个框架。拿一张纸或制作一…

Vue3 + Naive-ui Data Table 分页页码显示不全

当使用naive-ui 表格并且使用分页组件的时候 需要增加 remote

一篇文章带你全面了解智能地面水处理一体机

一、智能地面水处理一体机 1、设备外壳常规尺寸有&#xff1a;1630*760*560&#xff08;mm&#xff09;&#xff1b;1630*900*560&#xff08;mm&#xff09; 2、外壳有不锈钢、碳钢材质 二、产品构成&#xff08;电气控制柜雨水过滤、消毒处理机&#xff09; 1. 上半部为雨…

如何爬取 python 进行多线程跑数据的内容

下是一个使用 Rust 编写的爬虫程序&#xff0c;用于爬取 python 进行多线程跑数据的内容。这个爬虫使用代理信息进行网络请求&#xff0c;并使用了 Rust 的 async-std 库进行异步编程。 use async_std::net::{TcpStream, TcpListener}; use async_std::io::{BufReader, BufWri…