今天,我们来聊聊分布式事务

MTK pwm beeper配置记录 如果正常,系统启动后会在/dev/input下生成 一个event节点,使用方法参考标准linux使用。dts相关修改如下,全都在里面,注意一下位置。对应的配置文件中增加如下定义。 阅读详情

前言

我们都知道数据库的事务满足"ACID"特性,A是指事务的原子性,C是指事务的一致性,I指事务的隔离性,D指持久性。

最开始我们的数据量都很小,所有的数据都落在一个数据库中。MySQL数据库单表的最大数据量在百万条左右,随着系统变大,数据越来越多,这个时候我们不得不将数据分布在不同的数据库中存放,也就是常说的数据分片(sharding)。我们可以通过一定的分库策略将同一个交易链路上的数据放到一个数据库中,例如我们可以将一个订单所有产生的数据放到一个数据库中,按照订单号来分库,这样我们在生成订单相关数据的时候可以在单个数据库上开启事务来完成。

这样看似完美的解决方案其实并不完美。例如我们想记录用户维度的订单数据时,这个方案就无能为力了。于是分布式事务应运而生。

分布式系统CAP BASE理论

说到分布式系统,不得不说CAP和BASE理论,它是指导我们分布式系统的理论基础。

CAP理论

加州大学伯克利分校Eric Brewer教授支持一个分布式系统无法满足这样三条特性:

Consistency,一致性:多个操作同时生效,不会出现部分生效的情况

Availability,可用性:客户端的每个请求在服务端能够正确被响应

Partition tolerance,分区容错性:分区中部分节点挂了不会影响整体服务可用性,这也是分布式系统最基本的要求

分区容错性是一个分布式系统最基本的要求,因此一般分布式系统都会满足分区容错性,否则就失去了分布式系统的意义。分布式系统一般会在一致性和可用性上做出取舍。例如牺牲一致性换区可用性,这里说的牺牲一致性是指牺牲掉系统的"强一致性",最终我们的系统还是一致的,即所谓的"弱一致性"或者"最终一致性"。当我们的系统需要保证强一致性时我们不得不牺牲掉可用性:当系统部分节点延迟或者down机整个系统的服务将变得不可用,也因此系统数据是强一致性的。

BASE理论

BASE理论是对CAP理论的进一步扩充:

Basically Available(基本可用)

Soft state(软状态)

Eventually consistent(最终一致性)

基本可用是指我们的系统无法做到百分百可用,但是可以保证例如"3个9"(99.9%)可用。软状态是指允许我们的系统存在中间状态,在最终我们的系统可以达到最终一致性。BASE理论强调的是系统的最终一致性。

分布式事务

目前分布式事务的解决方案主要有:二阶段提交(2PC)、柔性补偿事务(TCC)、本地消息表(异步确保)、MQ事务消息等。

二阶段提交

二阶段事务分为两个阶段:阶段一事务协调者通知各个节点执行事务预提交;阶段二协调者根据各个节点的响应来通知各个节点提交或者回滚事务操作。

两阶段提交这种解决方案属于牺牲了一部分可用性来换取的一致性。

优点: 尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。(其实也不能100%保证强一致)

缺点: 实现复杂,牺牲了可用性,同步阻塞对性能影响较大,不适合高并发高性能场景。

13467292-01022a53112905b1

补偿事务(TCC)

TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段:

Try 阶段主要是对业务系统做检测及资源预留

Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。

Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。

举个例子,假入 Bob 要向 Smith 转账,思路大概是:

我们有一个本地方法,里面依次调用

首先在 Try 阶段,要先调用远程接口把 Smith 和 Bob 的钱给冻结起来。

在 Confirm 阶段,执行远程调用的转账的操作,转账成功进行解冻。

如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法 (Cancel)。

优点: 跟2PC比起来,实现以及流程相对简单了一些,但数据的一致性比2PC也要差一些

缺点: 缺点还是比较明显的,在2,3步中都有可能失败。TCC属于应用层的一种补偿方式,所以需要程序员在实现的时候多写很多补偿的代码,在一些场景中,一些业务流程可能用TCC不太好定义及处理。

13467292-fc3ab781e04457e0

本地消息表(异步确保)

本地消息表这种实现方式应该是业界使用最多的,其核心思想是将分布式事务拆分成本地事务进行处理,这种思路是来源于ebay。我们可以从下面的流程图中看出其中的一些细节:

13467292-07b24c31c10d26c3

基本思路就是:

消息生产方,需要额外建一个消息表,并记录消息发送状态。消息表和业务数据要在一个事务里提交,也就是说他们要在一个数据库里面。然后消息会经过MQ发送到消息的消费方。如果消息发送失败,会进行重试发送。

消息消费方,需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理成功了,如果处理失败,那么就会重试执行。如果是业务上面的失败,可以给生产方发送一个业务补偿消息,通知生产方进行回滚等操作。

生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。如果有靠谱的自动对账补账逻辑,这种方案还是非常实用的。

