什么是分布式事务?
分布式事务跨越多个系统,确保所有操作一起成功或失败,这对于在现代计算环境中跨不同地理位置分离的资源维护数据完整性和一致性至关重要。
1. 为什么需要分布式事务?
分布式事务的需求源于确保分布式计算环境中多个独立系统或资源之间的数据一致性和可靠性的要求。
如上图所示,用户下了订单后,需要经过子系统Invetory和Payment两个服务处理,这两个服务是独立的微服务,要求这两个服务里面的事务要么同时成功,要么同时失败,由于是分处两个独立子系统,因此单个事务无法搞定两个系统的交易一致性!
这就需要用到分布式事务,它的主要特性如下:
1.1 一致性
确保作为事务的一部分所做的所有更改都以原子方式提交或回滚,从而维护数据完整性。
1.2 隔离性
保证并发事务不会互相干扰,维护数据完整性并防止冲突。
1.3 持久性
确认即使系统发生故障,已提交的事务仍然能够持续存在,从而确保可靠性。
1.4 原子性
确保事务中的所有操作要么全部成功完成,要么全部不成功完成,避免导致不一致的部分更新。
2. 分布式事务的工作原理
分布式事务的工作方式与简单事务相同,但挑战在于在多个数据库上实现它们。由于使用多个节点或数据库系统,会出现某些问题,例如网络故障,以维护额外硬件服务器和数据库服务器的可用性。为了成功进行分布式事务,可用资源由事务管理器协调。
分布式事务的工作原理
以下是针对该分布式事务流程一些步骤详解:
2.1 步骤 1:向资源申请 - 发出分布式事务
第一步是发出分布式事务。应用程序通过向可用资源发送请求来启动事务。请求包含详细信息,例如给定事务中每个资源要执行的操作。
2.2 步骤 2:资源 1 到资源 2 — 要求资源 2 准备提交
一旦资源收到事务请求,资源 1 就会联系资源 2 并要求资源 2 准备提交。此步骤确保两个可用资源都能够执行专用任务并成功完成给定的事务。
2.3 步骤 3:资源 2 到资源 1 – 资源 2 确认准备
第二步之后,资源 2 收到资源 1 的请求,准备提交。资源 2 向资源 1 做出确认响应,并确认已准备好继续执行分配的事务。
2.4 步骤 4:资源 1 到资源 2 — 要求资源 2 做出承诺
一旦资源 1 收到资源 2 的确认,它就会向资源 2 发送请求并提供提交事务的指令。此步骤确保资源 1 已完成给定事务中的任务,现在已准备好让资源 2 完成操作。
2.5 步骤 5:步骤 5:资源 2 至资源 1 – 资源 2 确认提交
当资源 2 收到来自资源 1 的提交请求时,它会向资源 1 提供响应并确认它已成功提交分配给它的事务。此步骤可确保资源 2 已完成操作中的任务,并确保两个资源都已同步其状态。
2.6 步骤 6:资源 1 至应用程序 — 接收交易确认
一旦资源 1 收到来自资源 2 的确认,资源 1 便会将交易确认发送回应用程序。此确认确认在多个资源之间执行的交易已成功完成。
3. 分布式事务的类型
分布式事务涉及跨多个节点或资源协调操作,以确保原子性、一致性、隔离性和持久性(ACID 属性)。以下是一些常见的类型和协议:
3.1 两阶段提交协议(2PC)
这是用来实现分布式事务原子性的经典协议。
- 它涉及两个阶段:准备阶段,所有参与者同意提交或中止事务;提交阶段,所有参与者同步执行决策。
- 2PC 确保所有涉及的资源都提交事务或都不提交,从而保持原子性。
3.2 三阶段提交协议(3PC)
3PC 通过添加额外阶段(预提交阶段)扩展了 2PC,以解决可能导致 2PC 中无限期阻塞的某些故障情况。
- 在3PC中,参与者首先同意准备提交,然后提交,最后完成或中止事务。
- 该协议旨在通过引入额外的决策阶段来降低 2PC 中出现的阻塞风险。
3.3 XA 事务
XA(扩展架构)事务是开放群组 (The Open Group) 定义的一种标准,用于协调跨异构资源(例如数据库、消息队列)的事务。
- XA 指定全局事务管理器(TM)和资源管理器(RM)之间的接口。
- TM 协调事务的生命周期,确保所有参与的 RM 以原子方式提交或回滚事务。
4. 实现分布式事务
分布式事务的实现方式如下:
4.1 交易管理器(TM)
- 事务管理器负责协调和管理跨多个资源管理器(例如数据库、消息队列)的事务。
- 即使涉及不同的资源,TM 也能确保事务遵守 ACID 属性(原子性、一致性、隔离性、持久性)。
4.2 资源经理(RM)
- 资源管理器负责管理分布式事务中涉及的各个资源(例如数据库、文件系统)。
- RM与TM交互,准备根据TM的协调提交或回滚事务。
4.3 协调协议
- 分布式事务的实现通常依赖于2PC、3PC等协调协议或Paxos、Raft等变体来达成共识。
- 这些协议确保事务中的所有参与者就提交或回滚达成一致的决定。
5. 分布式事务的优点
以下是分布式事务的优点:
5.1 数据一致性
分布式事务在多个资源之间提供数据一致性。各种操作在多个数据库资源之间进行协调。这确保系统即使在发生任何类型的故障时也能保持一致状态。
5.2 容错性
分布式系统可以处理故障并确保交易正确。如果参与资源在交易执行期间发生故障,则交易可以在备用资源上回滚并成功完成。
5.3 保证事务
分布式系统保证事务。它提供持久性和隔离性等功能。持久性确保如果提交了任何事务,即使发生任何故障,更改也会持续存在。
6. 分布式事务应用场景
分布式事务的应用如下:
6.1 企业资源规划 (ERP) 系统
ERP 系统由一个组织内的部门组成。因此,这里使用分布式事务来维护来自销售、库存、财务和人力资源管理等各个模块的事务。
6.2 云计算
分布式事务正在基于云的应用程序中得到使用。事务可以在多个数据源的帮助下完成,并确保数据更新和操作的一致性。
6.3 医疗保健系统
医疗保健系统在协调患者记录、为患者安排预约以及管理计费系统时使用分布式事务。分布式事务可维护医疗保健系统中的数据一致性和性能。
7. 分布式事务常见问题及其解答
7.1 跨地理分布的数据中心实现分布式事务一致性的主要挑战是什么?
处理网络延迟、潜在分区,并确保分散的数据中心之间的交易结果一致。
7.2 在云原生环境中,如何处理跨多个服务或微服务的长时间运行的分布式事务?
使用基于编排的 sagas 或补偿事务等模式来跨服务异步管理事务状态。
7.3 在分布式事务中,使用两阶段提交(2PC)和三阶段提交(3PC)协议之间的权衡是什么?
2PC 提供了更简单的原子性,但有阻塞的风险;3PC 增加了复杂性,减少了阻塞,但有可能增加延迟。
7.4 在什么场景中您会选择使用XA事务而不是自定义应用程序级分布式事务管理?
XA 事务适合与符合 XA 的系统集成,以实现标准化协调;自定义方法提供灵活性和性能优化。
7.5 在跨多个数据中心或云区域的异步数据传播的分布式系统中,如何维护事务的完整性和一致性?
使用分布式提交协议、幂等操作和冲突解决来确保即使出现网络延迟或故障也能实现一致的更新。
8. 结论
当使用多个资源(例如存储库或数据库系统)来执行事务时,将使用分布式事务。分布式事务提供各种好处,例如数据一致性,保证事务,并提高系统的整体性能和可扩展性。因此,分布式事务被用于各种应用程序以获得上述好处。
相关文章:

