分布式事物XA、BASE、TCC、SAGA、AT

分布式事务——Seata

一、Seata的架构:

1、什么是Seata:

它是一款分布式事务解决方案。官网查看:Seata

2.执行过程

在分布式事务中,会有一个入口方法去调用各个微服务,每一个微服务都有一个分支事务,因此调用了多少个微服务,全局事务就有多少个分支事务,TM代理这个入口方法,因此就定义了全局事务的范围

当入口方法被执行时,TM会先拦截这个方法的执行会先想TC发送一个请求,注册这个全局事务(开启全局事务请求),然后既可以开始执行这个入口的业务逻辑了,开始调用每一个微服务。到了微服务里面,每个分支事务就开始执行,这个时候RM就会代理分支业务在分支业务执行之前向TC注册分支事务,然后开始执行分支业务。在执行完成后,有RM向TC报告分支事务的状态。

因此,TC就知道了所有的分支事务的状态,然后等到全部分支业务执行完成TM向TC发送全局事务状态的时候TC就会检查分支事务的状态,如果都成功,就让各个分支事务都去提交,如果失败就让它们都回滚

二、部署TC服务,微服务集成Seata:

在上图中可以知道,TM和RM其实是对业务方法的代理和管理,而TC是脱离业务之外的一个服务,由它去协调TM和RM,协调全局事务和分支事务。

三、XA模式:

1、认识:

XA规范是分布式事务处理标准,它描述了全局的TM和局部的RM之间的接口,几乎所有的主流的数据库都对XA规范提供了支持;

2、执行原理:

XA将分布式事务分为两个阶段,一个是准备阶段,一个是执行阶段

准备阶段: 事务协调者会向事务参与者RM发送一个请求,这里的RM其实是由数据库实现的,所以可以认为RM就是数据库。让数据库去执行事务,但执行完不要提交,而是把结果告知事务协调者

执行阶段: 事务协调者根据结果,通知RM回滚或者提交事务。


3、Seata的XA模式:

TM是分布式事务的入口,分别调用分支事务。

第一阶段:准备阶段

1.1-->1.2-->1.3-->1.4-->1.5

TM入口,向TC注册全局事务-->TM调用分支事务RM-->分支事务注册到TC-->RM调用执行分支业务sql-->RM报告给TC分支事务执行但未提交后状态

第二阶段:执行阶段

2.1-->2.2-->2.3

TM向TC发送事务状态(比如Commit),-->TC 检查各分支RM报告的状态-->都成功那就让各分支事务Commit,如果有一个失败,都回滚

4、总结:

优点:
这是一种强一致性的解决方案,因为每一个微服务都是基于各自的事务的,各自的事务是满足ACID的,而且等到大家都执行完了且都成功了才提交,所以全局事务是满足ACID的。

实现比较简单,因为很多数据库都实现了这种模式,使用Seata的XA模式只需要简单的封装上TM。

缺点:
第一阶段不提交,等到第二阶段再提交,但是等的过程中要占用数据库锁,如果一个分布式事务中跨越了很多个分支事务,则可能造成很多资源的浪费,使得别的请求无法访问,降低了可用性

依赖于数据库,对于如果有的数据库没有实现这种模式,则无法使用这个模式来实现分布式事务

5、实现:


四、TCC模式:

1、模式原理:

TCC的模式主要体现在分支服务的内部


2、优缺点:

幂等是一个数学与计算机科学概念。

  • 在数学中,幂等用函数表达式就是:f(x) = f(f(x))。比如求绝对值的函数,就是幂等的,abs(x) = abs(abs(x))
  • 计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同

什么是幂等设计-CSDN博客


3、案例:

空回滚‌是指在分布式事务中,在没有调用参与方的 Try 方法的情况下,直接调用了二阶段的 Cancel 方法。这种情况通常发生在分布式事务的全局事务开启后,某个参与者分支在执行一阶段(Try)操作时由于宕机或网络异常等原因未能成功执行,但全局事务已经开启并需要推进到终态。此时,系统会调用该参与者的 Cancel 方法进行回滚操作,但由于 Try 方法未执行,这种回滚操作被称为空回滚‌。

空回滚的原因

空回滚的主要原因包括:

  1. 网络异常‌:在分布式系统中,网络异常可能导致某个分支的 Try 方法未能成功执行。
  2. 机器宕机‌:参与事务处理的服务器宕机也会导致 Try 方法未能执行。
  3. 全局事务超时‌:如果全局事务超时,系统会强制进行回滚操作,但由于 Try 方法未执行,导致空回滚。

防止空回滚的解决方案

