分布式基础-常见分布式事务解决方案

(超全篇)常见的分布式事务解决方案有哪些? 方案只是提供参考,分布式应用也不可能只采用一种处理方案。根据业务需求选择合适的方案,对实时性和一致性需求不同的场景区别对待。强一致性方案如 2PC 和 TCC 适用于关键业务。对于性能要求高、容错能力强的场景,可优先考虑 RocketMQ 消息事务或本地消息表。 阅读详情

本文主要参考自相关书籍和网络文章,并附上自身的一些理解,如有遗漏或错误,还望海涵并指出。谢谢!

一.分布式事务问题及2PC/3PC协议

1.单机ACID事务

传统的ACID指的是单机情况下(数据库只存在本地库),数据库所具备的原子性、一致性、隔离性与持久性的这四大特性,但是随着项目越来越大,数据量越来越多,单台数据库的磁盘系统被占满了或是单张表数据量太大,导致客户端请求数据库时存在阻塞问题或者是效率问题,此时的做法是将数据库进行分库分表,将数据按一定的规则分配到不同的机器上,此时数据会在多个分布于不同服务器中的数据库,所以产生了分布式事务的问题。

2.分布式事务产生

分布式事务指的是跨系统、跨机器之间的事务,由于其不满足单机的ACID特性,所以相较于普通事务来说复杂了很多。以下是可能产生分布式事务的一些原因:

  1. 垂直切分:将单个表按业务细化出多张表,每张表存放着不同的字段,当需要使用到多张表时将其连接在一起(join)即可获取到所需的数据。

  2. 水平切分:使用多台数据库或表,将原先位于一个库或表的数据按某种规则映射到不同的机器上,以此来减少原先单库或单表中所含的数据大小。

在这里插入图片描述
3. 按业务流程拆分:
通常,出现分库分表的场景还和业务拆分相关,一个很大的系统往往会拆分为多个小系统,每个小系统之间通过RPC来进行调用,相互协调完成业务,这也会出现分布式事务的问题:

在这里插入图片描述

3.两阶段提交协议

两阶段提交协议(2PC)是处理分布式事务的一种基本协议,两阶段指的是prepare和commit/rollback阶段,并且划分出了事务管理器与资源管理器角色:

在两阶段提交协议中,有一个事务管理器和多个资源管理器,事务管理器分两阶段协调资源管理器。

在第一阶段,事务管理器询问所有资源管理器准备是否成功(prepare)。

如果所有资源均准备成功,那么在第二阶段事务管理器会要求所有资源管理器执行提交操作(commit)。

如果任一资源管理器在第一阶段返回准备失败,那么事务管理器会要求所有资源管理器在第二阶段执行回滚操作(rollback)。

通过事务管理器的两阶段协调,最终所有资源管理器要么全部提交,要么全部回滚,最终状态都是一致的。

在这里插入图片描述

4.三阶段提交协议