什么是分布式事务?
分布式事务跨越多个系统,确保所有操作一起成功或失败,这对于在现代计算环境中跨不同地理位置分离的资源维护数据完整性和一致性至关重要。 1. 为什么需要分布式事务? 分布式事务的需求源于确保分布式计算环境中多个独立系统或资源之间的数据…...
深入Java内存区域:堆栈、方法区与程序计数器的奥秘
引言 在Java开发过程中,合理地管理和利用内存资源对于提高程序的运行效率至关重要。特别是在大型项目或高并发场景下,一个小小的内存泄漏就可能导致整个系统崩溃。因此,掌握Java内存区域的相关知识,不仅能帮助我们更好地理解程序…...

【ML】异常检测、二分类问题
【ML】异常检测、二分类问题 1. 异常检测、二分类问题1.1 异常检测(Anomaly Detection)1.2 二分类问题(Binary Classification)1.3 异常检测与二分类问题的对比1.4 总结 2. 模型额训练与评估3. 为什么会出现比较高的误识别&#x…...
8.8-配置python3环境+python语法的使用
1.环境 python2 ,python3 [rootpython ~]# yum list installed|grep python [rootpython ~]# yum list installed|grep epel epel-release.noarch 7-11 extras #安装python3 [rootpython ~]# yum -y install python3…...

高质量WordPress下载站模板5play主题源码
5play下载站是由国外站长开发的一款WordPress主题,主题简约大方,为v1.8版本, 该主题模板中包含了上千个应用,登录后台以后只需要简单的三个步骤就可以轻松发布apk文章, 我们只需要在WordPress后台中导入该主题就可以…...
【C++】类的概念与基本使用介绍
C类是面向对象编程(OOP)的基础,它允许我们将数据(属性)和行为(方法)封装在一起,形成一个自定义的数据类型。以下是C类的基本概念、特点、特性以及使用注意事项,最后会提供…...
基于Python和OpenCV的图像处理的轮廓查找算法及显示
文章目录 概要轮廓查找算法示例代码代码解释小结 概要 在图像处理中,轮廓查找是一个重要的步骤,它可以帮助我们识别图像中的形状和边界。Python结合OpenCV库可以非常方便地实现这一功能。本文将详细介绍如何使用Python和OpenCV来查找图像中的轮廓&#…...

