(二)分布式事务

从二将军问题开始,把分布式事务的分类与应用场景一次讲清 前言 不知不觉距离上一篇的更新已经有好几天了,后台也有很多小伙伴催更,奈何事情比较多,期望我能坚持下去~最近几篇我们聊一聊分布式事务。 二将军问题 我们先来看个故事,相信会有助于你对分布式事务的理解。二将军问题是一个计算机领域一个经典的问题。 「故事背景」黑白两军交战之际,两股白军将黑军被围困在山谷之中;山谷两侧任意一股白军都比山谷中的黑军人数少,因此单独一只白军向黑军发起进攻,必败无疑,但是两股白军人数总和却比黑军人数多,若能同时向黑军发起进攻,则可大胜。而山谷左右侧的白军相互通信(告知进攻时间) 阅读详情

分布式事务

分布式事务(Distributed Transaction Processing,DTP)是指在分布式环境下,操作多个数据库的事务。

XA规范

XA是由X/Open组织提出的分布式事务的规范。
X/Open DTP 模型( 1994 )包括应用程序( AP )、事务管理器( TM )、资源管理器( RM )、通信资源管理器( CRM )四部分。
XA是RM和TM的交互规范和接口定义。
XA协议采用两阶段提交方式(2PC)来管理分布式事务。

在这里插入图片描述

  • AP:这个角色要做两件事情,一方面是定义构成整个事务所需要的所有操作,另一方面是亲自访问资源节点来执行操作。
  • RM:这个角色是管理着某些共享资源的自治域,比如说一个MySQL数据库实例。在DTP里面,还有两个要求,一是RM自身必须是支持事务的,二是RM能够根据将全局(分布式)事务标识定位到自己内部对应的事务。
  • TM:这个角色能与AP和RM直接通信,协调AP和RM来实现分布式事务的完整性。主要的工作是提供AP注册全局事务的接口,颁发全局事务标识(GTID之类 的),存储/管理全局事务的内容和决策并指挥RM做commit/rollback。

MySQL

XA语法

  • XA {START|BEGIN} xid:启动一个XA事务 (xid 必须是一个唯一值)
  • XA END xid: 结束一个XA事务
  • XA PREPARE xid:准备
  • XA COMMIT xid:提交XA事务
  • XA ROLLBACK xid:回滚XA事务
  • XA RECOVER:查看处于PREPARE 阶段的所有XA事务

使用案例

mysql> XA START 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO test (name,tel) VALUES ('123','123');
Query OK, 1 row affected (0.00 sec)

mysql> XA END 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> XA PREPARE 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> XA COMMIT 'xatest';
Query OK, 0 rows affected (0.00 sec)

Spring Boot XA实现

https://blog.youkuaiyun.com/ACMer_AK/article/details/78742148

2PC

两阶段提交(2PC:two-phase commit protocol)是一个非常经典的强一致、中心化的原子提交协议。中心化是指协议中存在两类节点:一是中心化协调者节点(coordinator),二是N个参与者节点(partcipant)

准备阶段

Coordinator发送Prepare请求给所有的Partcipant,每一个Partcipant会根据自身执行结果返回成功/失败。

提交阶段

若所有的Partcipant返回成功,则Coordinator发送Commit请求给所有的Partcipant,那么Partcipant就会提交事务并释放资源
若存在一个Partcipant返回失败/超时,则Coordinator发送Rollback请求给所有的Partcipant,那么Partcipant就会回滚事务并释放资源

缺点

  • 性能:可以看到在事务执行过程中,所有Partcipant都是被阻塞的,如果整个事务时间很长,则对性能影响很大
  • 协调者单点故障:若Coordinator发生故障,Partcipant会被阻塞,事务会处于一个中间状态,即使重新选举新的Coordinator,也无法解决Partcipant阻塞问题
  • 数据不一致:在提交阶段中,若出现网络问题,导致部分Partcipant接受不到提交消息,则会导致数据不一致

3PC

三阶段提交协议(3PC:three-phase commit protocol),是2PC的改进版本,增加了超时机制以及CanCommit阶段

  • 超时机制:3PC对于Coordinator和Partcipant都设置了超时时间,而2PC只有Coordinator具有超时机制,解决了Partcipant和Coordinator无法通讯时,Partcipant可释放资源,降低了阻塞时长和范围
  • CanCommit阶段:多设置了一个缓冲阶段保证了在最后提交阶段之前各参与节点的状态是一致的

CanCommit阶段

Coordinator发送CanCommit请求给所有的Partcipant询问是否可以执行事务提交操作,Partcipant若认为可顺利执行,则返回YES,并进入PreCommit阶段,否则返回NO

PreCommit阶段

若Partcipant全部返回YES,Coordinator发送PreCommit请求,并进入Prepared阶段,而Partcipant接受到PreCommit请求后,则会开始执行事务操作(未提交状态),并返回结果
若存在Partcipant返回NO/超时,Coordinator执行事务中断,Coordinator就会向Partcipant发送abort请求。

DoCommit阶段

