分布式事务中的两阶段提交

【分布式事务两阶段提交】 在分布式系统中,保证数据的一致性是一个重要挑战,两阶段提交(Two - Phase Commit,2PC)是一种经典的用于解决分布式事务一致性问题的协议。下面将从概念、工作流程、优缺点和 PHP 示例等方面详细讲解两阶段提交。 阅读详情

       在分布式环境中,不同节点上的数据库系统发生错误及错误恢复的操作都是互相独立的。如果一个分布式事务跨越多个节点上的数据库系统(主要是数据库系统,当然还有诸如Queue, JMS等网络共享资源), 在这种环境下保证事务的ACID特性是很有挑战性的。这篇文章我们来谈谈广泛用于分布式事务中的两阶段提交协议,即 2PC(2 phase commit)。这里,先列出几个分布式事务常见的问题,希望大家读完这篇文章,对这些问题的解决会有更进一步认识。

  • 由于分布式事务中分布在节点上的资源之间是互相独立的,有可能事务中的某一个节点上的资源操作由于某种原因失败,但其他节点的资源操作则提交成功。
  • 一个节点上的资源在事务提交过程中失败,在系统恢复后,试图知道事务是否已经被提交。它找谁去获取这些消息? 如果当时事务涉及的其他的所有节点的资源都处于不可访问状态怎么办?
  • 如果某一个节点上的资源在进行事务提交时没有响应,那事务涉及的其他节点的资源需要做如何处理?

      在此之前,我们需要简单了解一些X/Open (OpenGroup) 定义的关于分布式事务的操作规范,这也是两阶段提交协议应用的一个大场景。

       
      如上图所示,分布式事务管理的角色一般都是有Transaction Manager (简称TM)来承担。其负责与Application Program(简称AP)、Resource Manager (简称RM) 以及其他的TM进行交互。这里RM所管理的Resource在分布式事务中涉及数据库、队列、文件、消息或其他在事务中被访问到的共享对象。TM一般负责处理基本的事务操作:Start、Commit和Abort。AP调用Start来启动事务的执行,调用 Commit来请求TM提交事务,调用Abort来请求TM中断事务操作。TM在分布式事务执行过程中会跟踪所有事务访问的RM。一旦事务准备提交,TM就需要和事务涉及到的所有TM打交道来执行2PC.





      如上图示,当执行2PC时,TM分两个阶段进行操作。第一个阶段, TM发送消息通知所有事务涉及到的RM准备提交事务更新,如果一切正常,RM会回复TM一个消息以表明自己可以进行事务提交,但在这之前, RM一般要将事务在该Resource上进行的更新进行保存。相反,如果发生错误,将回复未就绪状态给TM。当TM收到所有的RM的回复时,进入第二个阶段。如果所有的RM都是就绪状态,TM发送提交的消息给所有事务涉及到的RM,最终完成一个分布式事务的提交;但如果有其中任何一个RM由于本地错误未就绪,那TM将进行事务终止操作。由于所有RM在第一阶段回复TM 准备提交的消息前保存了事务操作的结果。这样,即使某一个节点在提交过程中失败了,那么在该节点正常运行后完全可以进行事务的提交以保证事务的一致性。否则, 事务一致性就很难保证。

     在上面2PC的执行过程中,RM会有一个不确定期。这发生在RM就绪后到收到TM提交或中断消息之前的这个阶段。



       在这个阶段,如果TM发生错误,那么RM会处于阻塞状态,既不能提交也不能终止,而且RM会持有在事务运行阶段在该Resource上获得的数据锁。这个问题,目前还无法彻底避免。但针对这个问题,还是有一些技术在试图解决这个问题。例如启发式技术,说白了就是让系统去对结果进行猜测,系统的判断可能是错的,但至少事务可以被终止,产生的锁可以被释放。另一种技术就是三阶段提交。但也不能完全彻底的解决阻塞这个问题。这里不做过多介绍,否则就跑题儿了。微笑

       在分布式事务中,不同节点间协作过程中,之间发生的异常和错误主要是靠timeout捕获。也就是说调用者在向另一个进程发送消息的同时,会设定一个计时器,并假设如果在计时器过期时还没收到回复,那么一定在被调用方的节点发生了异常或错误。Timeout这个概念对于两阶段提交也会产生影响,具体如下

  • TM 在发送 “准备提交” 消息后,如果在设定的Timeout时间内,还没有收到所有参与事务的RM的回复,则会终止事务。结果就像某一个参与事务的RM 回复了 “未就绪” 的消息一样。
  • RM 如果完成了事务所涉及的所有工作后,如果在timeout指定的时间内没有收到来自TM的”准备提交”的确认消息,RM会单方面终止事务。如果稍后才收到来自TM的”准备提交” 的确认消息,那RM会回复 “未就绪” 状态。
  • RM 回复 “就绪” 后,在为收到TM发送的”提交” 或 “终止” 消息前会进入一个不确定期,由于RM处于阻塞状态,如果这时候Timeout 过期, 像我们前面提到虽有可用的技术缓解不确定期阻塞带来的影响。但并不彻底。