为了防止空回滚,可以在 Cancel 方法中增加一个事务控制表来记录 Try 方法的执行状态。具体步骤如下:

  1. Try 方法执行时‌:在事务控制表中插入一条记录,表示一阶段执行了。
  2. Cancel 方法执行时‌:读取这条记录。如果记录不存在,说明 Try 方法没有执行,直接返回成功,避免空回滚‌

业务悬挂‌是指在分布式事务处理中,一个事务在执行过程中,由于某些原因导致事务分支在尝试提交或回滚时无法完成操作,从而使事务处于未决状态‌。这种情况通常是由于网络问题、资源锁定冲突、服务宕机等原因造成的‌。

业务悬挂的影响

业务悬挂会导致数据不一致,阻塞后续事务的执行,严重时可能会影响整个系统的正常运行‌1。具体来说,悬挂的事务会长时间占用资源,导致其他事务无法访问这些资源,从而产生阻塞和死锁的问题‌。

业务悬挂的对策

  1. 超时机制‌:设置合理的事务超时时间,超时后自动触发回滚,以避免事务长时间悬挂‌1。
  2. 事务补偿机制‌:实现事务补偿逻辑,当检测到事务悬挂时,可以手动或自动进行事务补偿‌。
  3. 服务监控和告警‌:增强系统的监控能力,对事务悬挂进行实时监控和告警,以便及时发现并处理问题‌

4、新概念:

空回滚:这个时候cancel不能报错,因为如果报错则seata会进行等待,然后再继续执行cancel,进而一直循环等待。


业务悬挂:


五、AT模式:

1、AT模式原理:

AT模式同样是分阶段提交的事务模型,不过弥补了XA模型中资源锁定周期过长的缺陷。


2、AT模式的脏读问题:

虽然AT模式的性能相比XA的性能有所提升,但是它也有自己的缺点:正是以为它执行完sql就直接提交了,在并发的情况下,就可能会出现问题:


3、全局锁:

全局锁:由TC(事务协调者)记录当前正在操作某行数据的事务,该事务持有全局锁,具备执行权。


4、全局锁和XA中事务不提交占用锁资源的区分:

XA中事务不提交,占用的是数据库的锁所有的crud的操作都会被限制
TC上的全局锁只是记录操作某张表的某行的全局事务,是由Seata管理的,对于不是Seata管理的相关事务,依旧可以直接操作数据表。比如由其他业务要修改同张表同行数据的其他字段,这个时候是可以的。

所以全局锁比XA中的锁的粒度要小

如果修改的还是同一个字段,虽然这种情况出现的概率很低,但是AT也有解决方案:因为它保存了两个快照。


5、优缺点:


6、实现:


六、SAGA模式:

1、Soga模式原理:

它是Seata提供的长事务解决方案,分为两个阶段:

  1. 直接提交本地事务;
  2. 如果成功:什么都不做;
  3. 如果失败:通过编写补偿业务来回滚;

2、优缺点:


七、四种模式的对比:

(二)分布式事务——Seata、XA、TCC、AT、SAGA模式_xa tcc saga-CSDN博客

(二)分布式事务——Seata、XA、TCC、AT、SAGA模式 - 姚春辉 - 博客园

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式日志系统设计

一、分布式日志系统定义 分布式日志系统是一种用于收集、存储和分析大规模分布式系统日志的系统。它可以帮助开发人员和系统管理员实时监控和调试系统,提高系统可靠性和可用性,同时也可以用于日志分析和故障排查。 二、简单设计思路 日志收集&#xff…

VSCode设置字体

参考文章:【面向小白】vscode最佳实践(2)—— 字体设置(fira code更纱黑体),这篇文章末尾给了安装字体的链接。 配置的字体还是很好看的。 ‘Fira Code Retina’, ‘Sarasa Mono Sc’ 需要注意的一个点&am…

leaflet 双屏对比

本章主要讲的是leaflet的双屏对比,本文参考了插件:Leaflet.Sync,我这里对原有的文件进行了重写,去掉了一部分不需要的内容,增加了flyTo和panTo方法,新的方法,如果需要可以自行下载资源。 目录 …

什么是语义空间?

一、概念 今天我们来聊一聊一个比较抽象的概念——语义空间。语义空间(Semantic Space)是自然语言处理(NLP)领域中一个重要的概念,在语义空间中,文本中的语义信息通过数学的方式来表示和处理。语义空间是一…

Linux系统nginx版本升级

最近公司漏扫有涉及到需要升级nginx的部分, 以下是一些总结经验 检查当前nginx版本 执行命令: nginx -V 如果没有设置环境变量则需要进入到nginx目录sbin目录下执行: ./nginx -V 下载最新版nginx nginx下载地址: https://nginx.org/en/download.html 1)选择稳定版本 wget h…

如何高效的向AI大模型提问? - 提示工程Prompt Engineering