三阶段提交协议(3PC)相较于2PC来说,新增了一个预提交阶段(preCommit)与超时机制来再次校验当前是否全部资源管理器(参与者)都能够提交成功(或超时),若成功则进行真正的提交阶段,若不成功则回滚。

  • 引入超时ACK
    在这里插入图片描述

  • 三阶段提交成功(commit)
    在这里插入图片描述

  • 三阶段提交失败(rollback)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ahp0WZYC-1586005545020)(http://note.youdao.com/yws/res/18480/886CAAEECB214AE896D91E88DA18F763)]

二.业务侵入的解决方案

1.消息队列

对于分布式事务问题,最简单的一种方式是使用消息队列来作为消息表,在业务的调用流程中通过消息队列来传达事务的执行结果,然后下一个流程作为消费者消费这个执行结果即可。由于要借助消息队列来完成这个过程,所以这种做法是有业务侵入的。

1.1、执行过程

在这里插入图片描述

如上图所示,methodA方法与methodB方法分别部署在不同的服务器众,需要修改不同的数据库,所以存在分布式事务问题,如果methodA执行失败,那么methodB也应该回滚,methodA与methodB需要同时保证成功与回滚。

所以这里可以使用一个RocketMQ来实现事务消息的传达:

1.在执行methodA之前,首先将当前的事务标识封装成消息并传入MQ中,此时使用RocketMQ的话可以把这个消息设置为prepare消息,消费者此时并不会消费掉prepare消息,然后执行methodA方法,此时会出现以下两种异常回滚情况:

1.1、MQ无法接受消息(宕机或阻塞时间过长):
此时整个流程视作失败,不会执行到methodA,并且methodB也不会受影响,可以继续重试发送消息,到一定次数之后抛出异常信息。

1.2、methodA执行失败:此时由于MQ中的消息是prepare消息,并不会被methodB消费,MQ在一定时间后自动把prepare消息给清除掉。

2.当MQ正常接收到prepare消息,并且methodA也执行成功了,此时将MQ中的该prepare消息的状态修改为正式消息,methodB对该消息进行消费,两者同时成功。


1.2、优缺点

使用MQ解决分布式事务问题有如下的优点和缺点:

优点:简单易实现,并且随着MQ集群的出现和RocketMQ的prepare机制,使得这种方案具备高可用性和高性能,能达到最终一致性。是最常见的解决方案。

缺点:消费者只能成功,不能失败,若消费者失败也不能回滚前者的事务;具有一定的业务侵入性。

2.TCC
1.1、执行过程

TCC是一种经典的2PC解决方案,也就是将整个事务控制过程分为Try、Confirm和Cancel阶段,通过Try阶段来对所有的参与者进行资源的检查与预留,如果Try阶段全部成功,那么就对所有参与者进行Confirm;如果Try阶段出现一者失败,那么就对所有参与者进行Cancel。

由于Try、Confirm、Cancel 3个方法均由业务编码实现,所以TCC是具备强业务侵入性的。

在这里插入图片描述
例如,现在有两个系统A和B要做转账业务,要从A系统的数据库中进行扣款,并且对B系统的数据库中进行款项的增加,如何保证分布式事务呢?

在使用TCC之前的做法是直接从A中扣款并向B中加款:

update A set money -= 30 where id = 1; # 对A扣款
update B set money += 30 where id = 1; # 对B加款

如果改为TCC模式的话,那么有:

  • Try 操作:资源的检查和预留。在扣款场景,Try 操作要做的事情就是先检查 A 账户余额是否足够,再冻结要扣款的 30 元(预留资源);此阶段不会发生真正的扣款。
  • Confirm 操作:执行真正业务的提交。在扣款场景下,Confirm 阶段做的事情就是发生真正的扣款,把 A 账户中已经冻结的 30 元钱扣掉。
  • Cancel 操作:预留资源的释放。在扣款场景下,扣款取消,Cancel 操作执行的任务是释放 Try 操作冻结的 30 元钱,使 A 账户回到初始状态。

在这里插入图片描述

1.2、并发控制

在实现TCC时,应当考虑并发性问题,将锁的粒度降到最低,以最大限度提高分布式事务的并发性。以A账户扣款为例,“账户A上有100元,事务T1 要扣除其中的30元,事务T2也要扣除30元,出现并发”。在一阶段Try 操作中,分布式事务T1和分布式事务T2 分别冻结资金的那一部分资金,相互之间无干扰。

这样在分布式事务的二阶段,无论T1是提交还是回滚,都不会对T2 产生影响,这样T1和T2可以在同一笔业务数据上并行执行。

在这里插入图片描述

1.3、幂等保证

由于网络可能出现数据包重传的情况,所以需要考虑Try、Confirm和Cancel这三个阶段的幂等性,也就是Try、Confirm、Cancel 执行一次和执行多次的业务结果是一样的。

在这里插入图片描述

1.4、优缺点

优点:性能提升,具体业务来实现控制资源锁的粒度变小,不会锁定整个资源;数据最终一致性 基于Confirm和Cancel的幂等性,保证事务最终完成确认或者取消,保证数据的一致性。

缺点:TCC会侵入业务过程,并且有可能需要修改数据库表结构来支持。

3.Saga
1.1、执行过程

Saga事务核心思想是将长事务拆分为多个本地短事务,由Saga事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作。

Saga事务基本协议如下:

每个Saga事务由一系列幂等的有序子事务Ti组成。
每个Ti都有对应的幂等补偿动作Ci,补偿动作用于撤销Ti造成的结果,补偿过程也被称为冲正过程
。

可以看到,和TCC相比,Saga没有“预留”动作,它的Ti就是直接提交到库。

在这里插入图片描述

例如现在T1、T2、T3为扣减库存、创建订单、支付订单,如果在支付订单时失败了,那么就对原先的操作做回退,也就是补偿冲正:C3支付回滚、C2订单回滚、C1库存回滚,使得数据回到最开始的状态。
在这里插入图片描述

1.2、服务编排

可以将Saga的各事务做成服务编排,制订好每个事务之间的调用顺序和回退顺序,这样可以将整个Saga事务的流程清晰化和规范化:
在这里插入图片描述

1.3、优缺点

优点:实现简单,并且整个Saga事务的流程都十分地清晰,基于消息队列构建的Saga事务还可以避免单点问题。

缺点:具有业务侵入性,需要制订好每个子事务失败后对应的回滚(冲正)操作。

三.业务非侵入的解决方案

看完了业务侵入型的解决方案, 下面来看看两种典型的非业务侵入型解决方案:FMT与XA。

1.FMT
1.1、执行过程

FMT(Framework-managed transaction)即框架管理事务,是一种无侵入的事务解决方案。该模式下,分布式事务框架会托管所有的事务操作,事务的一阶段和二阶段操作均由框架自动生成。

FMT、一阶段:拦截业务SQL语句,保存SQL执行前的快照,执行SQL,并且添加相应的行锁,避免出现并发冲突。

在这里插入图片描述
FMT、二阶段:执行其他业务SQL,若都成功,那么删除一阶段中产生的锁和快照;若其一失败,则重做快照,回滚数据,删除行锁。

在这里插入图片描述

1.2、优缺点

优点:整个事务处理过程由框架自动化完成,无需人工参与,无业务侵入性。

缺点:由于基于框架来对SQL、事务等进行拦截,所以会有性能损耗(譬如需要使用注解、反射、动态代理等机制)。

2.XA
1.1、执行过程

XA模式是另外一种无侵入的分布式事务解决方案,不同于FMT的是,XA模式下,所有一阶段和二阶段都由数据库来完成,而不是由框架来完成。其原理与FMT相似,都是借助了快照来完成回退操作。

在这里插入图片描述

1.2、优缺点

优点:主流的数据库都实现了XA分布式事务方案,所以可以方便地实现。

https://blog.youkuaiyun.com/l1028386804/article/details/79769043

缺点:严重依赖于数据库自身的规范和接口,不能高效拓展。

四.总结

在这里插入图片描述

分布式事务的解决基础是2PC和3PC协议。

2PC和3PC协议都划分出两个角色:事务发起者(事务管理器)和跟随者(资源管理器)。

2PC在第一阶段,事务管理器询问所有资源管理器准备是否成功(prepare)。如果所有资源均准备成功,那么在第二阶段事务管理器会要求所有资源管理器执行提交操作(commit)。如果任一资源管理器在第一阶段返回准备失败,那么事务管理器会要求所有资源管理器在第二阶段执行回滚操作(rollback)。通过事务管理器的两阶段协调,最终所有资源管理器要么全部提交,要么全部回滚,最终状态都是一致的。

3PC相对于2PC来说,增加了超时ACK判断以及在真正提交之前增加了预提交阶段(pre commit)来保证事务能够全部提交成功。

分布式事务的常见解决方案分为两大类,一类是业务侵入点、另一类是业务非侵入的。

业务侵入的有MQ、TCC、Saga这三种解决方案。MQ的优点是实现简单并且不会存在单点问题,但是需要使用特定的MQ譬如RocketMQ中的Half Message才能够满足需求,并且消费者对于消息的消费是一定需要成功的;TCC是一种经常使用的方案,它的做法是将整个分布式事务拆分为三个部分:Try、Confirm和Cancel,在Try阶段进行资源的检查与预留,在第二阶段进行事务的统一Confirm和Cancel;Saga的做法是将长事务拆分成顺序执行的子事务,如果其中一个子事务执行失败,则需要继续相应的事务补偿、回滚和数据冲正。

非业务侵入的解决方案有FMT和XA两种选择,FMT的思路是由框架来对SQL进行拦截,并且保存之前的快照,在第二个阶段中如果全部事务都执行成功那么就删除之前的快照并且释放掉行锁,如果执行失败,那么会执行之前的快照。XA和FMT的做法是类似的,不过XA的两个阶段都由数据库自身来保证。

最后,其实每一种方案都有各自的优点与缺点,要结合自身业务的情况和系统的特性来选择具体的方案,选择性地牺牲某些方面以保证某些方面。

五.Thinks

  • https://www.bilibili.com/video/BV1JE411r7p7?from=search&seid=6646201043947197043
  • https://juejin.im/post/5c0e5bf8e51d45063322fe50#heading-20
  • http://springcloud.cn/view/413#Title-H2-46
  • https://juejin.im/post/5cac36326fb9a06882258c41#heading-2
【知识简略】说说分布式常见问题及解决方案:分布式锁、分布式事务、分布式session、分布式任务调度; 分布式系统(Distributed System)是指由多个独立计算机通过网络通信协议连接起来协同工作,共同完成一个共同目标的系统。在分布式系统中,这些计算机节点是物理上分离的,每个节点都有自己的内存、处理器和存储设备,并通过消息传递或远程过程调用(RPC)等方式相互通信和协调。分布式系统的主要目标是提高系统的可靠性和可用性、增强计算能力、实现资源共享和负载均衡,同时也带来了复杂性,如数据一致性、并发控制、容错和网络延迟等问题。 阅读详情

相关推荐

分布式场景常见问题及解决方案

分布式场景常见问题及解决方案 前言: 本文主要是根据平常学习过程中遇到的一些分布式场景常见问题,并作出了解析,有不对或者需要补充的地方,希望广大的程序员朋友们及时改进,另外,想要学习,分布式的朋友,我提供一张分布式的学习路线思维导图,望可以给你们一点建议。 下面进入正题 一、分布式锁 分布式锁是在分布式场景下一种常见技术,通常通过基于redis和zookeeper来实...

Javazhoumou的博客 3911

分布式事务

一、什么是分布式事务 1、本地事务 本地事务只的是本地数据库事务;例如mysql 可以通过begin或者start transaction开启一个事务,在事务提交之前操作如果中间某个原子操作失败了会触发回滚,通过commit提交事务。如果不显式的开启事务,mysql会默认开启一个事务来执行sql操作。 事务的四个特性:原子性、一致性、隔离性、持久性 2、undo和redo 本地事务通过undo log来进行回滚操作,通过redo log保证事务提交前宕机了事务的恢复; 数据在写入磁盘之前都会缓存在内存中,在

专栏 613

5大陷阱+实战:C#分布式事务隔离级别,从‘数据打架’到‘零风险’的华丽转身!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。

java专栏 1644

分布式事务初探

1. 分布式事务 1.1. BASE理论 1.2. 解决方案 1.2.1. 两阶段提交/XA 1.2.2. SAGA 1.2.3. TCC 1.2.4. 本地消息表 1.2.5. 事务消息 1.2.6. 最大努力通知 1.2.7. AT事务模式 1.3. 异常处理 1.3.1. 空回滚 1.3.2. 幂等 1.3.3. 悬挂 1.3.4. 拓展方案:子事务屏障 1 分布式事务 分布式事务是指事务的发起者、资源及资源管理器和事务协调者分别位于分布式系统的不同节点之上。 本..

beilvxiya的博客 263

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

QoderWake 与 Qoder 工具生态详解

Qoder CLIQoder SDKQoderWake谁在用你(开发者)你的程序你的数字员工谁在跑你的终端会话你的应用进程Daemon 后台进程什么时候跑你启动时你的代码调用时7×24 持续运行怎么触发键盘输入函数调用定时/事件/API/IM有记忆吗会话级 + 文件无多层持久记忆能协作吗Subagent多 Waker + IM 群组核心价值编码效率集成灵活性自主生产力一句话总结。

驽马不舍 972

【分布式技术】分布式事务深入理解

分布式事务是指在分布式系统中,跨越多个网络资源(如数据库、消息队列等)的事务处理。在分布式系统中,事务需要确保多个服务或资源之间的操作要么全部成功,要么全部失败,以保持数据的一致性和完整性。

wendao76的专栏 2980

手把手教你解决USB批量传输中512字节整数倍数据丢失问题

本文详细解析了USB批量传输中512字节整数倍数据丢失问题的根源,并提供了通过零长度包(ZLP)的解决方案。文章涵盖USB协议核心机制、ZLP实现代码示例(包括Android、Linux和Windows平台)、调试技巧及性能优化建议,帮助开发者彻底解决这一常见问题。

smartcontract5的博客 266

FMT/AT模式分析

1、目前undolog和redolog的存储都会走一次查询,我理解可以使用sql分析获取获取redlog,省去redlog的查询,减少数据库查询耗时和链接占用。 2、对于脏读采取select for update,感觉性能不太好,能够采取类似OB的MVCC方式,后面需要再研究下。 ...

wt_better的博客 897

ESP32-P4实战:LVGL V9.4 PPA加速配置与性能对比

本文详细介绍了如何在ESP32-P4平台上配置LVGL V9.4的PPA硬件加速功能,通过启用PPA加速显著提升图形处理性能并降低CPU占用率。文章包含环境准备、配置步骤、性能对比及常见问题解决方案,帮助开发者高效利用ESP32-P4的PPA加速器优化嵌入式GUI应用。

rice5的博客 1192

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

分布式事务.补偿事务

TCC Saga 基于事务的事务 业务模型分 2 阶段设计 允许空回滚 防悬挂控制 幂等控制 Bytetcc TCC-transaction DTX EasyTransaction Hmily TX-LCN

记录 分享 成就 2706

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7335

分布式事务理论基础

在一阶段,Seata 会拦截“业务 SQL”,首先解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,然后执行“业务 SQL”更新业务数据,在业务数据更新之后,再将其保存成“after image”,最后生成行锁。在执行 Prepare 步骤过程中,如果某些参与者执行事务失败、宕机或与协调者之间的网络中断,那么协调者就无法收到所有参与者的 YES 响应,或者某个参与者返回了 No 响应,此时,协调者就会进入回退流程,对事务进行回退。

qq_43663493的博客 506

STM32开发 -- 4G模块开发详解(1)

这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

不积跬步,无以至千里 5万+

OpenClaw 技术架构解析-网关层(上)

OpenClaw 网关层是架构核心中枢,承接Channel层消息,串联消息路由器、会话状态管理器等五大组件,负责消息分发、会话管理、状态统筹、上下文维护等关键职责,是连接Channel层与AI执行引擎的核心桥梁,保障多渠道交互稳定、有序运行。

wend的博客 714

分布式专题

一:分布式事务 1、理论基础 分布式事务主要区分本地事务 什么是本地事务(Local Transaction)?本地事务也称为数据库事务或传统事务(相对于分布式事务而言)。尤其对于数据库而言,为了数据安全,提供了以下的几个步骤来完成本地事务的提交以及回滚。其具备ACID四特性。 分布式事务是指组成事务的参与者,每个业务部分都分别部署在不同的服务器上。在微服务架构中多个节点的协调工作必须保持原子性,多个节点的逻辑必须同时成功或者同时失败。不能出现部分节点成功,部分失败的情况。一次大的操作由不同的小

m0_64378422的博客 5040

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

吊打面试关之分布式事务

吊打面试官之分布式锁1、什么是分布式锁2、有哪些分布式锁解决方案?3、为什么选择基于Redis分布式锁?1、基于数据库实现分布式锁2、基于ZooKeeper实现分布式锁3、基于Redis实现分布式锁4、如何实现基于zookeeper分布式锁5、如何实现基于redis分布式锁 1、什么是分布式锁        我认为就是在同一个系统中访问不同服务器能做到控制共享资源的访问的一种互斥机制(解决方案)。    &n

Java学习之乐的博客 779

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

分布式事务核心知识点总结

分布式事务的核心挑战与理论权衡 摘要:分布式事务指跨多个独立节点的原子操作,需确保所有操作整体成功或失败。相比本地事务,分布式事务面临网络通信、多节点协调等复杂性问题,难以严格保证ACID特性。CAP定理揭示分布式系统无法同时满足一致性、可用性和分区容错性,通常需在CP或AP间取舍。BASE理论作为AP策略的实践指导,通过基本可用、软状态和最终一致性来保障高可用性。这些理论为不同业务场景下的分布式事务实现提供了基本原则。

jsiwhhsisisjs的博客 1420

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java程序员:这个知识点不理解透彻,怎么能做好分布式架构?

如果想在技术线上深耕和谋求发展,成为高级工程师、资深工程师或者架构师,掌握分布式系统知识已经成为了必要的一环。不管是目前流行的SOA 架构,还是蓬勃发展的微服务和 Serverless 架构,都是在分布式的基础上构建的,业务开发中的框架选型、注册中心,以及服务拆分之后面临的分布式事务问题、分布式锁,也都是分布式系统所关注的。

weixin_66896902的博客 146

从分布式到微服务,阿里架构师分享的架构宝典,简直绝了

不同的应用场景需要适配不同的解决方案,无论是根据CAP定理还是BASE理论,我们知道,无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。如何评估出业务对事务的优先级,将技术与业务结合,需要坚实的理论基础和扎实的实践经验。随着用户增长,并发请求增加以及业务越来越复杂,架构设计往往不得不由单体向分布式系统演进,而分布式事务成了影响架构落地的首要难点。如上图所示,分布式事务有多种解决方案。总得看来,很难做到有高一致性的同时,也有高性能,同时在实现上也有一定的难度。

公众号:该用户快成仙了 214

分布式理论与分布式事务

CAP 分布式系统的CAP理论是由Eric Brewer于1999年首先提出的,又被称作布鲁尔定理(Brewer’s theorem),CAP是对Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容忍性)的一种简称,如下图所示: CAP定理告诉我们,一个分布式系统不可能同时满足一致性(Consistency),可用性(Availability)和分区容错性(Partition tolerance)这三个基本需求,最多只能同时满足其