讲解一下分布式事务-两阶段提交的实现原理 Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,提供了AT、TCC、SAGA和XA四种事务模式。其中,AT(Auto Transaction)模式是基于两阶段提交协议改进而来,通过数据源代理和全局锁机制实现了对业务代码几乎零侵入的分布式事务支持。随着微服务架构和分布式系统的普及,一个业务操作往往需要调用多个服务,修改多个数据源的数据。情况2:任一参与者返回"中止"或超时。情况1:所有参与者都返回"同意" 阅读详情

相关推荐

基于Spring Cloud的两阶段提交分布式事务框架

缘起 现在用的比较多的分布式事务方案主要有TCC和可靠消息。TCC需要对业务进行改造,分别实现try/confirm/cancel方法,侵入性太强,工作量大。而可靠消息主要适合可以异步调用的业务,对于需要跨服务同步调用的业务,实现困难。以订机票为例,从深圳->新疆乌鲁木齐,假设没有直达,第一步先要确定中转地,选择一家航空公司订票,假设这步的订票结果是成功调用南航的服务订到了深圳->西...

饭西饼 6190

【题库】OBCA认证考试题库(单选部分)

OBCA认证考试题库(单选部分),多选、判断部分看另外两篇博客。考试前看看课件、刷刷题库就可以了。不是很难。

weixin_56319483的博客 7866

分布式事务两阶段提交和三阶段提交有什么区别?

在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是 X/Open 公司定义的一套分布式事务标准。X/Open 公司是由多家国际计算机厂商所组成的联盟组织,它建立之初是为了向 UNIX 环境提供标准。分布式事务是指在分布式系统中,多个节点之间进行的事务操作。比如在分布式系统中,用户在下单时,需要同时创建订单信息和减库存的操作,然而创建订单信息和减库存是分布在不同服务器和不同数据库中的,如下图所示:此时我们就需要一个分布式事务介入,保证所有操作,要么一起提交,要么一起回滚。

m0_71777195的博客 395

OBCP第五章 分布式事务高级技术-分布式两阶段提交

2PC是一个非常经典的强一致、中心化的原子提交协议。中心化指的是协调者(Coordinator),强一致性指的是需要所有参与者(participant)均要执行成功才算成功,否则回滚。

明确的爱,真诚的喜欢,直接的厌恶,站在太阳底下的坦荡,被坚定的选择。 1178

分布式事务的具体实现:两阶段提交(2PC)

分布式事务“顾名思义,指的是涉及到多个分布式系统或者多个数据库的事务操作。在分布式系统中,如果一个事务涉及到多个独立的组件或者服务,每个组件或服务可能位于不同的物理节点上,那么这个事务就被称为分布式事务。在分布式系统中实现分布式事务是一个复杂的问题,因为涉及到多个独立的组件或者服务,可能存在网络延迟、通信故障、节点故障等因素。为了保证分布式事务的一致性和可靠性,需要使用合适的事务管理协议和机制,如两阶段提交(2PC)、三阶段提交(3PC)、基于消息的事务、分布式事务管理器等。

qq_63728673的博客 2894

OceanBase分布式事务以及两阶段提交实现详细设计

基于Oceanbase现有架构,设计了两阶段提交的具体实现流程,已经在各阶段失败的回复流程。在没有全局时钟的情况下,设计了分布式快照读的实现优化。

zhang_shuai_2011的专栏 7674

OceanBase分布式事务以及两阶段提交实现具体设计