大模型的输入,决定了大模型的输出,所以一个符合要求的提问Prompt起到关键作用。 以下是关于提示工程Prompt Engineering主要方法的详细表格,包括每种方法的优点、缺点、应用场景以及具体示例: 主要方法优点缺点应用场景示例明确性…

QT 多级嵌套结构体,遍历成员--半自动。<模板+宏定义>QTreeWidget树结构显示

Qt的QTreeWidget来显示嵌套结构体的成员&#xff0c;并以树形结构展示。 #include <QApplication> #include <QTreeWidget> #include <QTreeWidgetItem> #include <QString> #include <cstdint>// 假设这些是你的结构体定义 struct BaseMeterPa…

鸿蒙实现数据管理

目录&#xff1a; 1、鸿蒙实现数据管理的三种方式2、用户首选项3、键值型数据管理3.1、获取KVManager实例&#xff0c;用于管理数据库对象3.2、创建并获取键值数据库3.3、调用put()方法向键值数据库中插入数据3.4、调用get()方法获取指定键的值3.5、调用delete()方法删除指定键…

linux 下硬盘挂载c

1. 检查硬盘的文件系统类型 确保你所尝试挂载的硬盘 /dev/vdb 上已经有一个有效的文件系统。你可以用 lsblk -f 令查看硬盘的文件系统类型。 lsblk -f2. 检查挂载命令的语法 硬盘已经格式化为 ext4 sudo mount -t ext4 /dev/vdb /data 确保你在挂载时没有指定错误的文件系统…

1.网络知识-IP与子网掩码的关系及计算实例

IP与子网掩码 说实话&#xff0c;之前没有注意过&#xff0c;今天我打开自己的办公地电脑&#xff0c;看到我的网络配置如下&#xff1a; 我看到我的子网掩码是255.255.254.0&#xff0c;我就奇怪了&#xff0c;我经常见到的子网掩码都是255.255.255.0啊&#xff1f;难道公司配…

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…

基于PHP课堂签到系统的设计与实现

摘 要 随着教育业的迅速发展和学生人数的不断增加&#xff0c;导致在班级登记制度中传统的“点到”方式不能适应学校的实际需要。从而需要设计一个好的课堂签到系统将会对课堂签到管理工作带来事半功倍的效果。文章着重介绍了基于实践应用的班级签到系统的开发流程&#xff0c…

Qt Designer,仿作一个ui界面的练习(一):界面的基本布局

初学不要太复杂&#xff0c;先做一个结构简单的&#xff0c;大致规划一下功能分区&#xff0c;绘制草图&#xff1a; 最终的效果&#xff1a; 界面主要由顶边栏、侧边栏、内容区构成。顶边栏左边是logo&#xff0c;右边是时钟显示。侧边栏最上边是切换按钮&#xff0c;用以动画…

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…

C#开发-集合使用和技巧(十)Union用法-并集

在 C# 中&#xff0c;IEnumerable 的 Union 方法用于返回两个序列的并集。Union 方法会去除重复的元素&#xff0c;确保结果集中每个元素都是唯一的。以下是 Union 方法的基本用法&#xff1a; 基本语法 public static IEnumerable<TSource> Union<TSource>(this…

Unity集成Wwise并进行开发

1. 背景 项目要接入WWise&#xff0c;学习一下 1.1 与Unity自带音频系统的区别 Unity有自己的原生音乐功能&#xff1a;AduioSound。但是这个功能较为简单&#xff0c;对于音效开发人员来说并不是很友好。在一些大型的游戏中&#xff0c;音效会接入Wwise这个软件。音效开发者…

如何绕过IP禁令

网站、游戏和应用程序可以屏蔽特定IP地址&#xff0c;从而阻止使用该IP地址的任何人访问其服务。这称为IP禁令。管理员可以出于多种原因&#xff08;例如发出过多请求或可疑活动&#xff09;屏蔽IP地址。但是&#xff0c;这些禁令会使收集数据或访问在线内容变得更加困难。 一…

Oracle EBS FA 如何打开关闭的资产会计期间?

用户“运行折旧”,误勾选为“关闭期间”,还有一部分资产还需要操作报废和调整,希望后台打开关闭的资产会计期 系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.9 解决方案 由官方提供SQL脚本代码如下: /*rollback120.sql - for Release 12.X only(based on r…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…

部署GitLab服务器

文章目录 环境准备GitLab部署GitLab服务器GitLab中主要的概念客户端上传代码到gitlab服务器CI-CD概述软件程序上线流程安装Jenkins服务器 配置jenkins软件版本管理配置jenkins访问gitlab远程仓库下载到子目录部署代码到web服务器自动化部署流程 配置共享服务器配置jenkins把git…