分布式事务常见解决方案(两阶段、三阶段)传统项目方案

微服务架构下的数据一致性:分布式事务解决方案详解 分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于不同的分布式系统节点上。简单来说,就是一次操作由多个分布在不同服务或系统的子事务组成,这些子事务要么全部成功提交,要么全部失败回滚。跨多个服务或数据源:分布式事务涉及多个独立的服务或数据库,数据分散在不同的物理节点上。执行周期长:相比本地事务,分布式事务通常持续时间更长,因为涉及网络通信和多个系统的协调。复杂的故障处理:需要处理各种分布式场景下的故障,如网络分区、节点崩溃等。数据一致性与可用性的权衡。 阅读详情

分布式事务常见解决方案(两阶段、三阶段)传统项目方案

分布式一致性协议

XA接口

 XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。XA之所以需要引入事务管理器是因为,在分布式系统中,从理论上讲(参考Fischer等的论文),两台机器理论上无法达到一致的状态,需要引入一个单点进行协调。事务管理器控制着全局事务,管理事务生命周期,并协调资源。资源管理器负责控制和管理实际资源(如数据库或JMS队列)

 

Jta规范

 

作为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(即JTS)实现。像很多其他的java规范一样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由以下几种:
1.J2EE容器所提供的JTA实现(JBoss)
2.独立的JTA实现:如JOTM,Atomikos.这些实现可以应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。如Tomcat,Jetty以及普通的java应用。

 

两段提交协议

交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA规范的基础是两阶段提交协议。
 

第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者

第二阶段准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,则会写redo或者undo日志(提交日志和回滚日志),然后锁定资源,执行操作,但并不提交。协调者会向参与者发送一个指令,如果参与者收到指令后,会把该业务逻辑是否执行成功结果返回给协调者。如果参与者都返回执行成功,协调者在第二阶段发送提交事务通知,如果有一方执行失败,就会终止提交。

 

缺点:如果协调者发生宕机,整个就没法指挥协调了。 库存服务和订单服务会一直等待。

 

就绪代表业务逻辑执行成功了 ~

第一阶段:

 

第二阶段:

 

第二阶段是执行阶段,协调者根据所有参与者的反馈,通知所有参与者,步调一致地在所有分支上提交或者回滚。

第二阶段:如果每个参与者明确返回准备成功,则协调者向参与者发送提交指令,参与者释放锁定的资源,如何任何一个参与者明确返回准备失败,则协调者会发送中指指令,参与者取消已经变更的事务,释放锁定的资源。

 

小结:   

  第一阶段提交: 协调者会向参与者发送一个指令,如果参与者收到指令后,都会把该业务逻辑是否执行成功发送给协调者。

  如果参与者都返回为执行成功,协调者在第二阶段发送提交事务通知。如果有一方返回的是执行失败,则终止提交。

 

其实由这个图可以看出 分布式解决方案非常类似于 注册中心!  注册中心 管理服务与服务之间的依赖关系  全局事务 管理每个参与者的事务关系

 

 

 

两阶段提交方案应用非常广泛,几乎所有商业OLTP数据库都支持XA协议。但是两阶段提交方案锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。

 

鉴于二阶段提交协议的缺点 全局事务协调者宕机的问题, 提出了三阶段提交协议 

三阶段提交协议

三阶段提交协议 和两阶段提交协议 最大区别:两阶段准备阶段再加了一个询问阶段。

三阶段提交协议是两阶段提交协议的改进版本。它通过超时机制解决了阻塞的问题,并且把两个阶段增加为三个阶段:

询问阶段:协调者询问参与者是否可以完成指令,协调者只需要回答是还是不是,而不需要做真正的操作,这个阶段超时导致中止。

准备阶段:如果在询问阶段所有的参与者都返回可以执行操作,协调者向参与者发送预执行请求,然后参与者写redo和undo日志,执行操作,但是不提交操作;如果在询问阶段任何参与者返回不能执行操作的结果,则协调者向参与者发送中止请求,这里的逻辑与两阶段提交协议的的准备阶段是相似的,这个阶段超时导致成功

提交阶段:如果每个参与者在准备阶段返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源,这里的逻辑与两阶段提交协议的提交阶段一致

 

 

2PC与3PC提交区别

增加了一个询问阶段,询问阶段可以确保尽可能早的发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生在准备阶段以后,协调者和参与者执行的任务中都增加了超时,一旦超时,协调者和参与者都继续提交事务,默认为成功,这也是根据概率统计上超时后默认成功的正确性最大。

三阶段提交协议与两阶段提交协议相比,具有如上的优点,但是一旦发生超时,系统仍然会发生不一致,只不过这种情况很少见罢了,好处就是至少不会阻塞和永远锁定资源。

 

 

关于Jta+Atomikos 的解决方案:

