百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

分布式事务最全详解(看这篇就够了)

ccwgpt 2025-05-02 16:53 31 浏览 0 评论

在如今分布式盛行的时代,分布式事务永远都是绕不开的一个话题,今天就重点详解分布式事务相关的一致性,以及分布式事务的实战解决方案@mikechen

为什么需要分布式事务

在分布式系统中,需要使用分布式事务来解决以下问题:

1.数据一致性问题

当多个服务或系统同时修改同一份数据时,需要确保数据的一致性,避免数据的不一致性。

2.故障恢复问题

在分布式系统中,任何一个服务或系统的故障都可能导致整个系统的故障。

因此,在进行分布式事务操作时,需要确保在任何情况下都能够恢复数据。

3.并发控制问题

在分布式系统中,多个服务或系统同时对同一份数据进行操作,需要通过并发控制来避免数据的冲突和错误。

因此,为了保证分布式系统中数据的一致性和可靠性,需要使用分布式事务来管理事务操作。


分布式事务典型场景

举一个最经典的例子,比如:阿里的淘宝、天猫等网站随着访问量越来越大,数据库需要拆分,需要按照业务为单位来进行拆分。

比如:按照商品、订单、用户等业务为单位进行数据库拆分。

如下图所示:

比如:我的业务里要实现一个:要完成购买商品,下订单这个简单的流程。

这个时候,就需要横跨多个数据库,比如:会涉及到:用户、订单、商品、库存等多个数据库,而这些数据库又是分布到不同的服务器上。

这就会涉及到分布式事务了,从本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。

以前在单个应用的简单场景,变成分布式以后,就没有这么简单了,需要考虑分布式事务了。


分布式事务的解决方案

谈完了分布式事务的来源,这里我再谈下分布式事务的具体解决方案@mikechen

如下图所示:



基于XA协议的两阶段提交 2PC

XA协议的核心是“两阶段提交”(Two-Phase Commit,2PC)协议。

在2PC协议中,分布式事务被分为两个阶段,如下图所示:

1.准备阶段(Prepare Phase)

协调者(事务管理器)向所有参与者(资源管理器)发出prepare请求,参与者执行事务并将undo和redo信息记录在本地事务日志中。如果所有参与者都成功执行了事务并准备提交,则参与者向协调者发送prepared响应,否则发送abort响应。

2.提交阶段(Commit Phase)

如果协调者接收到了所有参与者的prepared响应,则向所有参与者发送commit请求,参与者执行事务提交,并将完成状态写入本地日志中。如果参与者成功提交,则向协调者发送ack响应,否则发送nack响应。


优缺点

两阶段该方案通过协调者和参与者之间的协作来确保所有参与者都执行了事务,并且在所有参与者都准备好提交之后再进行提交。

这种方案具有简单、通用、可靠等优点,但也存在单点故障、性能问题等缺点。


2.事务补偿TCC模式

TCC方案其实是两阶段提交的一种改进,将整个业务逻辑的每个分支显式的分成了Try、Confirm、Cancel三个操作。

如下图所示:

TCC模式的执行过程可以分为以下三个步骤:

1.尝试(Try)

事务参与者在执行事务之前,首先尝试执行事务,并在本地预留资源。在这个阶段,事务参与者需要检查所有必要的条件是否满足,以及是否有足够的资源来执行事务。如果条件满足,事务参与者会将执行结果缓存在本地,等待后续的确认操作。

2.确认(Confirm)

在所有事务参与者都执行完尝试阶段之后,协调者向所有事务参与者发出确认请求,以执行真正的事务提交。在这个阶段,事务参与者需要将缓存的执行结果提交到数据存储中,并释放之前预留的资源。

3.取消(Cancel)

如果在执行确认阶段之前,任何一个事务参与者失败或超时,协调者会向所有事务参与者发出取消请求,以回滚之前执行的所有操作。在这个阶段,事务参与者需要撤销之前预留的资源,并回滚任何之前执行的操作。


优缺点

TCC模式相比于传统的2PC模式,具有更高的可靠性和兼容性,缺点是:对代码有侵入性,增加了代码的复杂度和实现难度。


3.消息队列最终一致性方案

分布式事务消息队列最终一致性方案是一种利用消息队列来实现分布式事务的解决方案,它采用异步提交和最终一致性的方式来保证分布式事务的一致性。

如下图所示:

在这个方案中,消息队列起到了一个缓冲和传输的作用,通过异步提交和最终一致性的方式来实现了分布式事务的一致性。

由于消息队列的高可用性和可靠性,该方案也具有很高的可靠性和可伸缩性。

案例

RocketMQ RabbitMQ等均可实现,RocketMQ 还有专门的事务型消息,新版的kafka也有。

以上

更多分布式架构系列、阿里架构师进阶系列,请查看以下文章:

阿里架构师进阶从0到1全部合集(建议收藏)

相关推荐

土豪农村建个别墅不新鲜 建个车库都用框架结构?

农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...

自建框架结构出现裂缝怎么回事?

三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...

钢结构三维图集-框架结构(钢柱对接)

1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...

三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!

绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...

Casemaker机箱框架结构3D图纸 STEP格式

农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相

回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...

砖混结构与框架结构!究竟有何区别?千万别被坑!

农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...

砖混结构与框架结构,究竟有何区别?千万别被坑!

农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...

6个小众却逆天的App神器,个个都是黑科技的代表

你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...

合肥App开发做一个app需要多少钱?制作周期有多久?

在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...

详解应对App臃肿化的五大法则

编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...

8种移动APP导航设计模式大对比

当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...

数字资产支付 App 的技术框架

开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...

从MyBatis到App架构:设计模式全景应用指南

从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...

取消回复欢迎 发表评论: