分布式事务

一、为什么需要分布式事务:

在这里插入图片描述
分布式事务是指 会涉及到操作多个数据库(服务)的事务。
其实就是将对 同一数据库(服务)事务的概念扩大到了多个数据库(服务)的事务。
目的是为了保证分布式系统中的数据一致性。

二、分布式事务XA规范:

什么是XA规范:

XA规范是一种用于实现分布式事务的标准,它定义了一组接口和协议,用于协调分布式环境下多个资源管理器(Resource Manager)之间的事务操作。
XA规范的全称是"X/Open Distributed Transaction Processing (DTP) XA",最初由X/Open(现在的The Open Group)制定并发布。它提供了两个关键接口:XA接口和RM接口。

其中XA里面有这几个角色:

  • AP(Application,应用程序)
  • TM(Transaction Manager,事务管理器)
  • RM(Resource Manager,资源管理器)

XA规范:就是X/Open DTP定义的 事务协调者 与数据库之间的接口规范,(既接口函数),事务协调者 用它来通知数据库事务的开始、结束以及提交、回滚等操作。

XA规范的实现:分布式集群的情况下,一般加代理层来充当TM的角色,实现对事务的支持。

其中二阶段提交协议(2PC)和三阶段提交协议(3PC)就是根据XA规范这一思想衍生出来的。
两阶段提交主要保证了分布式事务的原子性:既所有节点要么全成功,要么全不成功。

三、二阶段提交(2PC):

3.1 第一阶段:

在这里插入图片描述

  1. 事务协调者(TM)给各个节点发送 执行 指令,然后两个服务开始执行,如果两个服务的业务逻辑都没有问题反馈给事务协调者。这时两个服务的数据还没有提交至数据库。为什么呢?(往下看)
  2. 假如现在事务协调者收到这两个都没有问题。然后事务协调者发送提交指令,两个进行提交。

3.2 第二阶段:

在这里插入图片描述
3. 这个时候两个服务都提交了。(完成事务)
4. 然后我们重新来演示下 第一阶段提交问题。
在这里插入图片描述
5. 看上图,在库存节点的时候内部报错了,响应给协调者,或者说库存节点迟迟不给协调者回应,超出了一定的时间,那么第2阶段就变成回滚报错了。(完成事务)
在这里插入图片描述

3.3 二阶段提交的缺点和解决办法:

  • 事务协调者故障(各个节点的协调会失败)

给事务协调者增加集群

  • 占用数据库连接 (数据库链接阻塞,就是我们的第1步骤,需要等待协调者响应才能提交到数据库)

这个也是可以解决的,就是如果第1阶段都没有问题,那么就直接提交,然后记录数据原来的状态。如果第2阶段如果事务协调者让回滚的话。我们可以根据数据原来的状态直接进行回滚操作,这样就解决了占用链接的问题了。(阿里云的Seata就是这么干的)

  • 网络波动,数据不一致:为什么会产生这个问题呢?
    如果我们的第一阶段都没有问题的话,在第二阶段的时候,
    在这里插入图片描述

这种方式的情况下,只能人工手动解决。。

四、三阶段提交(3PC):

3pc阶段提交示例图:
在这里插入图片描述
其实3pc提交的后两个阶段 pre commit和 do commit 就是2pc提交的方式。那为什么要有3pc提交呢?
3pc的出现其实就为了解决 2pc 的第一步长久占用数据库连接。还有2pc的第二阶段,如果某个节点迟迟不给回应。

4.1. 3pc的第一阶段:

在这里插入图片描述
如果3pc的第一个can commit,A节点和B节点收到TM的指令后,然后检查自己的程序,检查自己的sql,如果没问题。响应给TM,如果有一个节点检查返回的错误的信息。或者一个节点迟迟不给回应。那么这一阶段 就直接结束了

4.2. 3pc的第二阶段:

假如第一阶段,节点都返回ok。那么来到第二阶段
在这里插入图片描述
如果第二节点还是有一个节点,返回no,或者迟迟不回应,那么就直接回滚操作。

4.2. 3pc的第三阶段:

在这里插入图片描述
如果第三阶段。两个节点都是yes,那么咱们整个流程就走完了。如果在第三阶段有一个阶段迟迟没有给TM响应。那咱们的失联节点服务里面。就应该有判断自动提交的逻辑。为什么?(因为我们前两个阶段都是没有问题的。这样不就解决了2阶段的问题了么?)

五、TCC(Try Confirm Cancel)的方式:

其实tcc的方式,就是在操作最终一致性上面去添加日志信息。比如我们现在有个业务场景
张三给李四转账100,李四增加100,张三减100
在这里插入图片描述
相对于2PC、3PC、Tcc使用的范围量大,我们不止可以恢复mysql,更可以恢复redis等等。但是开发量大,业务代码量也大,我们每次执行必要的操作。都需要写相应恢复操作的代码。

阿里云的Seata就支持TCC这种模式。

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

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

相关文章

RHCE第五次作业

1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) 1)截取网站访问的协议 …

如何在华为OD机试中获得满分?Java实现【字母组合】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 每个数字对应多个字母,…

