分布式事务之Seata框架

news2024/11/16 13:26:57

文章目录

  • 一、分布式事务
    • 1.什么是分布式事务
    • 2.分布式事务的思想
  • 二、Seata框架
    • 1.认识Seata
    • 2.事务管理三个重要角色
    • 3.事务模式
    • 4.二阶段提交
    • 5.XA模式
    • 6.AT模式
    • 7.AT模式与XA模式的区别
    • 8. TCC 模式
    • 9.Saga 模式

一、分布式事务

1.什么是分布式事务

传统的单体项目被拆分成多个微服务,一个完整的流程可能涉及到多个服务之间的调用,多个服务的入库操作,为了满足事务的ACID原则,提出了分布式事务。

2.分布式事务的思想

找一个统一的事务协调者,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。大多数的分布式事务框架都是基于这个理论来实现的。

二、Seata框架

1.认识Seata

解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了
https://seata.apache.org/zh-cn/docs/overview/what-is-seata/

2.事务管理三个重要角色

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    在这里插入图片描述
    其中,TM和RM可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来TM和RM就会协助微服务,实现本地分支事务与TC之间交互,实现事务的提交或回滚。
    而TC服务则是事务协调中心,是一个独立的微服务,需要单独部署。

3.事务模式

Seata支持四种不同的分布式事务解决方案:

  • XA
  • TCC
  • AT
  • SAGA

4.二阶段提交

一阶段:

  • 事务协调者通知每个事务参与者执行本地事务
  • 本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁

二阶段:

  • 事务协调者基于一阶段的报告来判断下一步操作
  • 如果一阶段都成功,则通知所有事务参与者,提交事务
  • 如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务

5.XA模式

一阶段不提交sql语句,等二阶段再提交

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

  1. TC检测各分支事务执行状态
  2. 如果都成功,通知所有RM提交事务
  3. 如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

6.AT模式

RM一阶段的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态
    二阶段提交时RM的工作:
  • 删除undo-log即可
    二阶段回滚时RM的工作:
  • 根据undo-log恢复数据到更新前

7.AT模式与XA模式的区别

  1. XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
  2. XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。(undoLog日志)
  3. XA模式强一致;AT模式最终一致

8. TCC 模式

不依赖于底层数据资源的事务支持:

  1. 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
  2. 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
  3. 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

9.Saga 模式

一般用于长事务,它是一种基于失败的设计。

  1. 子事务(或流程),提交是本地事务级别的,没有所谓的全局锁,在长事务流程下,避免了长时间的资源锁定;另外这种流水线的处理模型天然符合阶段式信号处理模型,能发掘出更高的性能和吞吐。
  2. 正向服务和补偿服务都是交给业务开发实现的

请添加图片描述正向服务:当执行到T3事务失败的时候,不断重试T3事务,继续执行T4 …Tn
补偿服务:当执行到T3事务失败的时候,回滚前面的T1、T2、T3事务

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

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

相关文章

七牛云 Miku 快直播,陪你一起看球!

足球,作为全球最受欢迎的运动之一,每一次大赛都是球迷心中的狂欢,每一场比赛都记录着足球历史的精彩。 2000 年,特雷泽盖的金球,照亮了法兰西的足球梦想。 2004 年,查理斯特亚斯的头槌破门,成就…

数字化营销师:企业数字化转型中的关键力量

在当今数字化浪潮席卷全球的时代,企业面临着又新又难的挑战与机遇。数字化转型已成为企业提升竞争力、实现可持续发展的必然选择。而在这一过程中,数字化营销师正以其独特的专业技能和创新思维,发挥着不可或缺的重要作用。蚓链数字化营销系统…

C#——里氏转换详情

里氏转换 里氏转换就是派生类的对象赋值给父类对象,反之则不行 实例 : 先创键一个类然后继承 调用

方案论证项目分析

文章目录 1. 介绍2. 分析2.1. 场景加载2.2. 地形平压2.3. 模型放置2.4. 绘制区域2.5. 查看方案2.6. 数据库的字段2.7. 接口 3. 难点3.1. 调整模型的位置3.2. 旋转 1. 介绍 这是一个涉及Cesium.js(一个用于Web的3D地球和地图的JavaScript库)和前后端交互…

Reqable抓包工具

今天给大家最近一个好用的Api抓包工具,最重要的是它还是中文版本的 电脑 手机 都可以抓 这是官网地址:https://reqable.com/zh-CN/docs/getting-started/ 进入后我们点击【下载】根据自己电脑需求选择对应版本,我的是window10,选…

LLC开关电源开发:如何使用信号发生器与示波器设计环路