Jta+Atomikos 属于两阶段提交协议   

后台管理系统的分布式事务解决方案采用Atomikos, 应用场景比较简单,可能会有多个数据源的那种。

 

XA协议:Jta+Atomikos 底层是基于XA协议,主流数据库 MySQL等都支持XA协议。一个规范,能够参与解决分布式事务问题。这个协议规范就是 协调者把指令发送给参与者的过程。

 

传统项目中,比如项目中使用到多数据源的时候大多数采用jta+Atomikos解决分布式事务问题,jta+Atomikos底层是基于XA协议的两阶段提交方案。
XA协议:XA 事务的基础是两阶段提交协议。需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段)。如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段)。Mysql 在这个XA事务中扮演的是参与者的角色,而不是协调者(事务管理器)。

JTA:JTA(java Transaction API)是JavaEE 13 个开发规范之一。java 事务API,用来操作事务。允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。事务最简单最直接的目的就是保证数据的有效性,数据的一致性。

Atomikos:Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器    底层就是遵循了XA协议的规范 
演示jta+atomikos项目
分布式事务解决方案采用Atomikos 后台管理系统

参考:https://www.cnblogs.com/toov5/p/9820227.html

  

 将参与者 连接到同一个协调者  所有的DataSource关联到一起  

 xaDataSource.XX 各种神操作

 

不适合微服务~

 

分布式事务解决方案采用Atomikos  后台管理系统

 

主流数据库 都遵循  协调者 发送消息 给参与者 的差异协议   Atomic就是遵循这个协议的Java框架

jta Java语言操作事务

 

论分布式事务及其解决方案-2024年软考真题 在某大型制造企业 ERP 财务模块开发项目中,作为系统架构师,我针对系统多模块分布式架构带来的事务一致性挑战,摒弃 Seata 框架,采用 Saga 模式为主,并结合基于 Kafka 消息队列的最终一致性方案。编排器按照预定顺序协调这些本地事务的执行,当销售子系统成功创建订单后,编排器通知财务子系统生成应收账款,若该步骤失败,编排器会按照相反顺序依次调用销售子系统的订单撤销补偿操作,将整个事务回滚。准备阶段,协调者向所有参与者发送事务预提交请求,参与者执行事务操作但不提交,随后将执行结果反馈给协调者。 阅读详情

相关推荐

MySQL数据库的分布式事务解决方案

在当今的互联网应用中,随着业务规模的不断扩大,系统架构逐渐从单体架构向分布式架构转变。分布式系统由多个独立的服务和数据库组成,在这种环境下,如何保证数据的一致性和完整性成为了一个关键问题。MySQL作为一种广泛使用的关系型数据库,在分布式系统中也面临着分布式事务的挑战。本文的目的就是详细介绍MySQL数据库的分布式事务解决方案,涵盖常见的分布式事务处理协议和技术,帮助开发者更好地理解和应对分布式事务问题。范围包括对各种解决方案的原理、实现步骤、优缺点的分析,以及实际应用场景的探讨。

2502_91592937的博客 1190

对分布式事务及两阶段提交、三阶段提交的理解

一、分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。 (1)什么是数据一致性 在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 造成事实上的数据不一致。 (2)CAP定理 CAP理论认为在分布式的环境下设计和部署

TimzzZ的博客 2224

Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

将基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理,通过AOP面向切面实现动态实现数据源的切换 http://www.dczou.com/viemall/407.html

分布式事务两阶段提交VS三阶段提交?|通俗易懂

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是 X/Open 公司定义的一套分布式事务标准。X/Open 公司是由多家国际计算机厂商所组成的联盟组织,它建立之初是为了向 UNIX 环境提供标准。分布式事务是指在分布式系统中,多个节点之间进行的事务操作。比...

磊哥聊Java 401

【python快速编程入门(第二版)黑马程序员课后编程题】

python快速编程入门(第二版)黑马程序员课后编程题

weixin_46167259的博客 1万+

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

【事务】CAP理论和分布式事务:两阶段提交与三阶段提交

原文:https://segmentfault.com/a/1190000012534071发布于 2017-12-21 在分布式系统中著有 CAP 理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区容错性(Partition Tolerance)。 一致性:在分布式系统中数据往往存在多个副本,一致性描述的是这些副本中的数据在内容和组织上的一致。 ...

我的笔记本 1321

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战

本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。

weixin_29207439的博客 491

分布式事务,两阶段提交和三阶提交【转载】

一、什么是分布式事务 在分布式系统中,为了保证数据的高可用,通常我们会将数据保留多个副本,同时这些副本会存储到不同的物理机器上,这就是分布式。 为了保证数据的一致性,需要用到分布式事务 1.1 什么是事务? 事务是指对数据的一系列操作要么全部执行要么全部不执行 1.2事务的实现步骤 1.数据库将一系列要执行的操作全部记录成日志 2.逐条执行这一系列操作 3.如果这一系列操作全部执行...