2023年,真的别裸辞....

作为IT行业的大热岗位——软件测试,只要你付出了,就会有回报。说它作为IT热门岗位之一是完全不虚的。可能很多人回说软件测试是吃青春饭的,但放眼望去,哪个工作不是这样的呢?会有哪家公司愿意养一些闲人呢?…

node.js PM2部署项目

文章更新 2023-05-21 更新NSSM安装服务的方式 pm2 是什么 pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序。通常一般会在服务上线的时候使用 pm2 进行管理。本文围绕以下重点进行讲解:安装pm2;命令行部署到PM2;PM2查看日志等命…

PLX31-EIP-MBTCP 以太网/IP到Modbus TCP/IP

PLX31-EIP-MBTCP ProSoft Technology的EtherNet/IP to Modbus TCP/IP通信网关允许在支持EtherNet/IP的控制器或设备与Modbus TCP/IP控制器或设备之间进行高速双向数据传输。 我们的Modbus TCP/IP驱动程序具有多种客户端和服务器功能,可实现更快的数据传输。此外&a…

【Linux】普通用户无法使用sudo指令的方法

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

云计算安全

前言 什么是云计算? 云计算就是一种新兴的计算资源利用方式,云计算的服务商通过对硬件资源的虚拟化,将基础IT资源变成了可以自由调度的资源池,从而实现IT资源的按需分配,向客户提供按使用付费的云计算服务。用户可以…

智能排班系统 【管理系统功能、操作说明——中篇】

文章目录 页面与功能展示企业管理角色管理用户管理系统管理员身份使用企业管理员身份使用门店管理员身份使用 门店管理职位管理排班规则设置节日管理消息管理 页面与功能展示 企业管理 企业管理页面如图 34所示,在企业管理页面,系统管理员可以查询所注…

Unity Shader variants (shader 变体)

官方地址 https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html 教程可以看这里 https://www.jianshu.com/p/48ad75f0b4b9 https://www.jianshu.com/p/3e6b84317097 变种用我自己的理解就是 能用程序控制的shader 举个例子 这里声明了 a b c d 四个变…

cpu 内核 逻辑处理器的关系

6核CPU,12个逻辑处理器 一颗内核在一个时间片内只能执行一个内核线程;当物理CPU使用了超线程技术后,在CPU的一颗内核中,利用就是利用其中空闲的执行单元,模拟出另外一个核心(并不是真正的物理运算核心&…

详解C语言assert宏

前言:我们经常在写代码时,发现一些大牛的代码中总有一句assert(表达式),经过在网上的学习,笔者也浅显的了解了assert的相关知识,assert一般用于规范代码,避免不必要的错误&#xff0…

【WOA-LSTM】基于WOA优化 LSTM神经网络预测研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【机器学习】信息量、香农熵、信息增益(增加例子,方便理解)

这节可以搭配 【机器学习】Logistic回归(重新整理)信息量(信息)信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归(重新整理) B站视频:“交叉熵”如何做损失函数?打包…

css元素的显示和隐藏

1. display显示隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

类和对象 --- 封装+对象特性

&#x1f442; 快乐E调 - 林澜叶 - 单曲 - 网易云音乐 &#x1f442; Plain Jane (Freestyle) - Ombre2Choc Nation - 单曲 - 网易云音乐 1.5倍速&#xff0c;跟着敲&#xff0c;初识C 目录 &#x1f3c6;封装 &#x1f333;属性和行为作为整体 &#x1f333;案例 -- 设置…

19-01 技术选型的道与术

系列目录导航&#x1f449; 什么是技术选型&#xff0c;技术选型的重要性 根据实际业务管理的需要&#xff0c;对硬件、软件以及所要用到的技术进行规格的选择狭义上的技术选型&#xff1a;团队决定选用哪种技术去解决问题&#xff0c;比如选用某个技术语言、某个技术框架去开…

人民大学与加拿大女王金融硕士项目——在现在憧憬美好的未来

未来是一个虚无缥缈的词汇&#xff0c;抓不住也看不到。未来里有着我们无限的希望&#xff0c;也有着美好的憧憬。未来究竟是怎样的呢&#xff0c;有人说现在的样子里藏着未来的模样。在职的你有没有为未来编织一副美丽的画卷呢&#xff1f;未来很远&#xff0c;远到只能靠想象…

Linux设备树:删除节点和属性的方法

[摘要]&#xff1a;本文主要介绍了在设备树中删除节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;的方法。为了便于理解&#xff0c;笔者先介绍了 dtsi 和 dts 的关系&#xff0c;然后构建了虚拟的需求场景&#xff0c;最终给出示例。 背景知识 设备…

shell 免交互

文章目录 Here Document 免交互实验多行注释基本命令 实验 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是…

理光打印机连接电脑后不打印的原因及解决方法

理光打印机在使用时&#xff0c;可能会出现正常连接上理光打印机却没有反应的情况&#xff0c;出现无法打印的情况&#xff0c;下面&#xff0c;驱动人生为大家带来理光打印机连接后不打印的解决方案。 驱动人生分析&#xff0c;一般遇到理光打印机连接后不打印的情况&#xf…