如何使用信号发生器与示波器设计环路 一、主回路二、小信号注入三、LLC 数字环路计算书一、主回路 如下图所示为系统整体架构,包括 LLC 主功率线路,采集线路、RC 滤波线路,DSP 运算。DSP 通过采集由差分运放转化而来的输出电压量(一阶 RC 滤除线路杂波),经数字环路产生特…

中国智能驾驶功能体验及技术方案研究报告

◼ 随着高速NOA功能的落地,用户对于高阶智能驾驶功能的认知被打开。2023年,车企在不断优化高速NOA功能体验的同时,也正在争先推动城市NOA功能的落地。掌握并实现全场景辅助驾驶的技术实力,能够帮助车企在未来的市场竞争中占据主动…

表单prop必填验证根据el-radio-group的值来动态绑定

1、radio的值为5时输入框是必填,其余时候是非必填 2、看图 3、代码 data() {return {optForm:{type:,remark:,},rules:{type:[{ required: true,trigger: change,message:该项为必填项}],remark:[]}};},watch: {"optForm.type"(newVal, oldVal) {this.$…

【scrapy】1.scrapy爬虫入门

一、scrapy爬虫框架 Scrapy 框架是一个基于Twisted的一个异步处理爬虫框架,应用范围非常的广泛,常用于数据采集、网络监测,以及自动化测试等。 scrapy框架包括5个主要的组件: Scheduler:事件调度器,它负…

Unix-privesc-check一键检查 Unix 系统(KALI工具系列三十一)

目录 1、KALI LINUX 简介 2、Unix-privesc-check简介 3、使用对象 4、操作实例 4.1 快速扫描 4.2 检测特定列表 4.3 详细模式 4.4 扫描结果解读 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 ,广泛用于网络安全社区。它…

小白篇--如何在本地搭建 go环境

前言 Go语言的优势主要体现在其简洁、高效、并发性能、跨平台支持、强大的社区支持以及在云计算和多核CPU时代的高效算子处理能力。 简洁:Go语言的设计哲学是“少即是多”,其遵循简单和清晰的原则,使得代码简洁明了,易于理解和维…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息,震动了整体…

木材容易发霉怎么办除霉处理方法

木材存放不当就容易出现发霉情况,那么可通过那些方法将木材表面的霉斑除掉呢?经ihaoer防霉人士介绍处理木材发霉处理方法如下: 木材发霉的原因主要包括木材本身的营养物质、环境湿度、温度以及空气流动性等因素。木材中含有蛋白质、淀粉、油类…

SpringBoot优点达项目实战:项目基本配置(二)

SpringBoot优点达项目实战:项目基本配置(二) 文章目录 SpringBoot优点达项目实战:项目基本配置(二)1、项目初始化配置2、MyBatisPlus配置3、Knife配置4、定义统一返回数据结构 1、项目初始化配置 创建appli…

【期末复习】计算机组成原理

海明码 最通俗的海明码计算方法,不需记公式,套步骤即可(可能都不需要理解) https://www.bilibili.com/video/BV1tL4y1h7Fd/ 接上一海明码视频(海明码的纠错) https://www.bilibili.com/video/BV1tf4y1A7NX/…

探索 Screen:一个强大的终端复用工具

在日常的系统管理和开发工作中,我们经常需要同时运行多个终端任务,或者需要在一个终端会话中保持任务的持续运行,即使我们断开了与服务器的连接。这时,screen 命令就成为了一个非常有用的工具。本文将详细介绍 screen 的功能、使用…

二叉树 | Java | LeetCode 235 701 450 做题总结,BST特性、 调整二叉树结构(增+删)

235. 二叉搜索树的最近公共祖先 思路:要利用二叉搜索数的性质。当前遍历节点 cur 的数值大于p q时,说明 p q 的父节点在 cur 的左子树。当前遍历节点 cur 的数值小于p q时,说明 p q 的父节点在 cur 的右子树。当前遍历节点 cur 的数值在 p q…

替代TPS7H1101A-SP抗辐射7V/3A大电流低压差稳压器|具有可并联使用达6A电流

1. 产品特性 ➢ 超低电压输入: 1.5V~7V ➢ 最大输出电流: 3A ➢ 电压精度: 1.25% ➢ 超低压降: 62mV1A(Vout1.8V, 25℃) ➢ 超低噪声: 20.33μVRMS(BW10Hz-100kHz&a…

【Python机器学习】聚类算法的对比与评估——在没有真实值的情况下评估聚类

在实践中,使用诸如ARI之类的指标有一个很大的问题。在应用聚类算法时,通常没有真实值来比较结果。如果我们知道了数据的正确聚类,那么可以使用这一信息构建一个监督模型(比如分类器)。因此,使用类似ARI和NM…

springboot微信点餐小程序-计算机毕业设计源码82910

目 录 摘要 1 绪论 1.1 项目开发背景 1.2目的和意义 1.3springboot框架介绍 2 微信点餐小程序系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 …