这种方案遵循BASE理论,采用的是最终一致性,笔者认为是这几种方案里面比较适合实际业务场景的,即不会出现像2PC那样复杂的实现(当调用链很长的时候,2PC的可用性是非常低的),也不会像TCC那样可能出现确认或者回滚不了的情况。

优点: 一种非常经典的实现,避免了分布式事务,实现了最终一致性。

缺点: 消息表会耦合到业务系统中,如果没有封装好的解决方案,会有很多杂活需要处理。

MQ事务消息

有一些第三方的MQ是支持事务消息的,比如RocketMQ,他们支持事务消息的方式也是类似于采用的二阶段提交,但是市面上一些主流的MQ都是不支持事务消息的,比如 RabbitMQ 和 Kafka 都不支持。

以阿里的 RocketMQ 中间件为例,其思路大致为:

第一阶段Prepared消息,会拿到消息的地址。

第二阶段执行本地事务,第三阶段通过第一阶段拿到的地址去访问消息,并修改状态。

也就是说在业务方法内要想消息队列提交两次请求,一次发送消息和一次确认消息。如果确认消息发送失败了RocketMQ会定期扫描消息集群中的事务消息,这时候发现了Prepared消息,它会向消息发送者确认,所以生产方需要实现一个check接口,RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。

优点: 实现了最终一致性,不需要依赖本地数据库事务。

缺点: 实现难度大,主流MQ不支持。

13467292-ed597187dcddafd6

MQ事务消息

总结

目前分布式事务主要有:二阶段提交、TCC柔性事务、本地消息表(异步确保)和MQ事务消息等解决方案。二阶段提交可以确保数据的强一致性,其他的解决方案属于最终一致性解决方案。

分布式事务虽然能保证数据的强一致性,但是性能低。使用前需要确定是否真的需要分布式事务。

现在加群即可获取Java工程化、高性能及分布式、高性能、高架构、zookeeper、性能调优、Spring、MyBatis、Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限及相关视频资料,群号:923116658

点击链接加入群聊【Java架构解析】:https://jq.qq.com/?_wv=1027&k=5e1QsXb

高速信号设计中的关键测试项目与测试仪器详解 高速信号设计是一个多维度协同优化的系统工程。时域分析如同外科手术刀般精准定位物理缺陷,频域分析提供传输通道的频谱指纹,信号质量评估量化系统鲁棒性,接收端容限测试验证极端工况下的可靠性,协议一致性确保生态互操作性,而电源完整性则直指诸多信号问题的根源。 阅读详情

相关推荐

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3357

一句话说明白java中分布式事务及应用场景

关于分布式事务,目前处理的理论支撑是CAP理论:分布式系统在设计时只能在一致性(Consistency)、可用性(Availability)、 分区容忍性(Partition Tolerance)中满足两种,无法兼顾三种。 大家可以先去了解什么是CAP,在这里,我就是做一下浓缩的总结。首先,分布式事务的场景,什么情况下会涉及到分布式事务呢?这里一句话说清楚:当有一个比较复杂的业务要处理,一个大的事务里有多个小的事务,并且这些小的事务可能分布在不同的服务上,只要有一个小事务处

pangwenyu1989620的博客 1133

拆解歌尔2718硅麦:2.75mm超小封装背后的MEMS技术解析

本文深度解析歌尔2718硅麦的2.75mm超小封装技术,探讨MEMS麦克风在微型化过程中的声学性能与结构可靠性平衡。通过ASIC芯片堆叠、纳米级应力控制等创新技术,歌尔2718在TWS耳机和智能手机中实现卓越性能,同时克服微型化带来的声学挑战。

weixin_28292761的博客 610

分布式架构最全详解(万字图文总结)

分布式架构是指将系统的各个组件和服务分布在多台独立的计算机节点上,通过网络进行通信和协作,以实现高性能、高可用性和可伸缩性的系统架构。

weixin_42029738的博客 1万+

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1147

大众奥迪诊断不求人:手把手解析SAE J2819(CAN TP2.0)协议报文与连接流程

本文深入解析大众奥迪车型诊断核心标准SAE J2819(CAN TP2.0)协议,详细拆解连接建立流程与报文控制字段。通过实战案例展示通道设置、参数协商等关键步骤,提供诊断设备配置建议和常见故障排查技巧,帮助工程师掌握汽车诊断通信协议的精髓。

weixin_30421809的博客 396

集中式架构与分布式概念,大白话解释

3分钟读懂系统架构演变 了解时下最火的微服务概念 本人将从大到小给你讲授系统架构的演变(此处的大小不是对比项目的大小,而是单个模块的大小) 集中式架构 → 垂直拆分→ 分布式 → (服务治理) → 微服务 咱们先从最大的来: 集中式架构: 用我的话来讲它最大最笨重了,为什么说它笨重呢,因为它的功能啊,服务啊,所有的代码都写进了一个模块里,如果只是一个小的系统只有几百号人使用的,这样写在一起其实也是...

博客 1万+

保姆级教程:给你的Jetson Orin NX换个‘大房子’——新SSD初始化与JetPack 6.x刷机全流程

