【微服务】8、分布式事务 ( XA 和 AT )
文章目录
- 利用Seata解决分布式事务问题(XA模式)
- AT模式
- 1. AT模式原理引入
- 2. AT模式执行流程与XA模式对比
- 3. AT模式性能优势及潜在问题
- 4. AT模式数据一致性解决方案
- 5. AT模式一阶段操作总结
- 6. AT模式二阶段操作分析
- 7. AT模式整体特点
- 8. AT模式与XA模式对比
- 9. 业务选择模式的依据
利用Seata解决分布式事务问题(XA模式)

- XA模式原理
- 基于XA规范:XA规范是X/Open组织DTP标准中的一套规范,描述了全局事务管理器(TM)、局部资源管理器(RM)与事务协调者(TC)交互接口。
- 运行原理(两阶段提交)
- 一阶段:请求进入全局事务方法,TM向TC注册全局事务,然后执行内部业务逻辑调用微服务(分支事务)。分支事务的RM拦截数据库操作,先向TC注册分支事务,执行业务SQL但不提交,执行完报告状态。
- 二阶段:所有分支执行完,TM通知TC事务结束,TC检查分支事务状态,若都成功则通知分支提交,否则通知回滚,RM完成相应动作。
- XA模式优缺点
- 优点:解决分布式事务问题,确保全局事务ACID特性,实现简单,无代码侵入,常用关系数据库大多支持。
- 缺点:一阶段锁定数据库资源,等待二阶段释放,性能差影响其他事务;依赖关系数据库,若数据库不支持则无法使用。

-
XA模式使用方法及测试

- 测试过程
- 修改Seata配置并标记事务入口,重启相关服务。
- 准备测试数据(如清空购物车、设置商品库存、清空订单等),登录后添加商品到购物车并下单,修改商品库存使下单时库存不足。
- 执行下单操作,查看日志和数据库验证。下单失败后,日志显示分支事务二阶段执行回滚,数据库数据证明回滚成功,分布式事务问题解决。
- 测试过程
分布式事务 more…
AT模式
1. AT模式原理引入
- 背景与目的:AT模式旨在解决XA模式中资源锁定周期过长导致的性能问题,同时确保数据一致性。它是一种分阶段提交的事务模型,通过优化事务提交时机和引入快照机制来提升性能。
2. AT模式执行流程与XA模式对比
- 前期相同点:在全局事务启动时,TM向TC注册全局事务,全局事务方法执行时调用微服务,微服务内RM注册分支事务到TC,这部分流程与XA模式相同。
- 后期不同点:AT模式在执行完业务SQL后立即提交事务,释放资源,而XA模式需等待所有分支执行完后统一提交或回滚,导致资源锁定时间长,性能差。
AT模式在执行完业务SQL后立即提交事务

