快速理解分布式事务Seate基本知识

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。

一.Seate的三大角色

在 Seata 的架构中,一共有三个角色:

1.TC(Transaction Coordinator)事务协调者或回滚:维护全局和分支事务的状态,驱动全局事务提交;(它的作用是代表是中间人,seate是用来处理分布式事务的,也就代表它会存在多个分支事务,多个分支事务需要统一处理,就需要一个中间者来进行协调)

2.TM(Transaction Manager)事务管理器:定义全局事务的范围,开始全局事务、提交或回衮全同事务;(如果要调用某个微服务的方法,当调用微服务的时候,就会开启全局事务,那么在它的结尾就会结束全局事务,这整个过程就代表是全局事务)

3.RM(Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。(在全局事务中,会调用许多其他微服务,它们都有自己的本地事务,这些就被叫做分支事务,命令为RM,当分支事务处理完以后就会把状态汇报给TC)

其中,TC 为单独部署的 Server 服务端,TM 和RM 为嵌入到应用中的 Client 客户端

二.XA模型

XA 模型是指基于 XA 分布式事务协议 的分布式事务管理方式。

XA 是一种标准的分布式事务协议,定义了如何在多个资源(如数据库)之间协调事务的提交和回滚,确保跨数据库的事务一致性。

流程如下:

首先,当调用某个方法后,就会触发TM开启全局事务,然后会汇报给TC,TC会给它返回一个事务ID,这个事务ID在开启分支的时候会用到,当触发了分支事务的时候,就会先往TC里面注册分支事务,并且会代码事务ID,代表当前的分支事务是属于该全局事务的,其他微服务也会同样操作,也就代表当前事务下有哪些分支事务,TC是可以知道的,然后会执行业务sql,此时该sql不会立马提交,而是会将这部分的数据库的资源进行锁定,执行完成后,就会汇报自己的事务状态给TC(处理正常还是异常),当所有微服务都汇报给TC以后,整个全局事务就已经处理完成了,那么就会结束全局事务,触发TC的检查,当TC检查所有事务状态的时候,如果所有状态都是正常,就会通知所有事务进行提交,但凡有一个状态不正常,就会通知所有事务进行回滚,此时每个微服务所对应的数据库资源才会进行释放,也就是二阶段的所有事务完成后,才会释放数据库资源。

优缺点:

优点:

1.事务的强一致性,满足ACID原则;

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

缺点:

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

2.依赖 关系型数据库 实现事务。

三.AT模型

前面流程和XA模型一样,不同点在于执行sql以后它会立即提交,只是在提交前会进行一个备份,将当前的快照存储在undo_log里面,这个undo_log不是mysql中的日志,而是seate中创建的一个表,后续的流程也和XA模型一样,不同点在于如果TC发送提交事务的操作,就会去删除undo_log表对应的快照,如果分支收到回滚操作,就会去读取之前的快照开进行回滚数据,这就是AT模型的处理过程。

AT相对于XA模型最大的区别是,它的sql执行是立即提交的,它会等到TC下达提交或者回滚的时候才会释放这个资源,因此AT模型相对于XA模型,它处理的性能是相对较高的

但是AT有一个问题:如果sql提交后,当前全局事务处理事件较长,其他全局事务也来进行处理的时候,就可能拿到一个脏数据,如下:

解决:

可以通过引入全局锁,来判断DB的资源是否被释放,只有被释放的DB资源其他全局锁才能进行资源的获取,这样就可以解决AT模式下的脏读问题,如下:

四.总结

TCC和SAGE这么就不做降级了,《彻底理解分布式事务的各种解决方案》对这两种做了详细解释,需要了解的可以查看一下。

XAATTCCSAGA
一致性强一致弱一致弱一致最终一致
隔离性完全隔离基于全局锁隔离基于资源预留隔离无隔离
代码侵入有,需要编写三个接口有,需要编写状态机和补偿业务
性能非常好非常好
场景对一致性、隔离性有高要求的业务基于关系型数据库的大多数分布式场景都可以

1.对事务要求较高的事务;

2.有非关系型数据库要产于的事务。

1.业务流程长、业务流程多;

2.参与者包含其他公司或遗留系统服务,无法提供TCC模式的要求。

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

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

相关文章

前端项目初始化搭建(二)

一、使用 Vite 创建 Vue 3 TypeScript 项目 PS E:\web\cursor-project\web> npm create vitelatest yf-blog -- --template vue-ts> npx > create-vite yf-blog --template vue-tsScaffolding project in E:\web\cursor-project\web\yf-blog...Done. Now run:cd yf-…

SQL最佳实践:避免使用COUNT=0

如果你遇到类似下面的 SQL 查询: SELECT * FROM customer c WHERE 0 (SELECT COUNT(*)FROM orders oWHERE o.customer_id c.customer_id);意味着有人没有遵循 SQL 最佳实践。该语句的作用是查找没有下过订单的客户,其中子查询使用了 COUNT 函数统计客…

多模态大模型(二)——用Transformer Encoder和Decoder的方法(BLIP、CoCa、BEiTv3)

文章目录 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 理解、生成我都要,一个很有效的、根据图片生成caption的工具1. BLIP的研究动机2. BLIP的模型结构3. CapFilt Model4. BLIP的训练过程 CoCa: C…

【理想汽车中科院】基于模仿学习的端到端自动驾驶数据缩放规律

论文: https://arxiv.org/pdf/2412.02689 项目: https://github.com/ucaszyp/Driving-Scaling-Law 0. 摘要 端到端自动驾驶范式因其可扩展性而最近吸引了大量关注。然而,现有方法受到现实世界数据规模有限的制约,这阻碍了对端到端自动驾驶相关扩展规律…

【工具介绍】可以批量查看LableMe标注的图像文件信息~

在图像处理和计算机视觉领域,LabelMe是一个广泛使用的图像标注工具,它帮助我们对图像中的物体进行精确的标注。但是,当标注完成后,我们常常需要一个工具来批量查看这些标注信息。 今天,我要介绍的这款exe程序&#xf…

链式栈的实现及其应用

目录 一、链式栈结构模型 二、链式栈的实现 2.1创建 2.2压栈 2.3出栈 2.4判断栈是否为空 2.5查看栈顶 2.6释放栈 三、应用 链式栈实际上就是基于链表,压栈和弹栈可分别看作头插和头删,链表尾部就是栈底,头指针就是栈顶指针 一、链式…

day12 接口测试 ——入门→精通→实战(1)

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、接口测试分类 1.1 内部接口: 1.2 外部接口: 2、目前接口架构设计 2.1、基于SOAP架构, 2.2、基于RPC架构, 2.3、基于RestFul架构, 2.3.1…

程序的调试

一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程 目录 前言 一、什么是调试? 二、调试 1.调试是什么 2.基本步骤 三、调试注意事项 1.怎么写出易于调试的代码 assert(断言) const 2.常见错误 总结 前言 主要是怎么调试,调…

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案 3、工程详细设计方案工程设计原理框图用户数据发送模块基于GTP高速接口的数据回环传输架构GTP IP 简介GTP 基本结构GTP 发送和接收…

如何快速切换更新电脑网络的ip地址

1.ADSL拨号更换IP地址 这种更换 IP地址的方法其实就是我们平时使用的宽带拨号,每次拨号得到的IP地址都不同,但是这种方法无法使用于光纤宽带,并且使用这种方法更换的IP地址,一般只会变更最后一个号段,前三个号段的数字…

25.DDD数量关系

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 关系型数据库的数量关系领域模型的数量关系实现聚合数量关系聚合内聚合间具体说明代码 数量关系是本质吗?领域对象之…

每天40分玩转Django:Django视图和URL

Django视图和URL 一、课程概述 学习项目具体内容预计用时视图基础函数视图、类视图、视图装饰器90分钟URL配置URL模式、路由系统、命名URL60分钟请求处理请求对象、响应对象、中间件90分钟 二、视图基础 2.1 函数视图 # blog/views.py from django.shortcuts import render…

SAS - Subtractive Port

在SAS(串行连接SCSI,Serial Attached SCSI)协议中,subtractive port 是一种特殊类型的端口,主要用于设备间的路由功能。它的作用是在路径选择过程中充当默认路径,以处理未明确指定路径的请求。以下是它的定…

vue实现文件流形式的导出下载

文章目录 Vue 项目中下载返回的文件流操作步骤一、使用 Axios 请求文件流数据二、设置响应类型为 ‘blob’三、创建下载链接并触发下载四、在 Vue 组件中集成下载功能五、解释与实例说明1、使用 Axios 请求文件流数据:设置响应类型为 blob:创建下载链接并…

用Keytool和OpenSSL生成和签发数字证书

一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中…

语言模型(序列模型)

终于快要毕业了,乘着还在还在研究室,把最后一章sequence模型也学完吧。 Sequence Model 一:基础知识1:符号的定义2:词典(Vocabulary) 与编码(Encoding) 二:RNN(Recurrent Neural Networks) 循环神经网络1&…

RK3568(六)——led设备驱动(GPIO子系统)

修改设备树文件 先关闭心跳灯功能,也就是在图 10.4.1.2 中第 167 行添加 status 改为 disabled,也就是禁止 work 这个节点,那么禁止心跳灯功能。 我们后面需要禁止哪个功能,只需要将其 status 属性改为 disabled 就可以了。 gpi…

【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式

llama.cpp的主要目标是在本地和云端的各种硬件上以最小的设置和最先进的性能实现LLM推理。是一个专为大型语言模型(LLM)设计的高性能推理框架,完全使用C和C编写,没有外部依赖,这使得它可以很容易地被移植到不同的操作系…

npm : 无法加载文件 D:\nodejs\npm.ps1

问题描述 npm run serve 启动一个Vue项目,报错如下: npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/? LinkID135170 中的 about_Execution_Policies。…

【算法】EWMA指数加权移动平均绘制平滑曲线

EWMA(Exponentially Weighted Moving Average,指数加权移动平均)是一种常用的时间序列平滑技术,特别适用于对过去数据给予不同的权重。以下是对EWMA算法的详细介绍: 一、核心思想 EWMA算法的核心思想是通过指数衰减来…