若Partcipant全部返回YES,Coordinator发送DoCommit请求,Partcipant接受到DoCommit请求后,则提交事务。如果Partcipant无法及时接收到Coordinator的doCommit或者rebort请求时,会在等待超时之后,继续进行事务的提交。
若存在Partcipant返回NO/超时,Coordinator就会向Partcipant发送abort请求并中断事务

缺点

相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。

TCC

补偿事务(TCC:Try-Confirm-Cancel),其核心思想是:“针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)”

Try阶段

Confirm阶段

Cancel阶段

框架
https://github.com/changmingxie/tcc-transaction

基于消息队列的最终一致性事务

参考文献

https://www.jianshu.com/p/6c1fd2420274
https://blog.youkuaiyun.com/luckyjiuyi/article/details/46955337
https://www.jianshu.com/p/dd6a340e50b2
https://www.cnblogs.com/wudimanong/p/10340948.html

分布式事务(二)分布式事务方案 分布式事务(二)强一致性事务 阅读详情

相关推荐

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例)

本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。

3c4x5z6v7b的博客 625

基于XA协议的分布式事务

前言 最近在项目中使用了分布式事务,就稍加整理了一下以博客的形式共享出来。目前实现分布事务有很多方式包括2PC、TCC、事务消息等。因为业务需要我项目中采用的是传统的2PC方式的解决方案。2PC既两阶段提交,又叫做 XA Transactions,MySQL从5.5版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持,它的优点是强一直性,缺点则是降低了可用性,这里由于本篇博客以实践为主就不过多赘述理论知识了。在前一篇博客中我介分享了单体工程多数据源、多事务的实...

hamster204的专栏 838

【CUT&TAG分析-加了spike in的样品】

使用 Bowtie2 或 Subread (subjunc) 来构建大肠杆菌的索引。bowtie2比对时设置参数–local, 局部比对。

weixin_57975238的博客 1400

分布式事务(指导篇)

本文介绍了分布式系统中的一些重要理论和实践方法,帮助我们理解如何在复杂的分布式环境中实现事务的一致性。通过CAP定理,我们了解到在分布式系统中,一致性、可用性和分区容错性之间需要做出权衡。BASE理论则提供了一种更加灵活的设计思路,通过基本可用、软状态和最终一致性来实现高可用性和可靠性。AP模式(最终一致性):强调高可用性和最终一致性,适用于对实时一致性要求不高但对系统可用性要求较高的场景,如电商平台和社交网络。CP模式(强一致性)

MADAO的博客 663

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 320

Windows 2000系统下载与全套镜像安装:从镜像校验到驱动兼容性实战指南

操作系统镜像文件是安装系统的核心载体,其完整性直接影响部署成败。哈希校验作为验证文件一致性的基础手段,能有效避免因镜像损坏导致的安装中断。对于已停止支持的操作系统,如Windows 2000,其镜像获取与安装更具挑战性,但它在工业控制、专用终端及怀旧技术研究中仍有不可替代的价值。通过理解镜像命名规则、服务包等级(如SP4)及引导方式,结合虚拟机或老硬件平台,可以顺利完成部署。同时,驱动兼容性是老系统运行的关键瓶颈,需针对性解决网卡、显卡等外设驱动问题。本文从镜像下载、校验到安装配置,系统梳理了Windows

weixin_32050773的博客 343

分布式事务及解决方案(2PC、3PC、TCC事务补偿、本地消息表)

参考 面试必问:分布式事务六种解决方案 分布式事务的四种解决方案

m0_45406092的博客 1451

数字电路与逻辑设计实验二 组合逻辑电路

1.组合逻辑电路功能测试 (1)用 2 片 74LS00 组成图 2.1 所示逻辑电路。为便于接线和检查,在图中要注明 芯片编号及各引脚对应的编号。 (2)图中 A、B、C 接逻辑开关,Y1,Y2 接发光管电平显示。 (3)按表 2.3 要求,改变 A、B、C 输入的状态,填表并写出 Y1,Y2 的逻辑表达式。 (4)将运算结果与实验结果进行比较。 2.测试用异或门(74LS86)和与非门组成的半加器的逻辑功能。 根据半加器的逻辑表达式可知,半加 器 Y 是 A、B 的异或,而进位 Z 是 A

欢迎交流学习心得 1278

【分布式】分布式事务基础概念(2PC,3PC,TCC)

文章目录XA协议两阶段提交协议(2PC)2PC 过程准备阶段提交阶段2PC总结三阶段提交协议(3PC)3PC过程阶段一 CanCommit阶段二 PreCommit阶段三 DoCommit3PC总结TCC(Try-Confirm-Cancel)流程设计要点TCC总结 XA协议 在讲分布式事务之前,必然需要先了解XA协议。XA是一个协议,由Oracle Tuxedo系统提出的XA分布式事务协议。 XA协议定义了分布式事务参与方的两个角色: 事务协调者(TM=Transaction Manager) 资源管

BookSea的博客 3583

在 SAP ABAP 里可靠地对接 FTP 服务器:从连接、命令到传输与排错的完整实战