眼下OceanBase中还存在updaeserver单点,下一步的开发任务是使得OB支持多点写入,支持多个UPS(及updateserver)。 当中难点是怎样设计两阶段提交的失败恢复以及多机的快照读写,和同事讨论后,形成一个能够work的简单设计版本号,记录在此。 为分布式事务的两阶段提交细化详细流程,拟採用primary record方式实现失败恢复,即在进入commit阶段之...

weixin_30919429的博客 675

分布式事务对于两阶段提交的错误处理

笔者和团队在昆仑分布式数据库中的两阶段提交方式,可以成功避免经典的两阶段提交算法的缺陷。而在此分布式事务处理两阶段提交机制和原理上,笔者和团队增强其容灾能力和错误处理能力,可以做到任意时刻昆仑数据库集群的任意节点宕机或者网络故障、超时等都不会导致集群管理的数据发生不一致或者丢失等错误。本文会详述分布式事务对于两阶段提交算法的错误处理原理和机制及延时损耗~在生产环境的分布式数据库集群的工作场景中,通常只有不到0.01%的分布式事务提交会发生错误,但是我们仍然需要处理所有可能发生的错误。因为哪怕执行了100亿笔

KunLunDB_Linda的博客 879

OceanBase架构解析(一)

文章目录OceanBase架构解析(一)介绍基本架构核心特性OceanBase存储引擎OceanBase事务引擎OceanBase SQL引擎部署方式 OceanBase架构解析(一) 一下内容来自一份PPT,只是大概介绍了OceanBase功能和突出的架构,没有详细的细节实现,有待后续继续学习和分析。 介绍 OceanBase是阿里巴巴、蚂蚁金服自主研发的通用关系型数据库; 它基于分布式架构和普...

weixin_38377637的博客 6731

MySQL分布式事务中的两阶段提交接口XAConnection

XA是X/Open组织提出的分布式事务处理标准,MySQL通过XA协议支持分布式事务的两阶段提交(2PC)。

rgbcn65848的博客 2045

Proxmox VE(PVE)与UPS联动配置:实现智能断电保护方案

本文详细介绍了为Proxmox VE (PVE)服务器配置UPS智能断电保护的完整方案。通过安装和配置apcupsd软件,实现PVE与UPS的联动,可在市电中断、电池电量不足时自动触发安全关机流程,有效保护虚拟机数据与服务连续性。文章涵盖了硬件选择、软件配置、策略设定及实战测试指南,并扩展了网络共享UPS的高级应用。

python9snake的博客 507

分布式事务之两阶段提交