使用ant design的modal时,发现自定义组件的样式(组件高度)被改变了!
一 问题描述 在项目中,自定义了一个组件,分别在界面和 antd的modal中都有使用到。但是突然发现,界面中的组件样式跟modal中的组件样式高度不一样。modal中的组件整体要比页面中的组件要高一点。 项目中的自定义组件比较复杂,因此&…...

NLP从零开始------8文本进阶处理之文本向量化
1. 文本向量化概述 随着计算机计算能力的大幅度提升,机器学习和深度学习都取得了长足的发展。NLP越来越多的通过应用机器学习和深度学习工具解决问题,例如通过深度学习模型从网络新闻报道中分析出关键词汇与舆论主题并构建关系图谱。在这种背景下&#x…...

【网络编程】字节序,IP地址、点分十进制、TCP与UDP的异同
记录学习,思维导图绘制 目录 1、字节序编辑 2、IP地址 3、点分十进制 4、TCP与UDP的异同 1、字节序 2、IP地址 3、点分十进制 4、TCP与UDP的异同...

关于k8s的pvc存储卷
目录 1.PVC 和 PV 1.1 PV 1.2 PVC 1.3 StorageClass 1.4 PV和PVC的生命周期 2.实战演练 2.1 创建静态pv 2.2 创建动态pv 3.总结 1.PVC 和 PV 1.1 PV PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,…...
【物联网设备端开发】ESP开发工具:QEMU的使用方法
概要 本文提供了一些运行QEMU的ESP特定说明。有关QEMU的一般使用问题,请参阅官方文档:https://www.qemu.org/documentation/. 编译 QEMU 准备工作 在此之前,请查看有关构建先决条件的QEMU文档。如果你在Linux主机上构建QEMU,你…...
c++中std::endl 和“\n“ 这两个换行符有什么区别
std::endl 和 "\n" 都用于在C中生成换行符,但它们之间有一些重要的区别 std::endl: 功能:输出一个换行符,并刷新输出流(即缓冲区)。作用:确保所有数据立即输出到目的地,例…...

http中get和post怎么选
5.4.2.怎么选择1.如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。2.大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据…...

数据分析及应用:快手直播间人员在线分析
目录 0 需求描述 1、进入直播间的高峰期为?(以进入用户数衡量) 2、晚上 11 点,哪个直播间的进入人数最多? 3、20:00-23:00,娱乐类、搞笑类,进入人数最多直播间分别是? 4、娱乐类、搞笑类,人均在线时长(退出时间-进入时间)最长的直播间分别是? 5、同时在线人数…...

【Python】nn.nn.CircularPad1、2、3d函数和nn.ConstantPad1、2、3d函数详解和示例
前言 在深度学习中,尤其是在处理图像、音频或其他多维数据时,数据填充(Padding)是一个常见的操作。填充不仅可以保持数据的空间维度,还能在卷积操作中避免信息丢失。PyTorch提供了多种填充方式,其中nn.Cir…...

LearnOpenGL——混合、面剔除
LearnOpenGL——混合、面剔除 混合 Blending一、丢弃片段 Alpha Test二、混合 Alpha Blending渲染顺序 面剔除一、环绕顺序二、面剔除 混合 Blending OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明的物体可以是完全透明的࿰…...
视频网站为何热衷于SCDN
视频网站为何热衷于SCDN?随着互联网技术的飞速发展,视频网站已成为人们日常生活中不可或缺的一部分。无论是观看高清电影、热门剧集,还是直播体育赛事、游戏竞技,视频网站都以其丰富的内容和便捷的访问方式吸引了无数用户。然而&a…...

Redis与DataBase保持数据一致性
文章目录 1. 读取数据2. 写数据2.1 先操作缓存2.2 先操作数据库 在我们系统中缓存最常用的策略是:服务端需要同时维系DB和Cache,并且是以DB的结果为准, Cache-Aside Pattern(缓存分离模式、旁路缓存)。 1. 读取数据 当…...

解决 MacOS 连接公司 VPN 成功但是不能网络的问题
目录 解决办法2024 Mac mini 爆料 解决办法 操作比较简单,修改配置文件即可(如果没有则需要手动创建)。 sudo vim /etc/ppp/options在此文件下,加入 plugin L2TP.ppp: plugin L2TP.ppp如果文件里有l2tpnoipsec&…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...