这六种目前最常见分布式事务解决方案!请拿走不谢

分布式事务最经典的七种解决方案 前言: 随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家。 基础理论 在讲解具体方案之前,我们先了解一下分布式事务所涉及到的基础理论知识。 我们拿转账作为例子,A需要转100元给B,那么需要给A的余额-100元,给B的余额+100元,整个转账要保证,A-100和B+100同时成功,或者同时失败。看看在各种场景下,是如何解决这个问题的。 事务 把多条语句作 阅读详情

一、分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

以商品流水账单为例,我们拆分为商品购买系统,订单系统,支付系统。

用户看中一件商品,点击购买。

商品购买系统响应用户的点击,向订单系统插入一条订单信息。

跳转到支付系统完成支付。

在用户整个购买商品的过程中,我们需要保证事件1,2,3在没有异常的情况下全部执行成功,一旦某个系统抛出异常,都需要回滚。

那么,如何保证各个子系统的操作具有一致性呢?这就是我们下面提到的分布式事务的解决方案。

在这里,文章中没有提到分布式一致性协议,下面简单列举一下,有兴趣的读者可以参考其他详细资料:

  • 两阶段提交协议
  • 三阶段提交协议
  • Paxos协议
  • Raft协议

二、分布式事务的解决方案

1.两阶段提交方案/XA方案

该方案基于两阶段提交协议,因此也叫做两阶段提交方案。在该分布式系统中,其中 需要一个系统担任协调器的角色,其他系统担任参与者的角色。主要分为Commit-request阶段和Commit阶段

请求阶段:首先协调器会向所有的参与者发送准备提交或者取消提交的请求,然后会收集参与者的决策。

提交阶段:协调者会收集所有参与者的决策信息,当且仅当所有的参与者向协调器发送确认消息时协调器才会提交请求,否则执行回滚或者取消请求。

该方案的缺陷:

  • 同步阻塞:所有的参与者都是事务同步阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
  • 单点故障:一旦协调器发生故障,系统不可用。
  • 数据不一致:当协调器发送commit之后,有的参与者收到commit消息,事务执行成功,有的没有收到,处于阻塞状态,这段时间会产生数据不一致性。
  • 不确定性:当协调器发送commit之后,并且此时只有一个参与者收到了commit,那么当该参与者与协调器同时宕机之后,重新选举的协调器无法确定该条消息是否提交成功。

XA方案的实现方式可以使用Spring+JTA来实现,可以参考文章:Springboot+atomikos+jta实现分布式事务统一管理

2.TCC方案

TCC方案分为Try Confirm Cancel三个阶段,属于补偿性分布式事务。

Try:尝试待执行的业务

这个过程并未执行业务,只是完成所有业务的一致性检查,并预留好执行所需的全部资源

Confirm:执行业务

这个过程真正开始执行业务,由于Try阶段已经完成了一致性检查,因此本过程直接执行,而不做任何检查。并且在执行的过程中,会使用到Try阶段预留的业务资源。

Cancel:取消执行的业务

若业务执行失败,则进入Cancel阶段,它会释放所有占用的业务资源,并回滚Confirm阶段执行的操作。

以一个电商系统用户购买商品的流水线为例。

Try阶段:

在Try阶段成功之后进入Confirm阶段,如有任何异常,进入Cancel阶段。

Confirm阶段

Cancel阶段

假设库存扣减失败,此时需要回滚取消事务。

TCC方案适用于一致性要求极高的系统中,比如金钱交易相关的系统中,不过可以看出,其基于补偿的原理,因此,需要编写大量的补偿事务的代码,比较冗余。不过现有开源的TCC框架,比如TCC-transaction。

3. 本地消息表

本地消息表分布式事务解决方案是国外的eBay提出的一套方案。

需要注意的是,该方案中,在A系统中,我们首先写入业务表,然后写入消息表,然后将消息发送到MQ中,在B系统中需要先写入消息表,这是为了保证消息重复消费,为了保证消息消费的幂等性,我们可以使用数据的唯一键来约束。

