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

【分布式事务两阶段提交】 在分布式系统中,保证数据的一致性是一个重要挑战,两阶段提交(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

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

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

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

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

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

m0_71777195的博客 395

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

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

weixin_56319483的博客 7866

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

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

qq_63728673的博客 2894

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

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

zhang_shuai_2011的专栏 7674

OceanBase架构解析(一)

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

weixin_38377637的博客 6731

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

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

KunLunDB_Linda的博客 879

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

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

weixin_30919429的博客 675

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

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

rgbcn65848的博客 2045

超详细网安学习路线(Day1-Day2)

渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。简单来说,就是合法去入侵别人的系统,来帮助其找出漏洞,增强防护能力。

aobulaien001的博客 3389

分布式事务之两阶段提交

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

张三李四王五老六 3786

Origin科研绘图——桑基图

是一种用于展示“流动”(flow)关系的可视化图表,常用于呈现能量流、物质流、资金流、信息流等在不同节点之间的传递和分配情况。它最大的特点是用“宽度可变的流线”来直观表示数量大小——流线越宽,代表流量越大,因此特别适合理解复杂系统中资源从哪里来、到哪里去、以及不同路径所占比例。为该流程对应的数量。只需将各个流程逐项填写在 A、B、C 三列即可,流程的排列顺序并非关键,确保起点、终点及对应数值准确才是最重要的。与柱状图、饼图不同,桑基图不仅展示“多少”,还展示“从哪到哪”。至此,本期教程就结束啦。

weixin_41301530的博客 1394

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

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

zhenghuishengq的博客 1868

团子杂记:SAP收入确认工具RAR(Revenue Recognition&Reporting)在新收入准则下的应用

SAP收入确认工具RAR知识分享

Lucas1211的博客 4282

开关变换器分析:大信号模型与小信号模型

是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。

创新改变世界! 1906

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

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

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

微信小程序消息推送实战:从模板消息到订阅消息的进阶指南

本文详细解析了微信小程序消息推送的核心机制,重点对比了模板消息与订阅消息的差异与应用场景。模板消息适用于支付成功等强即时性业务回执,而订阅消息则需用户授权,更适合物流提醒等可预期通知。文章提供了从授权、配置到发送的完整实战指南,并分享了常见的避坑技巧与性能优化建议,帮助开发者构建高效、合规的用户触达体系。

weixin_29231027的博客 593

分布式事务两阶段提交

分布式两阶段提交

左直拳的马桶_日用桶 3861

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 234

Claude Code 学习笔记之一:理解 Agentic Loop 与内置工具

本文介绍了Claude Code这一终端智能助手的工作原理与使用方式。作者从ABAP开发经验出发,指出学习Claude Code的高级用法具有长期价值。文章详细解析了Claude Code的Agentic Loop机制:通过大语言模型进行推理,借助各类工具执行任务,并循环收集上下文、执行操作、验证结果三个步骤。系统阐述了Claude Code支持的五大类工具及其扩展方式,说明了其访问本地资源的范围和自治处理能力,同时介绍了权限模式等安全机制。最后提供了从小任务开始、充分探索、及时引导、使用CLAUDE.md

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 544

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

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

709

上万条对话白分析了?智能客服质检避坑指南:90%团队倒在这些误区

当前客服质检普遍存在投入产出失衡的现象,根源在于十大误区:过度关注单点技术指标而忽视端到端解决能力、僵化的话术模板限制AI应变、数据孤岛阻碍知识进化、盲目追求拟人化牺牲效率、传统整改机制跟不上机器速度等。破局需重构质检体系,包括建立决策树质检法、设计复杂问题测试集、构建实时数据闭环、重置AI专属评价指标、实施分钟级热修复机制等。关键在于将质检从被动纠错升级为主动赋能,通过根因分析、场景化反馈、标准化评分和数据驱动优化,打造"问题诊断-改进-验证"

2202_75469062的博客 1541

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

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

weixin_55010563的博客 926

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

Laurence的技术博客 9万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值