本文提供Jetson Orin NX存储升级与JetPack 6.x系统部署的完整指南,涵盖SSD选型、分区策略、刷机流程及性能优化技巧。通过实测数据展示如何提升AI模型加载速度33%,并分享温度管理、I/O调度等实战经验,助力开发者突破边缘计算存储瓶颈。

weixin_42715608的博客 156

大白话理解分布式事务

实现分布式事务

weixin_42073629的博客 460

机器人轨迹规划——三次样条轨迹1(基于速度的求解方法)

三次样条轨迹是利用三次样条曲线来对给定的一系列点进行插值,从而得到一个光滑的轨迹。三次样条因为每段的多项式次数最高都是三阶的,所以可以得到2阶导数连续,也就是加速度连续的轨迹。假设给定了一系列的点q0q1q2qnq0​q1​q2​...qn​,以及每个点对应的参数t0t1t2tnt0​t1​t2​...tn​,计算一条三次样条曲线sts(t)st,该曲线通过给定的点q0q1q2qnq0​q1。

出门搔白首,若负平生志 1471

RK3588平台开发系列讲解(硬件篇-功能外设2)

RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。这些控制器与PHY的内部复用图如下:USB3.0 OTG0 控制器支持SS/HS/FS/LS, 内嵌的USB2.0(HS/FS/LS)信号采用USB2.0 OTG PHY, 信号名见下图的红色方框内;RK3588目前仅此接口支持做Fireware的Download,应用中请务必要预留出。

whm128的博客 2508

触发器 无法启用分布式事务_5分钟理解架构师必备的:分布式事务解决方案

为了保证分布式环境下数据强一致性,需要引入分布式事务,而分布式事务由于网络环境的不确定性,天生就很难实现。分布式下,我想要强一致性为了保证分布式事务的正确性,目前互联网领域有几种流行的解决方案,但是大部分都没有像XA事务一样形成标准的工业规范。但是这些方案在某些特定的行业或者业务场景下却得到了越来越多的开发者的认可。避免分布式事务此方案提倡尽量避免分布式事务,不仅仅是因为分布式事务的难度,更是因为...

weixin_39713833的博客 247

188、LLC谐振变换器的样机调试实战(EMI测试)

本文分享了LLC谐振变换器EMI调试的实战经验。作者通过300W电源案例,指出LLC的EMI问题主要来自谐振腔共模电流和死区振铃,并提出三板斧解决方案:优化功率回路布局、合理选择共模电感、正确配置X/Y电容。文章详细分析了谐振电容位置、MOSFET走线、变压器屏蔽等关键设计要点,并列举示波器探头、滤波器接地等常见误区。最后强调EMI调试70%依赖布局优化,建议预扫测试、数据记录并保留6dB余量。全文以实际案例贯穿,为LLC电源EMI设计提供了实用指导。

Jack010169的博客 54

MySQL 中的事务是两阶段提交,我们见到的很多分布式事务也都是两阶段提交的,例如 Seata,那么为什么要两阶段提交呢?一次直接提交了不行吗?今天我们来聊聊这个话题。

@[toc] 为什么要两阶段提交?一阶段提交不行吗? 小伙伴们知道,MySQL 中的事务是两阶段提交,我们见到的很多分布式事务也都是两阶段提交的,例如 Seata,那么为什么要两阶段提交呢?一次直接提交了不行吗?今天我们来聊聊这个话题。 1. 什么是两阶段提交 1.1 binlog 与 redolog binlog binlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这个日志有印象,当我们搭建 MySQL 主从的时候就离不开 binlog(传送门:..

duan18888的博客 687

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

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

#HotDB直播# 今天晚20:00, 热璞数据库甜飒小姐姐与你一起聊聊金融级分布式事务数据库 欢迎围观

m0_46473154的博客 141

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

聊聊分布式事务,再说说解决方案

来源:https://www.cnblogs.com/savor…作者:Savorboard 前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 [ CAP](http://www.cnblogs.com/savorb… 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每...

weixin_32819955的博客 1112

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

聊聊分布式事务,说说解决方案

本文探讨了分布式事务在微服务架构中的重要性及解决方案。首先介绍了数据库事务的ACID特性,并延伸到分布式系统面临的CAP定理和BASE理论。随后详细分析了五种分布式事务处理方案:两阶段提交(2PC)牺牲可用性保证一致性;补偿事务(TCC)通过Try-Confirm-Cancel机制实现;本地消息表采用最终一致性;MQ事务消息依赖消息队列;Sagas模型将长事务拆分为短事务。最后介绍了.NET领域的开源解决方案CAP项目,填补了该领域工具空白。文章指出应根据业务场景选择合适方案,在一致性和可用性之间取得平衡。

ywl470812087的博客 10万+

面试官:聊聊分布式事务

前言开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,...

公众号:Java后端 452
上一篇: 微服务为什么一定要用docker
下一篇: 微服务架构分布式事务方案
普通网友
博客等级 码龄7年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值