当B系统执行成功之后,需要通知A系统执行成功,此时可以使用一个监听器,如Zookeeper,ZK监听到执行成功更新A系统成功。然后开始发送下一条消息。

A系统中需要有一个后台线程,不断的去判断A系统的状态为待确认的消息,设置超时机制,如果超时,重新发送到MQ中。直到执行成功。

可以看出,本地消息表方案需要写入消息表中,如果在高并发的场景下会进行大量的磁盘IO,因此该方案不适用于高并发场景。

4.可靠消息最终一致性方案

该方案基于本地消息表进行优化,不使用本地消息表,而是基于MQ,比如阿里的RocketMQ就支持消息事务。

在该方案中,首先A系统需要向MQ中发送prepare消息,然后执行A系统的业务,写入数据库成功之后向MQ发送confirm消息,当消息为confirm状态时,B系统就可以消费到消息,消费成功之后返回ACK确认消息给MQ。

需要注意的是。需要保证B系统消费消息的幂等性,可以借助第三方系统。比如在redis中设置标识,标明已经消费过该消息,或者借助ZK基于分布式锁的原理,创建节点,重复消费消息,创建失败。

5.最大努力通知方案

最大努力通知型( Best-effort delivery)是最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务,且被动方处理结果 不影响主动方的处理结果。典型的使用场景:如银行通知、商户通知等。

在该系统中,A系统执行完本地事务,向MQ发送消息,最大努力通知服务消费消息,比如消息服务,然后调用B系统的接口,执行B系统的本地事务,如果B系统执行成功则OK,否则不断重试,重复多次之后还是失败的话就放弃执行。

分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ 最早的分布式事务应用架构很简单,不涉及服务间的访问调用,仅仅是服务内操作涉及到对多个数据库资源的访问。当一个服务操作访问不同的数据库资源,又希望对它们的访问具有事务特性时,就需要采用分布式事务来协调所有的事务参与者。对于上面介绍的分布式事务应用架构,尽管一个服务操作会访问多个数据库资源,但是毕竟整个事务还是控制在单一服务的内部。如果一个服务操作需要调用另外一个服务,这时的事务就需要跨越多个服务了。四种模式,https1.4.01.2.0Seata是什么?一阶段,这些就不再赘述了。总之,... 阅读详情

相关推荐

常见的分布式解决方案

文章目录概念理论CAPBASE一致性模型强一致性弱一致性最终一致性方案2PC/XATCC补偿模式 概念   事务是单个逻辑单元组成的一组操作,执行这组操作时要么全成功,要么全失败。事务的特性包含一致性、原子性、隔离性和持久性。 原子性是指这组操作是一个整体,要么不执行,要么全部执行完,中间出现任何情况的打断(如意外断电)这组事务都不成功。 隔离性是指两组事务操作同一份数据是互补想干,就像隔离操作似的。 持久性是指事务提交后就永久的修改数据了。 一致性是指事务执行前后原来一致的数据和数据库仍然是一致的。比如订

晰中的博客 925

分布式事务原理及解决方案

1 引言 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕单机事务,分布式事务以及分布式事务的处理方式来展开。 2 事务 事务提供一种“要么什么都不做,要么做全套(All or Nothing)”的机制,她有ACID四大特性 原子性(Atomicity):事务作为一个整体被执行,包含在其中...

weixin_34199335的博客 3079

Frida实战:如何用adb快速连接网易mumu模拟器进行参数Hook(附常见CPU架构问题排查)

本文详细介绍了如何使用Frida和adb快速连接网易MuMu模拟器进行参数Hook,包括环境配置、架构适配、Frida-server部署及常见问题排查。特别针对CPU架构兼容性问题提供了实用解决方案,帮助开发者高效完成逆向调试任务。

weixin_29274969的博客 291

七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)

在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。本文详解介绍七种常见分布式事务的原理以及优缺点和适用场景(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)

张维鹏的博客 9万+

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 333

DSP TMS320F280049之CCS工程的建立(库函数版)

