分布式事务及解决方案

news2024/11/16 21:15:13

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://www.coloradmin.cn/o/803752.html

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

相关文章

关于Docker的知识点

Docker是一个快速交付应用、运行应用的技术。 Docker基本操作--容器 示例:创建运行一个Nginx容器

【每日一题】—— B - Broken Rounding(AtCoder Beginner Contest 273)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

【个人笔记】Linux命令之watch命令

1.命令简介 watch 以周期性方式执行给定的命令,并全屏显示执行结果,可以帮助监测一个命令的运行结果。 2.命令格式及参数选项说明 命令格式: watch [OPTIONS] COMMAND选项说明: -d, --differences [PERMANENT]高亮显示最近两…

Ventoy 使用教程图文详细版

文章目录 Ventoy 使用教程图文详细版简介安装 Ventoy下载 Ventoy安装到 U盘使用 Ventoy复制 ISO 文件启动电脑选择 ISO 文件结论Ventoy 使用教程图文详细版 简介 Ventoy 是一款开源的 U盘 启动工具,设计用于简化从 U盘 启动操作系统的过程。其主要特点是支持直接使用 ISO 文…

怎么绘制简爱思维导图?用这个工具绘制很简单

怎么绘制简爱思维导图?绘制思维导图是一项非常有用的技能,有助于梳理思路、整理知识、更好地理解和记忆信息。因此,无论你是学生、教师、工程师、项目经理或者只是想要更好地组织自己的想法,学会绘制思维导图都是非常有益的。下面…

吃透《西瓜书》第三章 线性模型:多元线性回归

🍉 吃瓜系列 教材:《机器学习》 周志华著 🕒时间:2023/7/26 目录 一、多元线性回归 1 向量化 1.1.1 向量化 1.1.2 使用最小二乘法构建损失函数 1.1.3 去除求和符号,改成向量点乘的形式 1.1.4 数学原理 2 求解…

机器学习笔记之优化算法(二)线搜索方法(方向角度)

机器学习笔记之优化算法——线搜索方法[方向角度] 引言回顾:线搜索方法从方向角度观察线搜索方法场景构建假设1:目标函数结果的单调性假设2:屏蔽步长 α k \alpha_k αk​对线搜索方法过程的影响假设3:限定向量 P k \mathcal P_k …

9. Spring MVC

目录 1. Spring MVC 介绍 1.1 MVC 定义 1.2 MVC 和 Spring MVC 的关系 1.3 Spring、Spring Boot 和 Spring MVC 的关系 2. Spring MVC 的创建和连接 2.1 Spring MVC 项目返回视图 2.2 Spring MVC 项目返回数据 2.3 RequestMapping 是 post 还是 get 请求 3. 获取参数…

PX4固件报错“Accel 0 clipping, not safe to fly!“

最近在使用PX4固件时,遇到了报错: “Accel 0 clipping, not safe to fly!” 这个报错我以前是从没遇到过的,可见是新版固件才会有的。 正常来说,只有山寨乞丐版飞控才会经常出现这类传感器的报错。 但是我手里的是5000多的X7 pro&…

使用多数据源dynamic-datasource-spring-boot-starter遇到的问题记录

记录使用多数据源dynamic-datasource-spring-boot-starter遇到的问题&#xff1a; 1、工程启动失败 缺少clickhouse连接驱动&#xff0c;引入对应的maven依赖 <!--ck连接驱动--><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>…

没有颜值插件的编辑器是没有灵魂的--【idea-theme插件】

文章目录 本系列校训idea安装程序员常用软件工具推荐1.JetBrains全家桶2.Microsoft Visual Studio3.eclise 系列 先看一下VS Code 的特色idea 系列 的颜值插件idea插件安装Material_ThemeMaterail 家自己的themes主题免费的版本在前面 本系列校训 颜值即正义&#xff01;你漂亮…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

SUI供应量等问题的说明以及终止与MovEX的合作声明

原生加密token是区块链经济系统的基石&#xff0c;对网络的安全、运作和增长至关重要。Sui的原生token SUI有如下四个关键用途&#xff1a; 质押给验证节点&#xff0c;以确保网络的安全&#xff0c;并赚取质押奖励用于支付gas费&#xff0c;以执行交易和其他操作作为原生资产&…

用python怎么输出个人信息,python怎么输出个人信息

大家好&#xff0c;给大家分享一下python输入自己的姓名,输出hello,某某某同学&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、python要求用户输入姓名并输出 name input("请输入姓名:") print("你好,"&#xff…

MSFCS互相联动

MSF&CS互相联动 1. 前言2. CS联动MSF2.1. 案例测试2.1.1. CS设置联动监听器2.1.2. CS设置联动MSF会话2.1.3. MSF设置监听 3. MSF联动CS3.1. 案例测试3.1.1. MSF生成木马3.1.2. 设置监听3.1.3. CS设置监听3.1.4. MSF转移会话3.1.5. 查看上线 4. 其它 1. 前言 在日常渗透测试…

【单片机】温控系统参数辨识及单片机PID控制

温控系统参数辨识及单片机PID控制 1. 温控系统组成2. matlab辨识系统参数2.1 采集阶跃响应信号导入matlab系统辨识模块 PID控制 1. 温控系统组成 半导体制冷片正向通电制冷&#xff0c;反向通电制热。系统采用半导体制冷片&#xff08;帕尔贴&#xff09;作为执行单元&#xf…

使用adb通过电脑给安卓设备安装apk文件

最近碰到要在开发板上安装软件的问题&#xff0c;由于是开发板上的安卓系统没有解析apk文件的工具&#xff0c;所以无法通过直接打开apk文件来安装软件。因此查询各种资料后发现可以使用adb工具&#xff0c;这样一来可以在电脑上给安卓设备安装软件。 ADB 就是连接 Android 手…

C++中对 this 指针的理解

引出 我们首先了解this指针&#xff0c;要先了解class&#xff08;类&#xff09;&#xff0c;类其实就相当于C语言中的结构体一样&#xff0c;也是创建了一个自定义类型。对于类而言该类型下面可以存放成员函数&#xff0c;成员变量。类可以声明一个变量&#xff0c;对该变量…

数据结构---LRU CACHE

什么是LRU 通过之前的学习我们知道计算机在处理任务的时候是先将数据从硬盘中提取出来加载进内存&#xff0c;然后再将内存中的数据加载进入cpu进行计算&#xff0c;但是这里存在一个问题cpu的计算速度非常快&#xff0c;而内存中加载数据的速度又很慢&#xff0c;所以为了提供…

Mysql-事务、视图和索引

目录 事务 操作 步骤 特性 并发事务问题 事务隔离级别 索引 作用 分类 主键索引&#xff08;PRIMARY KEY&#xff09; 唯一索引&#xff08;UNIQUE&#xff09; 常规索引&#xff08;INDEX&#xff09; 全文索引&#xff08;FULLTEXT&#xff09; 管理索引 数据…