两阶段提交协议 两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,另一个是提交阶段; 准备阶段和提交阶段都是由事务管理器发起的; 我们可以将事务管理器称为协调者,将资源管理器称为参与者。 流程 准备阶段: 协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,则会写redo或者undo日志(Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。 提交阶段: 如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,则协调者向参与者发起提交指令,参

张三李四王五老六 3786

OpenClaw记忆插件升级实战:从memory-lancedb-pro安装到AgentSkill封装

向量数据库作为现代AI应用的核心基础设施,通过将非结构化数据转换为高维向量并利用相似度检索实现语义理解。其原理基于嵌入模型生成向量表示,结合近似最近邻搜索算法实现高效查询。这项技术为智能体系统提供了长期记忆和上下文感知能力,显著提升了对话连贯性与任务执行效率。在AI智能体开发领域,向量数据库常用于知识库构建、对话历史管理和个性化推荐等场景。本文聚焦OpenClaw框架中memory-lancedb-pro插件的部署实践,针对**插件加载顺序**和**Apache Arrow依赖**两大常见痛点,通过封装成可

weixin_42525482的博客 637

【分布式事务-01】分布式事务之2pc两阶段提交

分布式事务之2pc两阶段提交

zhenghuishengq的博客 1868

ComfyUI全自动换装工作流:从零到一的实战指南

本文提供了一份详细的ComfyUI全自动换装工作流实战指南。从环境配置、模型准备到核心工作流架构的逐步拆解,手把手教你搭建一条高效的AI换装流水线。文章深入解析了从输入、预处理、融合到输出的四步核心逻辑,并分享了关键参数调优与进阶技巧,旨在帮助电商从业者、内容创作者及AI爱好者轻松实现高质量、高效率的“一键换装”。

weixin_29198045的博客 894

从数据校准到论文呈现:fsQCA与NCA方法融合的完整实证研究指南

本文详细介绍了fsQCA(模糊集定性比较分析)与NCA(必要条件分析)方法融合的完整实证研究流程,从数据校准到论文呈现。通过软件操作技巧、R语言NCA包高效使用及论文写作规范,帮助研究者避免常见误区,提升研究质量与可靠性。特别适合需要进行组态分析的研究生和学者参考。

weixin_29215391的博客 414

分布式事务中的两阶段、三阶段提交协议

分布式事务中的两阶段、三阶段提交协议 参考链接:http://www.hollischuang.com/archives/681 随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。在分布式一致性一文中主要介绍了分布式系统中存...

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 1万+

直流有刷电机三环PID控制:从硬件配置到软件调试全解析

本文全面解析了直流有刷电机的三环PID控制技术,涵盖从硬件选型(如驱动板、编码器)到STM32软件配置的全过程。详细阐述了位置环、速度环、电流环的串级协同工作原理与调试方法,并提供了位置式PID算法的C语言实现代码及参数整定技巧,旨在帮助开发者实现精准、稳定的电机运动控制。

weixin_29290963的博客 387

分布式事务两阶段提交

分布式两阶段提交

左直拳的马桶_日用桶 3861

YOLOv11旋转目标检测详解:从原理到实战的全面指南

本文介绍了YOLOv11旋转目标检测技术的核心概念、架构设计与应用场景。传统目标检测使用水平边界框(AABB)存在背景噪声大、定位精度低等问题,而旋转边界框(OBB)通过引入角度参数显著提升了检测精度,在遥感、OCR、工业质检等领域具有独特优势。YOLOv11-OBB采用改进的多尺度检测层、CSPDarknet53骨干网络和双通道角度输出机制,在保持实时性的同时实现精确的旋转目标检测。实验表明,该方法在DOTA数据集上达到81.3%的mAP,相比传统方法提升显著,特别适合处理具有旋转特性或高宽比悬殊的目标。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 299

FISCO BCOS 三、多群组部署以及新节点加入群组

本章主要以星形组网和并行多组组网拓扑为例,指导您了解如下内容:了解如何使用创建多群组区块链安装包;了解创建的多群组区块链安装包目录组织形式;学习如何启动该区块链节点,并通过日志查看各群组共识状态;学习如何向各群组发送交易,并通过日志查看群组出块状态;了解群组内节点管理,包括节点入网、退网等;了解如何新建群组。

qq_63235624的博客 2919

分布式事务、XA、两阶段提交、一阶段提交

本文原文连接:http://blog.youkuaiyun.com/bluishglc/article/details/7612811,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统...

709

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1364

分布式事务之2PC两阶段提交

以下是一个简化的 Java 两阶段提交(2PC) 具体实现示例,包含协调者(Coordinator)和参与者(Participant)的核心逻辑。在分布式系统中,业务操作可能跨越多个服务或数据库(如订单服务、库存服务、支付服务),传统单机事务(ACID)无法满足跨网络节点的数据一致性需求。每个参与者代表一个独立的数据库或服务,需支持准备(Prepare)、提交(Commit)、回滚(Rollback)操作。// 创建两个参与者(如数据库DB1和DB2)// 实际提交事务(如更新数据库)

weixin_55010563的博客 926

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2PC(两阶段提交)详解:分布式事务的基石

2PC(两阶段提交)是一种分布式事务协议,它将事务的提交过程分为资源准备和资源提交两个阶段,并由事务协调者来协调所有事务参与者。优点说明原子性要么全部提交,要么全部回滚简单清晰两阶段逻辑容易理解工业标准XA规范的核心,有标准实现2PC是分布式事务的"经典款",提供了最基础的原子性保证,但在性能和可用性上有明显短板。它是理解分布式事务的入门砖,也是后续各种优化方案的起点。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4600

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究

本文原文连接: http://blog.youkuaiyun.com/bluishglc/article/details/7612811 ,转载请注明出处!1.XAXA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transac

Laurence的技术博客 9万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 一次Linux磁盘空间清理的经历
下一篇: 最大公共子序列 vs 最大公共子串
TechNerd
博客等级 码龄14年 5粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值