TMS320F280049 DSP是TI最新出的一款C2000系列的DSP,主频为100MHZ,功能较为强大,具有较多的片上模拟外设。这一节主要讲述如何新建F280049的CCS工程。 Step1.下载文件: 下载C2000Ware软件并安装。下载地址如下: http://www.ti.com.cn/tool/cn/C2000WARE?keyMatch=C2000Ware%2...

fanxianyan1993的博客 1万+

springboot分布式事务解决方案_这六种目前最常见分布式事务解决方案!请拿走不谢...

专注于Java领域优质技术,欢迎关注作者:不清不慎 来自:架构师社区作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人!一、分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务...

weixin_39630909的博客 978

candence layout快捷键

摁住鼠标左键再框选:选中 摁住鼠标右键再框选:放大 选中之后,滚动鼠标滚轮进行放大缩小。 F:回到全局 shift+V:缩小 键盘的箭头:移动视图 F1:显示帮助文档Candence help F2:保存 点击r,画出矩形时不双击鼠标,点击F3,可以设置尺寸。 Creat-Shape-Path Creat-Wiring-Bus:画多根线。F3设置线宽、间距等。 选中金属后,Shift+G画保护环guard ring。F3可以设置距离金属的间距、保护环的形状。 Path和Rectang

weixin_45861827的博客 2658

atomikos 事务超时_这6种最常见分布式事务解决方案!请拿走不谢!

作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术!架构师社区合伙人!一、分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全...

weixin_35983453的博客 915

[PCIE5.0] 4.2.3.2 Encoding of Presets

• 发射器预设:发射器预设值用4位二进制编码,表示不同的预设设置(P0 到 P10),这些设置定义了信号的传输特性。• 接收器预设提示:接收器预设提示是通过3位二进制编码告诉接收器建议的增益值,用于调整接收器的灵敏度(适用于8.0 GT/s数据速率)。

系统固件工程师 575

银河麒麟编译libjpeg库并配置qt环境

银河麒麟下编译libjpeg库并配置qt环境验证

小米的修行之路 1017

分布式事务六种解决方案

事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。事务的四个特征: 1、Atomic原子性 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。

软件开发实战项目分享 2192

总结目前开源的视频生成/视频编辑大模型

随着Sora的爆火,视频生成和视频编辑受到了越来越多的关注。这篇博客总结一下目前开源的视频生成和视频编辑的大模型,并分析他们各自的优缺点,以及在自己进行科研任务或者工作中应该如何选用对应的开源模型,希望能给从事这一领域研究和使用的小伙伴们帮助。

沉迷单车的追风少年 3548

分布式事务解决方案

分布式事务解决方案 分布式事务解决方案。

xajh_czbk的博客 120

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

分布式事务的六种处理方式

分布式事物的六种解决方案

qq_64169170的博客 2064

Statistics and Machine Learning Toolbox

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

分布式事务六种解决方案【面试总结】

面试必问:分布式事务六种解决方案 点赞再看,养成习惯 前言 事务想必大家并不陌生,至于什么是 ACID,也是老生常谈了。不过暖男为了保证文章的完整性确保所有人都听得懂,我还是得先说说 ACID,然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。 事务 严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。 一致性(Consist

virtual_users的博客 223

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

分布式事务6种解决方案(超详细)

typora-root-url: ./分布式事务图片 typora-copy-images-to: ./分布式事务图片 分布式事务六种解决方案 前言 事务想必大家并不陌生,严格意义上讲事务应该具备ACID,目前常见的分布式事务解决方案包括2PC、3PC、TCC、本地消息表、消息事物、最大努力通知等。 ACID 原子性:一个事物内的所有操作都要全执行或者都不执行 一致性:事务前后数据的完整性必须保持一致 隔离性:多个事务并发执行,不能被其他事物的操作所干扰 持久性:事务一旦提交,它的改变应该是持久性的

义笔记 2万+
上一篇: 双亲委派模型:大厂高频面试题,轻松应对
下一篇: Java对象的内存分配过程是如何保证线程安全的?
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值