分布式事务及解决方案

article/2025/8/25 4:11:59

1、分布式事务

        分布式事务就是在一个交易中各个服务之间的相互调用必须要同时成功或者同时失败,保持一致性和可靠性。在单体项目架构中,在多数据源的情况下也会发生 分布式事务问题。本质上来说,分布式事务就是为了保证不同数据库的数据一致性

        在传统的单机环境中,事务处理通常符合ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在这种情况下,一个事务要么完全执行成功,将所有的更改提交到数据库中,要么完全失败,将所有的更改回滚,数据库状态不受影响。

2、CAP理论

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致。

Availability(可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝。

Partition tolerance(分区容错性)

        Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

        Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务。

        在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。因此P不可避免。当分区出现时,系统的一致性(C)和可用性(A)就无法同时满足。

3、BASE理论

        Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。

      Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。         Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

解决分布式事务的思想和模型:

        分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理和BASE理论,有两种解决思路:

        AP模式:各子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施恢复数据即可,实现最终一致

        CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致。但事务等待过程中,处于弱可用状态

        全局事务:整个分布式事务

        分支事务:分布式事务中包含的每个子系统的事务

        最终一致思想:各分支事务分别执行并提交,如果有不一致的情况,再想办法恢复数据 强一致思想:各分支事务执行完业务不要提交,等待彼此结果。而后统一提交或回滚

4、seata架构

Seata事务管理中有三个重要的角色:

         TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

        TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

        RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状。

Seata提供了四种不同的分布式事务解决方案:

        XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入。

        TCC模式:最终一致的分阶段事务模式,有业务侵入 AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式。

        SAGA模式:长事务模式,有业务侵入。

4.1.XA模式

        XA是规范,目前主流数据库都实现了这种规范,实现的原理都是基于两阶段提交。

        RM一阶段的工作:

                a. 注册分支事务到TC  b.执行分支业务sql但不提交 c.报告执行状态到TC 

       TC 二阶段的工作:

                TC检测各分支事务执行状态:

                a.如果都成功,通知所有RM提交事务 

                b.如果有失败,通知所有RM回滚事务 RM

       二阶段的工作: 接收TC指令,提交或回滚事务。

XA模式的优点是什么?

        事务的强一致性,满足ACID原则。
        常用数据库都支持,实现简单,并且没有代码侵入

XA模式的缺点是什么?

        因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差。
        依赖关系型数据库实现事务。

4.2.XA模式

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

阶段一RM的工作:

      a. 注册分支事务        b.记录undo-log(数据快照)       c.执行业务sql并提交     d.报告事务状态

阶段二提交时RM的工作:

        删除undo-log即可。

阶段二回滚时RM的工作:

        根据undo-log恢复数据到更新前

 

AT模式与XA模式最大的区别是什么?

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

AT模式的优点:

        一阶段完成直接提交事务,释放数据库资源,性能比较好。
        利用全局锁实现读写隔离。
        没有代码侵入,框架自动完成回滚和提交。

AT模式的缺点:

        两阶段之间属于软状态,属于最终一致。
        框架的快照功能会影响性能,但比XA模式要好很多。

4.3.TCC模式

        TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。需要实现三个方法:

        Try:资源的检测和预留。

        Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。

        Cancel:预留资源释放,可以理解为try的反向操作。

TCC模式的每个阶段是做什么的?

        Try:资源检查和预留
        Confirm:业务执行和提交
        Cancel:预留资源的释放

TCC的优点是什么?

        一阶段完成直接提交事务,释放数据库资源,性能好。
        相比AT模型,无需生成快照,无需使用全局锁,性能最强。
        不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库。

TCC的缺点是什么?

        有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦。
        软状态,事务是最终一致。
        需要考虑Confirm和Cancel的失败情况,做好幂等处理。

4.4.SAGA模式

        在 Saga 模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。

        分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会去退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。

Saga也分为两个阶段:

        一阶段:直接提交本地事务。
        二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚。

优点:

        事务参与者可以基于事件驱动实现异步调用,吞吐高。
        一阶段直接提交事务,无锁,性能好。
        不用编写TCC中的三个阶段,实现简单。

缺点:

        软状态持续时间不确定,时效性差。
        没有锁,没有事务隔离,会有脏写。

4.5.四种模式对比


http://chatgpt.dhexx.cn/article/a8ciniqS.shtml

相关文章

负载均衡方案

负载均衡方案 1、负载均衡概念 一台普通服务器的处理能力是有限的,假如能达到每秒几万个到几十万个请求,但却无法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务…

负载均衡的多种解决方案

以下为原文 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层…

信息熵笔记

观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和? 两个事件的信息量之和等于两个事件和的信息量? 两个随机变量熵的和大于两个随机变量和的熵 图片引自:https://blog.csdn.net/luoxuexiong/article/details/…

一文弄懂信息熵

引言 今天我们来探讨一下信息熵是怎么来的。 信息熵 信息的价值在于消除事件的不确定性,那事件的不确定性要怎么度量呢?答案就是信息熵(information entropy)。 比如你告诉别人你中了500万彩票,别人会大吃一惊,因为他被消除了…

信息熵 entropy

熵 最早是由热力学定义的一个函数,是普朗克来中国讲学的时候引入的。英文是“entropy”这个字,中文词汇中没有相关的字眼。当时是一个有名的姓胡的学者作为普朗克的翻译。因为这个熵“S”是定义为热量Q与温度的比值,所以当时他翻译是立刻创造…

信息熵学习笔记

简介 在信息论中,熵(entropy)是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。 熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。 比较不可能发生的事情&…

信息熵到底是什么

信息是我们一直在谈论的东西,但信息这个概念本身依然比较抽象。在百度百科中的定义:信息,泛指人类社会传播的一切内容,指音讯、消息、通信系统传输和处理的对象。 但信息可不可以被量化,怎样量化?答案当然…

什么是信息熵

熵 当一件事情(宏观态)有多种可能情况(微观态)时,这件事情(宏观态)对某人(观察者)而言具体是哪种情况(微观态)的不确定性叫做熵(entropy&#xff…

信息熵是什么

信息熵是什么 通过前两节的学习,我们对于决策树算法有了大体的认识,本节我们将从数学角度解析如何选择合适的“特征做为判别条件”,这里需要重点掌握“信息熵”的相关知识。 信息熵这一概念由克劳德香农于1948 年提出。香农是美国著名的数学…

单选按钮html图片,js实现的 图片单选按钮效果

【实例简介】用js实现的radio图片选择按钮效果。 【实例截图】 【核心代码】 用JS实现的radio图片选择按钮效果-脚本之家 .lanrentuku img{border:1px solid #008800;} function myFun(sId) { var oImg document.getElementsByTagName(img); for (var i 0; i < oImg.lengt…

html自定义单选按钮,美化表单——自定义单选按钮和复选按钮

大家都知道&#xff0c;在Web的Form中美化是最头痛的&#xff0c;尤其是表单中的“input[typecheckbox]”、“input[type"radio"]”、“input[typefile]”和select这些元素我们单单只使用CSS是无法匹配设计图的&#xff0c;像背景颜色或者背景图片&#xff0c;甚至说…

Android开发单选按钮功能,android实现单选按钮功能

在我们平时在注册个人信息的时候,经常会让我们选择是男生还是女生,那么这个单选框在Android中是怎么实现的呢?现在我们就来学习一下吧 首先我们要明白实现这样一个效果需要哪几部? 1、在layout布局文件中建立一个文件,我起的名字为activity_radio.xml 代码为: android:la…

单选按钮RadioButton

效果示例&#xff1a; MRadioButton.h //******************************************************** /// brief 自定义单选按钮 /// author y974183789gmail.com /// date 2021/9/18 /// note 支持自定义设置单选指示器位置 /// version 1.0.0 //***************************…

单选按钮(RadioButton)与 复选框(CheckBox)的功能与 用法

按照惯例&#xff0c;先看看两者的区别&#xff1a; 顾名思义&#xff0c;单选俺就就是只能选中一项的&#xff0c;而复选框是可以多选的。 一般来说&#xff0c;单选按钮是用于只有唯一答案的问题的答案选项中&#xff0c;而复选框用于一些可以多选的问题的答案中。 下面看看…

Android——单选多选按钮的使用详解

一&#xff1a;单选按钮 单选按钮类&#xff1a;RadioButton android&#xff1a;checked"true"设置默认选中 单选按钮控件通常与RadioGroup搭配使用。 RadioGroup是LinearLayout的子类&#xff0c;用于将多个单选按钮组合为一组。 同一按钮组内的单选…

Android 之 RadioButton (单选按钮) Checkbox (复选框)

本节引言&#xff1a; 本节给大家带来的是Andoird基本UI控件中的RadioButton和Checkbox; 先说下本节要讲解的内容是&#xff1a;RadioButton和Checkbox的1.基本用法 2.事件处理&#xff1b; 3.自定义点击效果&#xff1b; 4.改变文字与选择框的相对位置&#xff1b; 5.修改文字…

FTP服务器-vsftpd

FTP服务基础 FTP&#xff08;File Transfer Protocol,文件传输协议&#xff09;是典型的C/S结构的应用层协议&#xff0c;需要由服务端软件、客户端软件两个部分共同实现文件传输功能。 FTP连接及传输模式 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。 20端口用…

ftpvsftpd服务

一. ftp ftp即文件传输,它是INTERNET上仍然常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器传输的简单方法,FTP服务器包的名称为vsftpd 二. 部署ftp服务 1. 安装ftp yum install -y vsftpd #安装vsftpd软…

VSFTPD服务器配置

文章目录 一、实验环境二、实验目的三、实验任务任务一&#xff1a;根据以下要求配置服务器1&#xff09; 配置FTP匿名用户的主目录为/var/ftp,该账户只能下载&#xff0c;不能上传。2&#xff09;建立一个名为abc、口令xyz的FTP账户&#xff0c;设置账户具有上传、下载权限。3…

ftpd服务常见配置总结(/etc/vsftpd/vsftpd.conf)

命令端口&#xff1a; listen_port21 注意&#xff1a;该信息默认没有&#xff0c;使用的话&#xff0c;需要用户自己添加。默认是21。 主动模式端口&#xff1a; connect_from_port_20YES 主动模式端口为20&#xff08;该项配置文件默认已经添加&#xff09; ftp_data_por…