分布式事务Seata-AT模式

news2024/12/23 6:26:07

承接上文分布式事务-二阶段提交

Seata是开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务,包含AT、TCC、 SAGA、XA四种事务模式,为用户打造一站式的分布式解决方案。

Seata提供的4种事务模式都是由2PC(二阶段提交)转换过来的。

在介绍该流程之前,先了解下3个Seata角色,

  • TC 事务协调者
    TC是Seata服务端,维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • TM 事务管理者
    定义全局事务的范围,开始全局事务,提交或回滚全局事务。
  • RM 资源管理器
    事务参与者,管理分支事务,与TC交互以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

在事务开始之前,TM和所有的RM都需要先注册到TC。

注册以后,用户发起请求到TM(business),TM开启全局事务和进行远程调用库存(库存减1)和订单服务(加1),再由订单远程调用用户服务(加积分)。

TM是整个事务的入口,全局事务或分布式事务的开启者。

TC就是Seata Server,TC是统筹者,所有的分支事务都需要注册到TC上。

注册之后,由事务发起者来发送对应的请求,告诉每个执行者开始执行业务,无论成功或失败,都会发送消息通知TC,最后由TC告诉所有RM是提交还是回滚。

Seata配置Nacos作为注册中心和配置中心

Seata集群存储事务的数据,通过db数据库的方式存储数据。

Nacos可以完成对Seata集群的负载均衡。

用Seata管理分布式事务,通过TC来统筹RM,事务的参与者RM是Seata的客户端,TC是Server端,Server和Client端要注册到同一个namespace中。

Seata AT模式是二阶段提交模式的演变,是无侵入的分布式事务解决方案,在AT模式下,一阶段用户只需要关注自己的业务sql,Seata框架会自动生成事务的第二阶段进行提交或回滚操作。

  • 一阶段:业务数据和回滚的日志记录在同一个本地事务中提交,然后释放本地锁和连接资源。
  • 二阶段:提交或回滚(回滚通过一阶段的回滚日志进行反向补偿)。

一阶段,会拦截业务sql(比如订单先调用库存(库存减1),再生成订单),Seata解析sql语句,同时要找到当前要更新的业务数据,比如库存减1,在数据被更新前,保存undolog日志,再执行业务sql,更新之后的数据再保存到redolog日志。

如果一阶段某个服务的本地事务没有通过,就全局回滚,让当前所有数据回滚到开始之前的状态,否则就提交全局事务。

回滚的时候所用到的数据就在undolog,即在数据被正式更新之前所保存下来的原数据作为回滚的依据,通过回滚反向生成sql完成分支事务的回滚,事务结束后会释放所有资源和删除所有日志。

AT模式详细分解

订单服务执行本地事务订单+1,库存服务执行本地事务库存减1。

TM发起全局事务的执行,不同的分支事务需要执行自己的本地事务。

订单服务既是RM又是TM,在订单开启全局事务,远程调用库存服务,又要执行本地事务订单+1。

Order告诉TC我要开始执行分支事务了,Stock也要开始执行分支事务,两个RM开始执行自己的分支事务。

Order注册分支事务,记录undolog,即在真正执行分支事务(本地事务)数据更改之前的数据要记录在undolog中,更改之后的数据要记录在redolog中。

Order开启远程调用Stock,Stock也一样开始注册自己的本地事务,记录更改之前的数据到undolog,记录更改之后的数据到redolog。

2个分支事务执行完之后,需要告诉TC当前这2个事务的执行状态,TC如果收到了2个RM都执行成功的消息,第二阶段就做全局的提交,否则全局回滚。

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

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

相关文章

【C++的内联函数】

文章目录 一、什么是内联函数二、内联函数的优缺点三、使用内联函数的注意事项 一、什么是内联函数 用关键字inline修饰的函数叫做内联函数。 C编译器编译时会自动在被调用的地方展开。 二、内联函数的优缺点 内联函数的优点: 没有函数栈帧创建,提升…

干货分享 | 如何在业余时间学习数据分析?

从社会学背景的数分小白到独揽公司市场部的数据分析,和大家简单分享我的数据分析升级打怪之路。 简单说就是两点【培养数据分析思维】【提升数据分析技能】 思维的培养主要靠书籍和课程 以下是一些对我影响较大的书籍,按照【入门、进阶、高阶】简单做了…

torch.nn.Multiheadattention介绍

初始化参数: class torch.nn.MultiheadAttention(embed_dim, num_heads, dropout0.0, biasTrue, add_bias_kvFalse, add_zero_attnFalse, kdimNone, vdimNone, batch_firstFalse, deviceNone, dtypeNone) 允许模型共同关注来自不同表示子空间的信息。 多头注意力…

C#连接数据库失败,ORA-28040: No matching authentication protocol

C#连接数据库失败 1.原先使用的是oracle11,后来升级数据库到oracle19c,启动程序,数据库连接时报错"ORA-28040: No matching authentication protocol" 2.原因分析:最近服务器数据库版本升级到了19c,网上查了…