本文详细介绍了在SAP ABAP中实现FTP文件交换的完整技术方案。文章首先解析了FTP协议的双连接特性(控制连接与数据连接),强调保持控制连接的重要性。随后详细说明了ABAP中FTP操作的四步标准流程:建立连接(包含HTTP_SCRAMBLE加密)、执行命令、断开连接和关闭RFC通道。文章提供了实战案例代码,演示如何将FTP文件复制到应用服务器再读取进内表处理,特别指出后台作业与前台操作的关键差异。最后总结了常见错误排查要点,包括连接模型、路径设置和资源释放等问题。全文通过SAP标准函数模块的调用顺序、典

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

自动驾驶大模型---小米&华科的ORION端到端方案

本文介绍了小米汽车与华中科技大学联合开发的ORION自动驾驶端到端方案。该框架创新性地将视觉语言模型(VLM)与自动驾驶系统结合,包含QT-Former特征提取模块、大语言模型(LLM)推理模块和生成式规划器三大核心组件。通过视觉感知与语言理解的深度融合,ORION能更准确地理解人类指令并生成合理轨迹,同时提升系统的可解释性。实验证明,该方案在准确性、泛化能力和决策透明度方面均有显著优势。ORION框架为自动驾驶技术提供了新思路,有望推动行业向更安全、智能的方向发展。

智能汽车人的博客 2005

浅析分布式事务2PC、3PC、TCC

很浅显的介绍了一下2PC、3PC、TCC的概念,如有错误还望温柔指正,分布式事务一直都是面试中比较热点的问题,也是进阶高级工程师必备的知识点。

flynetcn的专栏 2230

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径

ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E

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

java分布式事务协调器,分布式事务- 二阶段协议

一、前言在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来保证原子性了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。二、二阶段协议单个数据库实例内的事务我们称为本地事务,需要保证多个数据源的操...

weixin_29280657的博客 422

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

分布式事务,二阶段和三阶段提交

本文介绍了分布式事务的二阶段提交和三阶段提交机制。二阶段提交包含准备和提交两个阶段,但存在协调者单点故障和数据不一致的风险。三阶段提交通过增加预备阶段和改进提交流程,降低了阻塞风险并增强了容错能力,但仍可能存在部分参与者故障导致的数据不一致问题。两种方案各有优缺点,实际应用中需要结合业务场景进行选择和优化,最终通过补偿机制实现数据一致性。文章还提供了相关的参考资料和示例图解。

qq_46130027的博客 569

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mysql:深度解析MySQL二阶段提交原理及在分布式事务中的实践

MySQL的二阶段提交(2PC)是InnoDB存储引擎实现分布式事务的关键机制,它确保了跨多个资源的事务原子性。让我们深入分析其工作原理。

weixin_43290370的博客 729

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

分布式事务二

分布式事务二更多干货分布式事务处理一分布式事务二分布式事务处理三分布式事务四_基于可靠消息的最终一致性分布式事务五_基于可靠消息的最终一致性_异常流程分布式事务六_常规MQ队列分布式事务七_幂等性设计分布式事务八_可靠消息最终一致性方案分布式事务九_基于可靠消息的最终一致性代码分布式事务10_最大努力通知形势柔性事务解决方案:TCC(两阶段型、补偿型)支付宝 分布式事务服务 DTS 一分布式事务服...

架构师的成长之路的博客 6013

RocketMQ事务消息 - 二阶段提交如何保证分布式事务的终极一致性?

RocketMQ事务消息 - 二阶段提交如何保证分布式事务的终极一致性?

weixin_46619605的博客 1197

二、分布式事务

一组操作会产⽣多个数据库session会话 此时就会出现分布式事务。

白羊座的橙子 749

分布式事务(二)

分布式事务协议 下面介绍几种实现分布式事务的协议。 两阶段提交协议 2PC 分布式系统的一个难点是如何保证架构下多个节点在进行事务性操作的时候保持一致性。为实现这个目的,二阶段提交算法的成立基于以下假设: 该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进行网络通信。 所有节点都采用预写式日志,且日志被写入后即被...

谈少华的博客 1005

分布式事务(二)、刚性事务之 2PC、3PC

在前面的文章中我们提到了刚性事务遵循ACID原则,满足强一致性,本篇讲解刚性事务的标准实现2PC(二阶段提交)和3PC(三阶段提交)。

王义凯 的博客 1506

分布式事务背景分析(二)

分布式事务具体的实现框架 1.Atomikos 互联网中的分布式事务解决方案 由于在分布式事务中,由于强一致性,会导致系统性能,效率降低,分布式事务提供的ACID保证是以损害系统的可用性、性能与可伸缩性为代价的。 为什么分布式事务强一致性会导致性能损耗? 因为在分布式事务中使用的是二阶段提交协议,他在第一阶段会询问每一个子系统,做准备,如果其中任何一个子系统失败,他都会失败,而且,当子系统不断增加...

sinat_30594513的博客 364
上一篇: (一)本地事务
下一篇: Java字符编码
嘿嘿不错
博客等级 码龄11年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值