当前位置: 首页 > news >正文

【微服务】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模式)

在这里插入图片描述

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

在这里插入图片描述

  1. 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 即可...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...