蓝天⊙白云的博客 1233

Arxml文件可视化:当汽车软件架构遇见交互式设计工具

本文探讨了Arxml文件在汽车电子系统开发中的可视化技术,结合AUTOSAR架构标准,介绍了如何利用现代Web技术构建交互式设计工具。通过三维组件关系图、动态数据流展示和版本对比等功能,显著提升开发效率和架构评审质量,适用于MBD和ASPICE开发流程。

weixin_29050271的博客 427

CTF——流量分析题型整理总结

我见过的流量分析类型的题目总结: 一,ping 报文信息 (icmp协议) 二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载) 三,sql注入攻击 四,访问特定的加密解密网站(md5,base64) 五,后台扫描+弱密码爆破+菜刀 六,usb流量分析 七,WiFi无线密码破解 八,根据一组流量包了解黑客的具体行为 例题: 一,ping 报文信息 (icm...

小锤队长的博客 5万+

SpringCloud分布式事务解决方案汇总收集

public AjaxMessageEntity userWithdraw(@RequestBody TPayInfo tPayInfo, HttpServletRequest request) { if(参数校验){ //参数校验没有通过,直接返回参数校验错误 } if(通过redis做并发控制,使同时提现人数不能...

1万+

Window系统下搭建GIT本地服务器

这是一篇在window下搭建git本地服务器的教程,带你一步步搭建出本地的git服务器。

qwer971211的博客 2万+

【分布式】浅谈分布式事务及解决方案

【分布式】浅谈分布式事务及解决方案

blblccc 1996

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 490

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 469

论分布式事务及其解决方案

在分布式系统中,事务管理是实现数据一致性的关键。传统单机事务在分布式环境下面临诸多挑战,无法有效保证各节点之间的数据一致性和操作原子性。分布式事务通过跨服务和跨数据库的协调机制,实现数据一致性和事务完整性。本论文将结合一个项目实例,讨论分布式事务的常见解决方案和具体实施过程。

fudaihb的博客 1720

ssm框架搭建

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

传统事务处理与分布式事务的区别

1.背景介绍 传统事务处理和分布式事务处理是计算机科学领域中的两个重要概念。传统事务处理通常涉及单个数据库系统,而分布式事务处理则涉及多个数据库系统之间的事务处理。在现代互联网和大数据时代,分布式事务处理的重要性逐渐凸显,因为它可以解决多个数据库之间的一致性问题。 在本文中,我们将深入探讨传统事务处理与分布式事务处理的区别,包括背景、核心概念、算法原理、代码实例以及未来发展趋势等方面。 1....

AI天才研究院 797

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

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

分布式事务详解【分布式事务的几种解决方案】彻底搞懂分布式事务

什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。明白上述例子,再来看事务的定义:事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

yygr的博客 1万+

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

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

两阶段提交与三阶段提交

两阶段提交是什么? 两阶段提交非常有名,其原因主要有两点: 一个是历史很悠久; 二是其定义是很模糊的,它首先不是一个协议,更不是一个规范,而仅仅是作为一个概念存在,故从传统的关系统数据库一致的最新的 DistributedSQL 中,我们都可以看到它的身影。 两阶段提交包含哪些角色? 两阶段提交包含协调器与参与者两个角色。 在第一个阶段,协调器将需要提交的数据发送给参与者,同时询问参与者是否能够提交该数据,而后参与者返回投票结果。 在第二阶段,协调器根据参与者的投票结果,决定是提交还是取消这次事务,而后将结

鸭梨的博客 405

分布式事务解决方案(三):方案类型

在分布式系统中,由于数据分散在不同节点上,保证数据的完整性和一致性变得尤为重要。特别是在处理跨数据库的事务时,传统的单机事务机制无法满足要求,因此需要引入分布式事务的概念。本文将对几种常见的分布式事务解决方案进行分类介绍和分析。

架构师吕师傅 1478

分布式事务:核心问题、场景与解决方案

分布式事务是跨多个独立节点完成业务操作并满足ACID特性的技术,解决分布式环境下的数据一致性问题。核心挑战包括网络不确定性、节点故障和协调复杂性。常见应用场景包括电商下单、跨行转账和微服务集成。主流解决方案包括2PC(强一致性但性能差)、基于消息队列的最终一致性(推荐方案)、TCC(业务补偿)和Saga(长流程事务)。关键点在于理解CAP定理权衡,选择适合业务场景的方案。

kijio的博客 1510

分布式事务的可靠解决方案-三阶段提交(3PC)

分布式事务的可靠解决方案-三阶段提交(3PC)

weixin_45226668的博客 1083
上一篇: 关于分布式事务
下一篇: 分布式事务创建表结构(下单扣库存案例数据库)
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值