3. AT模式性能优势及潜在问题
- 性能提升:AT模式通过提前提交事务,避免了资源长时间锁定,提高了系统性能和资源利用率,各分支事务无需相互等待,可并发执行。
- 潜在问题:事务直接提交后,若后续出现问题,传统的数据库事务回滚机制无法使用,需要特殊机制保证数据一致性。
4. AT模式数据一致性解决方案
- 快照机制原理:在执行业务SQL前生成快照,保存数据库原始数据。若后续事务失败,可利用快照恢复数据,确保数据一致性。
- 事务提交与快照关系:先生成快照,再执行业务SQL并提交事务,最后报告事务状态给TC,一阶段结束。
在执行业务SQL前生成快照
5. AT模式一阶段操作总结
- 概述:注册分支事务、记录数据快照、执行业务SQL并提交事务、报告事务状态。与XA模式相比,AT模式在修改数据前生成快照且立即提交事务,提升性能。
6. AT模式二阶段操作分析
- 触发条件:所有分支执行完后,TM向TC报告事务结束,TC检查分支事务状态,进入二阶段。
- 成功情况处理:若所有分支成功,由于一阶段已提交,只需删除快照或undo log,数据已一致,操作简单快速,提升二阶段性能。
- 失败情况处理:若有分支失败,虽事务已提交,但可基于快照数据恢复,如将删除的购物车数据写回,保证最终事务一致性。
7. AT模式整体特点
- 性能优势:一阶段各自提交事务,不锁定资源,性能好。
- 数据一致性:可能出现短暂不一致,但通过二阶段快照恢复可达到最终一致。不一致状态持续时间短,故障概率低,多数互联网业务可接受。
8. AT模式与XA模式对比
- 资源锁定与性能:XA模式一阶段锁定资源,性能差;AT模式不锁定资源,性能好。
- 回滚方式:XA模式依赖数据库回滚事务;AT模式利用数据快照手动回滚。
- 一致性:XA模式是强一致事务;AT模式是最终一致事务,可能短暂不一致。
AT 可能短暂不一致
9. 业务选择模式的依据
- 性能与一致性权衡:
- 侧重性能且允许短暂不一致,选择AT模式,适用于多数互联网业务;
- 对一致性要求极高,选择XA模式,但需牺牲性能。
相关文章:
【微服务】8、分布式事务 ( XA 和 AT )
文章目录 利用Seata解决分布式事务问题(XA模式)AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…...
CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞
漏洞描述 GiveWP 插件中发现了一个严重漏洞,该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777,CVSS 评分为 9.8,表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装,为全球无数捐赠平…...
TypeScript Jest 单元测试 搭建
NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…...
基于 SSH 的任务调度系统
文末附有完整项目代码 在当今科技飞速发展的时代,任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH(SpringStruts2Hibernate)的任务调度系统的设计与实现。 一、系统概述 本系统旨在改变传统人工任务调度方式,通过计算…...
filestream安装使用全套+filebeat的模块用法
1 filestream介绍 官方宣布:输入类型为log在filebeat7.16版本已经弃用了 Filestream 是 Filebeat 中的一种 输入类型(Input),用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入(Input)设…...
java项目之房屋租赁系统源码(springboot+mysql+vue)
项目简介 房屋租赁系统实现了以下功能: 房屋租赁系统的主要使用者分为: 系统管理:个人中心、房屋信息管理、预约看房管理、合同信息管理、房屋报修管理、维修处理管理、房屋评价管理等模块的查看及相应操作; 房屋信息管理&#…...
sap mm学习笔记
1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...
代码随想录_链表
代码随想录02 链表 203.移除链表元素 力扣题目链接(opens new window) 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:he…...
EF Code 并发控制
【悲观控制】 不推荐用,EF Core 没有封装悲观并发控制的使用,需要使用原生Sql来使用悲观并发控制 一般使用行锁、表锁等排他锁对资源进行锁定,同时只有一个使用者操作被锁定的资源 拿sql server举例,可以使用表所、或者行所解决…...
ceph fs status 输出详解
ceph fs status 命令用于显示 Ceph 文件系统的状态信息,其中各列的含义如下: RANK:元数据服务器(MDS)的等级或标识符。 STATE:MDS 的当前状态,例如 active(活跃)、stan…...
FFmpeg Muxer HLS
使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法: ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…...
如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦
一、问题背景 自OceanBase 4.3.0版本起,支持了列存引擎,允许表和索引以行存、纯列存或行列冗余的形式创建,且这些存储方式可以自由组合。除了使用 show create table命令来查看表和索引的存储类型外,也有用户询问如何通过SQL语句…...
回归预测 | MATLAB实GRU多输入单输出回归预测
回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…...
【OpenGL/Assimp】渲染模型、半透明材质与封装光源
文章目录 渲染成果Assimp库准备:Mesh类修改:透明贴图使用:光源封装:使用方式在如下测试环境中: 渲染成果 Assimp库准备: 从GitHub拉取源码,根据网络教程,借助CMake生成VS工程项目&a…...
pandas与sql对应关系【帮助sql使用者快速上手pandas】
本页旨在提供一些如何使用pandas执行各种SQL操作的示例,来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…...
Linux WEB漏洞
定义:Linux Web 漏洞是指在基于 Linux 操作系统的 Web 应用程序、Web 服务器软件或者相关的网络服务配置中存在的安全弱点。这些漏洞可能导致攻击者未经授权访问敏感信息、篡改网页内容、执行恶意代码,甚至完全控制服务器。 常见类型及原理 SQL 注入漏…...
音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流
通过FFmpeg命令可以将一个媒体文件转推RTP: ffmpeg -re -stream_loop -1 -i input.mp4 -c:v copy -an -f rtp rtp://192.168.0.102:5400 但是通过ffplay尝试播放上述产生的RTP流时会报错:“Unable to receive RTP payload type 96 without an SDP file …...
大语言模型预训练、微调、RLHF
转发,如有侵权,请联系删除: 1.【LLM】3:从零开始训练大语言模型(预训练、微调、RLHF) 2.老婆饼里没有老婆,RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…...
vue3后台系统动态路由实现
动态路由的流程:用户登录之后拿到用户信息和token,再去请求后端给的动态路由表,前端处理路由格式为vue路由格式。 1)拿到用户信息里面的角色之后再去请求路由表,返回的路由为tree格式 后端返回路由如下: …...
解决idea中无法拖动tab标签页的问题
1、按 Ctrl Alt S 打开设置,找到路径 File | Settings | Appearance & Behavior | Appearance 2、去掉勾选 Drag-and-drop with Alt pressed only 即可...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