【技巧】如何以“只读方式”打开PPT文稿?附两个方法

以“只读方式”打开PPT文稿,可以防止意外修改文稿。今天小编就来介绍一下以“只读方式”打开PPT的两种方法。 方法一:无密码的“只读”模式 1、打开PowerPoint程序,点击菜单中的【文件】选项,再依次点击【打开】-【浏览】。接着在…

FL Studio水果萝卜编曲中文版软件V21版本详细功能介绍

FL Studio十分出色的数字音乐工作软件,其功能大致和Cubase相仿,FL Studio拥有自带的音频插件,并且随着软件的不断更新,使得FL studio不仅仅能够制作电子音乐,同时也能够承担古典、流行等风格的音乐。同时,F…

MySQL:创建数据库,数据表,主键和外键

目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束&…

《编码——隐藏在计算机软硬件背后的语言》精炼——第11章(门)

“The only source of knowledge is experience.” - Albert Einstein 引言 编码是一种处理并表达信息的方式,它包括摩斯电码、盲文、二进制语言等等,当然作为计算机类的经典书籍,这本书简述了计算机中以二进制数为基础的编码方式&#xff0…

5自由度并联机械臂实现搬运功能

1. 功能说明 本文示例将实现R306样机5自由度并联机械臂搬运牛奶到指定地点的功能。该机械臂由1个5自由度并联机械臂和1个单轴丝杠平台构成,机械臂通过并联的方式同时控制同一个端点的运动。其驱动系统采用大扭矩舵机和小扭矩舵机、执行末端为夹持机构。 2. 并联机械…

SEO优化中的外链与反链是什么意思?它们之间有什么区别?

在SEO优化中,外链和反链是两个非常重要的概念。虽然它们听起来很相似,但实际上却有着很大的区别。那么,什么是外链和反链?它们之间有什么区别呢?本文将为您详细介绍。 一、什么是外链 外链,也被称为入站链…

C++---区间DP---环形石子合并(每日一道算法2023.4.24)

注意事项: 本题是"区间dp—石子合并"的扩展题,dp思路完全一样,就不多详细讲了,可以去那篇文章看,这题主要讲一下如何处理环形。 题目: 将 n 堆石子绕圆形操场排放,现要将石子有序地合…

ES的索引结构与算法解析

作者:京东物流 李洪吉 提到ES,大多数爱好者想到的都是搜索引擎,但是明确一点,ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎,还是有明确搜…

DAY03_循环语句

1:for循环结构 来,继续啊,下面我们来学习循环结构语句,循环结构有三种语句,分别是: for循环 while循环 do…while循环 这三种循环可以做相同的事情,当然它们也有小的区别,至于它…

【LeetCode】322. 零钱兑换

322. 零钱兑换(中等) 思路 由于题目提到 「每种硬币的数量是无限的」,所以这道题本质上完全背包问题,我直接使用了空间压缩的写法。dp[j] 表示当前区间在 [0, i]的硬币可以表示成 j 的最小数量。注意,这里把 dp数组初始…

windows安装sqli-labs靶场,两种方式

1、安装phpstudy 官网打不开了,下载地址在这儿https://download.csdn.net/download/weixin_59679023/87711536 双击安装 点自定义安装,选择安装目录,注意目录不要有空格和中文 安装完成启动红框内的两个服务 2、安装sqli靶场 这个包支持ph…

4.23学习周报

文章目录 前言文献阅读摘要简介方法结果结论 时间序列预测学习总结 前言 本周阅读文献《A novel hybrid model for water quality prediction based on synchrosqueezed wavelet transform technique and improved long short-term memory》,文献主要提出一种新型混…

动力节点Springsecurity笔记06-13基于数据库的方法授权

6 密码处理 6.1 为什么要加密? csdn 密码泄露事件 泄露事件经过:https://www.williamlong.info/archives/2933.html 泄露数据分析:https://blog.csdn.net/crazyhacking/article/details/10443849 6.2加密方案 密码加密一般使用散列函数&a…

react-9 函数式写法rsc,配合HOOKS基础钩子函数

函数组件和类组件区别: 1.函数组件中没有this 2.函数组件无需继承 3.函数组件默认没有状态,想要使用组件状态必须通过 HOOK 函数引入 4.函数组件默认没有生命周期函数 5.函数组件的渲染,只需要一次函数调用即可 useState :用…

【react全家桶学习】react中JSX语法规则

目录 JSX的定义 XML的含义 JSX的语法规则 (1)定义类名,用className而不是class (2)如何使用内联样式设置样式 (3)虚拟dom必须只有一个根标签 (4)在react组件中使用变…

谷歌将发布全新搜索引擎,你期待吗?

Google一身自带AI属性的新搜索最首要的目标并非急于取代传统搜索引擎,或者说彻底打败ChatGPT,而是能够用全新的产品说服用户,变得与竞争对手同样“强大、能力出众以及顺应AI潮流”。 对于Google而言,搜索就是命脉。Google每年的收…