ma_xiao_qi的博客 211

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

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

秃了也弱了 9185

分布式事务的解决方案总结

一、分布式事物 1.1 数据库事务 原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID 1.2 分布式事物产生原因 分布式事物产生的原因 分布式事务产生的场景 在分布式系统,都会垂直拆分数据库,分为支付数据库、订单数据库、积分数据库、优惠全数据库等,业务组成,分为多...

做最专业的总结 大师 1万+

分布式 - 分布式事务面试题

文 1 分布式事务面试题 现在Java面试,分布式系统、分布式事务几乎是标配。而分布式系统、分布式事务本身比较复杂,大家学起来也非常头疼。 最为常见的面试题: 问:分布式事务了解吗?你们是如何解决分布式事务问题的? (标准答案:见末尾) 问题1、分布式事务产生的背景? 在传统的单体项目中,多个不同的业务逻辑使用的都是同一个数据源,使用的都是同一个事务管理器,所以不会存在事务问题。 在分布式或者微服务架构中,每个服务都有自己的数据源,使用不同事务管理器,如果A服务去调用B服务,B服务执行失败了,

Pastxu的小屋 1万+
上一篇: 分布式基础-分布式共识之Paxos、Raft算法
下一篇: 分布式基础(8)-常见分布式ID生成方案
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值