【分布式面试高频】- 04 分布式事务的解决方案(2PC TCC 可靠性消息 最大努力通知)

分布式与微服务核心区别:部署形态与架构风格如何选型 在系统架构演进中,分布式与微服务是两个经常被混淆的概念。分布式系统描述的是多个节点通过网络协作完成同一任务的物理部署形态,解决算力、存储、并发和可用性等单机瓶颈;微服务则是一种业务架构风格,强调按业务边界拆分为独立部署、独立伸缩的小服务。两者并非对立,而是包含关系:微服务架构天然具备分布式特征,但分布式系统不一定是微服务,例如Hadoop、Redis Cluster等都属于典型的分布式系统。理解这一区别,有助于在实际项目中做出合理的技术选型。分布式锁、分布式事务、分布式缓存等经典问题,本质上都属于分布式系统 阅读详情

【分布式面试高频】- 04 分布式事务的解决方案(2PC TCC 可靠性消息 最大努力通知)

4.1 网络二将军问题

这里给出一个二将军问题的简化版本:

一支白军被围困在一个山谷中,山谷的左右两侧是蓝军。困在山谷中的白军人数多于山谷两侧的任意一支蓝军,而少于两支蓝军的之和。若一支蓝军对白军单独发起进攻,则必败无疑;但若两支蓝军同时发起进攻,则可取胜。两只蓝军的总指挥位于山谷左侧,他希望两支蓝军同时发起进攻,这样就要把命令传到山谷右侧的蓝军,以告知发起进攻的具体时间。假设他们只能派遣士兵穿越白军所在的山谷(唯一的通信信道)来传递消息,那么在穿越山谷时,士兵有可能被俘虏。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HK1SOItr-1625745814123)(imgs\0.png)]

只有当送信士兵成功往返后,总指挥才能确认这场战争的胜利(上方图)。现在问题来了,派遣出去送信的士兵没有回来,则左侧蓝军中的总指挥能不能决定按命令中约定的时间发起进攻?

答案是不确定,派遣出去送信的士兵没有回来,他可能遇到两种状况:

  • 命令还没送达就被俘虏了(中间图),这时候右侧蓝军根本不知道要何时进攻;
  • 命令送达,但返回途中被俘虏了(下方图),这时候右侧蓝军知道要何时进攻,但左侧蓝军不知道右侧蓝军是否知晓进攻时间。

类似的问题在计算机网络中普遍存在,例如发送者给接受者发送一个 HTTP 请求,或者 MySQL 客户端向 MySQL 服务器发送一条插入语句,然后超时了没有得到响应。请问服务器是写入成功了还是失败了?答案是不确定,有以下几种情况:

  • 可能请求由于网络故障根本没有送到服务器,因此写入失败;
  • 可能服务器收到了,也写入成功了,但是向客户端发送响应前服务器宕机了;
  • 可能服务器收到了,也写入成功了,也向客户端发送了响应,但是由于网络故障未送到客户端。

无论哪种场景,在客户端看来都是一样的结果:它发出的请求没有得到响应。为了确保服务端成功写入数据,客户端只能重发请求,直至接收到服务端的响应。

网络二将军问题的存在使得消息的发送者往往要重复发送消息,直到收到接收者的确认才认为发送成功,但这往往又会导致消息的重复发送。 例如电商系统中订单模块调用支付模块扣款的时候,如果网络故障导致二将军问题出现,扣款请求重复发送,产生的重复扣款结果显然是不能被接受的。因此要保证一次事务中的扣款请求无论被发送多少次,接收方有且只执行一次扣款动作,这种保证机制叫做接收方的幂等性。

4.2 2PC两阶段提交

两阶段提交(2PC), 通过 引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。

(1)准备阶段:协调者询问参与者事务是否执行成功,参与者发回事务执行结果。询问可以看成一种投票,需要参与者都同意才能执行。

(2)提交阶段:如果事务在每个参与者上都执行成功,事务协调者发送通知并让参与者提交事务;否则,协调者发送通知让参与者回滚事务。

需要注意的是:在准备阶段,参与者只是执行了事务,但是还未提交。只有在提交阶段受到协调者发来的通知后,才进行提交或者回滚。

存在问题:

  • 性能差。在准备阶段,要等待所有的参与者返回,才能进入阶段二。在这期间,各个参与者上面的相关资源被排它锁锁住,参与者试图使用这些资源的本地事务只能等待。因为存在这种同步阻塞问题,所以影响了各个参与者的本地事务并发度。
  • 在准备阶段完成后,如果协调者宕机,所有的参与者都收不到提交或者回滚命令,导致所有参与者“不知所措”。
  • 在提交阶段,协调者向所有的参与者发送了提交指令,但是如果如果一个参与者未返回ACK,那么协调者不知道这个参与者内部发生了什么(由于网络二将军问题的存在,这个参与者可能根本没收到提交指令,一直处于等待接收提交指令的状态;也可能收到了,并成功执行了本地提交,但返回的 ACK 由于网络故障未送到协调者上),也就无法决定下一步是否进行全体参与者的回滚。

4.4 3PC三阶段提交

三阶段提交,相对比2PC来说增加了CanCommit阶段和超时机制。如果一段时间内,没有收到协调者的commit,那么就会自动进行commit,解决了2PC单点故障问题。

流程是:

  • 第一阶段:【CanCommit阶段】这个阶段所做的事情很简单,就是协调者询问事务参与者,你是否有能力完成此次事务。
    • 如果都返回yes,则进入第二阶段
    • 有一个返回no或者等待响应超时,则中断事务,并向所有参与者发送abort请求
  • 第二阶段:【PreCommit阶段】此时协调者会向所有参与者发送PreCommit请求,参与者收到后开始执行事务操作,并将Undo和Redo信息记录到事务日志中。参与者执行完事务操作后(此时属于未提交事务的状态),就会向协调者反馈“ACK”表示我已经准备好提交了,并等待协调者的下一步指令。
  • 第三阶段:**「DoCommit阶段」**在阶段二中如果所有的参与者节点都可以进行PreCommit提交,那么协调者就会从“预提交状态”转变为“提交状态”。然后向所有的参与者节点发送"doCommit"请求,参与者节点在收到提交请求后就会各自执行事务提交操作,并向协调者节点反馈“Ack”消息,协调者收到所有参与者的Ack消息后完成事务。相反,如果有一个参与者节点未完成PreCommit的反馈或者反馈超时,那么协调者都会向所有的参与者节点发送abort请求,从而中断事务。

三阶段提交有两个改进点:

  • 引入超时机制。同时在协调者和参与者都引入了超时机制;
  • 3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有cancommit,precommit和docommit三个阶段。

3PC利用超时机制解决了2PC的同步阻塞问题,避免资源被永久锁定,进一步增强了整个事务过程的可靠性。但是3PC同样无法应用类似的宕机问题,只不过出现多数据源中数据不一致问题的概率更小。

4.4 TCC方案

TCC是一种解决多个微服务之间的分布式事务问题的方案。TCC是Try,Confirm,Cancel三个词的缩写,其本质上是一个应用层面上的2PC,同样也分为两个阶段:

  • 准备阶段:协调者调用所有的微服务提供的try接口,将整个全局事务涉及到的资源锁定住,若锁住成功try接口向协调者返回yes;
  • 提交阶段:若所有服务的try接口在阶段一都返回yes,则进入提交阶段,协调者调用所有服务的confirm接口,各个服务进行事务提交。如果有任何一个服务的try接口在阶段一返回no或者超时,则协调者调用所有服务的cancel接口;

这里有个关键问题,既然TCC是一种服务层面上的2PC,那么它是如何解决2PC无法应对的宕机问题的缺陷呢?

答案是不断尝试。

由于try操作锁住了全局事务涉及的所有资源,保证了业务操作的所有前置条件得到了满足,因此无论是confirm阶段失败还是cancel阶段失败都能通过不断重试直到confirm或cancel成功。(所谓成功就是所有的服务都对confirm或者cancel返回了ACK)。

这里还有个关键问题,在不断重试confirm和cancel的过程中(考虑到网络二将军问题的存在)有可能重复进行了confirm或cancel。因此还要再保证confirm和cancel操作具有幂等性,也就是在整个全局事务中,每个参与者只进行一次confirm或者cancel。

实现confirm和cancel操作的幂等性,有很多解决方案。例如每个参与者可以维护一个去重表,记录每个全局事务是否进行过confirm或cancel,若已经进行过,则不再重复执行。

4.5 2PC与TCC的对比

如果拿TCC事务的处理流程与2PC两阶段提交做比较,2PC通常都是在跨库的DB层面,而TCC则在应用层面的处 理,需要通过业务逻辑来实现。这种分布式事务的实现方式的优势在于,可以让应用自己定义数据操作的粒度,使 得降低锁冲突、提高吞吐量成为可能。

而不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作。此 外,其实现难度也比较大,需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。

4.6 可靠消息最终一致性

(1)什么是可靠消息最终一致性

可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能 够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致

此方案是利用消息中间件完成,如下图:

事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件 之间,事务参与方(消息消费方)和消息中间件之间都是通过网络通信,由于网络通信的不确定性会导致分布式事 务问题。

在这里插入图片描述

因此可靠消息最终一致性方案要解决以下几个问题:

a.本地事务与消息发送的原子性问题

本地事务与消息发送的原子性问题即:事务发起方在本地事务执行成功后消息必须发出去,否则就丢弃消息。即实 现本地事务和消息发送的原子性,要么都成功,要么都失败。本地事务与消息发送的原子性问题是实现可靠消息最 终一致性方案的关键问题。

b.事务参与方接收消息的可靠性

事务参与方必须能够从消息队列接收到消息,如果接收消息失败可以重复接收消息。

c.消息重复消费的问题

由于网络2的存在,若某一个消费节点超时但是消费成功,此时消息中间件会重复投递此消息,就导致了消息的重 复消费。

要解决消息重复消费的问题就要实现事务参与方的方法幂等性。

(2)解决方案:本地消息表方案

此方案的核心是通过本地事务保证数据业务操作和消息的一致性,然后 通过定时任务将消息发送至消息中间件,待确认消息发送给消费方成功再将消息删除。

下面以注册送积分为例来说明:

下例共有两个微服务交互,用户服务和积分服务,用户服务负责添加用户,积分服务负责增加积分。

在这里插入图片描述

交互流程如下:

1、用户注册

用户服务在本地事务新增用户和增加 ”积分消息日志“。(用户表和消息表通过本地事务保证一致) 下边是伪代码

begin transaction; 
    //1.新增用户 
    //2.存储积分消息日志 
commit transation;

这种情况下,本地数据库操作与存储积分消息日志处于同一个事务中,本地数据库操作与记录消息日志操作具备原子性

2、定时任务扫描日志

如何保证将消息发送给消息队列呢?

经过第一步消息已经写到消息日志表中,可以启动独立的线程,定时对消息日志表中的消息进行扫描并发送至消息 中间件,在消息中间件反馈发送成功后删除该消息日志,否则等待定时任务下一周期重试。

3.消费消息

如何保证消费者一定能消费到消息呢?

这里可以使用MQ的ack(即消息确认)机制,消费者监听MQ,如果消费者接收到消息并且业务处理完成后向MQ 发送ack(即消息确认),此时说明消费者正常消费消息完成,MQ将不再向消费者推送消息,否则消费者会不断重试向消费者来发送消息。

4.7 最大努力通知

最大努力通知也是一种解决分布式事务的方案,下边是一个是充值的例子:

在这里插入图片描述

1、账户系统调用充值系统接口

2、充值系统完成支付处理向账户系统发起充值结果通知 若通知失败,则充值系统按策略进行重复通知

3、账户系统接收到充值结果通知修改充值状态。

4、账户系统未接收到通知会主动调用充值系统的接口查询充值结果

目标:发起通知方通过一定的机制最大努力将业务处理结果通知到接收方。

4.8 最大努力通知与可靠消息一致性有什么不同

(1)解决方案思想不同

可靠消息一致性,发起通知方需要保证将消息发出去,并且将消息发送到接收通知放,消息的可靠性由通知方来保证。

最大努力通知,发起通知方尽最大的努力将业务处理结果通知为接收通知方,但是可能消息接收不到,此时需要接收通知方主动调用发起通知方的接口查询业务处理结果,通知的可靠性关键在接收通知方

(2)两者的业务应用场景不同

可靠消息一致性关注的是交易过程的事务一致,以异步的方式完成交易。

最大努力通知关注的是交易后的通知事务,即将交易结果可靠的通知出去。

(3)技术解决方向不同

可靠消息一致性要解决消息从发出到接收的一致性,即消息发出并且被接收到。

最大努力通知无法保证消息从发出到接收的一致性,只提供消息接收的可靠性机制。可靠机制是,最大努力的将消 息通知给接收方,当消息无法被接收方接收时,由接收方主动查询消息(业务处理结果)。

4.9 分布式事务对比分析

在了解各种分布式事务的解决方案后,我们了解到各种方案的优缺点:

2PC 最大的诟病是一个阻塞协议。RM在执行分支事务后需要等待TM的决定,此时服务会阻塞并锁定资源。由于其 阻塞机制和最差时间复杂度高, 因此,这种设计不能适应随着事务涉及的服务数量增加而扩展的需要,很难用于并 发较高以及子事务生命周期较长 (long-running transactions) 的分布式服务中。

如果拿TCC事务的处理流程与2PC两阶段提交做比较,2PC通常都是在跨库的DB层面,而TCC则在应用层面的处 理,需要通过业务逻辑来实现。这种分布式事务的实现方式的优势在于,可以让应用自己定义数据操作的粒度,使 得降低锁冲突、提高吞吐量成为可能。而不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现 try、confirm、cancel三个操作。此外,其实现难度也比较大,需要按照网络状态、系统故障等不同的失败原因实 现不同的回滚策略。典型的使用场景:满,登录送优惠券等。

可靠消息最终一致性事务适合执行周期长且实时性要求不高的场景。引入消息机制后,同步的事务操作变为基于消 息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响,并实现了两个服务的解耦。典型的使用场景:注 册送积分,登录送优惠券等。

最大努力通知是分布式事务中要求最低的一种,适用于一些最终一致性时间敏感度低的业务;允许发起通知方处理业 务失败,在接收通知方收到通知后积极进行失败处理,无论发起通知方如何处理结果都会不影响到接收通知方的后 续处理;发起通知方需提供查询执行情况接口,用于接收通知方校对结果。典型的使用场景:银行通知、支付结果 通知等。

在这里插入图片描述

总结: 在条件允许的情况下,我们尽可能选择本地事务单数据源,因为它减少了网络交互带来的性能损耗,且避免了数据 弱一致性带来的种种问题。若某系统频繁且不合理的使用分布式事务,应首先从整体设计角度观察服务的拆分是否 合理,是否高内聚低耦合?是否粒度太小?分布式事务一直是业界难题,因为网络的不确定性,而且我们习惯于拿 分布式事务与单机事务ACID做对比。

无论是数据库层的XA、还是应用层TCC、可靠消息、最大努力通知等方案,都没有完美解决分布式事务问题,它们 不过是各自在性能、一致性、可用性等方面做取舍,寻求某些场景偏好下的权衡。

分布式事务(TCC、XA、可靠性最终一致性) (Try-Confirm-Cancel)模式是一种分布式事务解决方案,适用于业务流程中需要保证多个操作要么全部成功,要么全部失败的场景。TCC是一种柔性事务模型,它通过业务逻辑来保证分布式系统的最终一致性。 阅读详情

相关推荐

【项目实战】小智AI MCP协议在IoT设备控制中的深度应用解析

本文深度解析小智AI MCP协议在IoT设备控制中的应用实践。通过MCP协议作为AI与物联网设备的翻译桥梁,实现大语言模型与ESP32等硬件的无缝通信。文章详细介绍了环境搭建、工具注册、消息路由机制,并以语音控制RGB灯光系统为例展示完整开发流程,为AIoT开发者提供实用指南。

oauth7security的博客 826

JAVA面试题分享四百三十一:Seata如何实现两阶段提交(2PC)分布式事务

2PC,全称为两阶段提交(),是一种在分布式系统中用来保证事务原子性和一致性的协议。它主要用于协调分布式数据库或分布式事务环境中的多个参与者,确保所有参与者要么一起成功提交事务,要么一起回滚事务,以保持数据的一致性。在2PC准备阶段(事务协调器接收到发起事务的客户端请求后,向所有参与该事务的资源管理器(例如数据库、服务节点等)发送“准备提交”请求。每个资源管理器执行事务操作,并将事务相关的更改锁定但不提交,然后回复事务协调器它们是否准备好提交事务(根据各自是否能够成功完成事务而定)。提交阶段(

之乎者也·的博客 1593

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 357

分布式事务:解决方案之最大努力通知理论

常见的分布式事务四大解决方案:2PC、TCC、可靠消息最终一致性、最大努力通知。前三种解决方案我们都分别从理论和实战两个维度做了讲解。今天我们来说说最大努力通知这个解决方案的理论部分。 1. 什么是最大努力通知 先来看看下面这个充值的例子: 交互流程如下: (1)账户系统调用充值系统接口发起支付请求。 (2)充值系统完成支付处理向账户系统发起充值结果通知。若通知失败,则充值系统按策略进行重复通。 (3)账户系统接收到充值结果通知修改充值状态。 (4)账户系统未接收到通知会主动调用充值系统的接口查询充值结果

上海一九四三 573

从碰撞电离到雪崩击穿:Sentaurus仿真中的模型选择与验证艺术

本文深入探讨了Sentaurus TCAD中雪崩击穿模型的选取与验证方法,特别关注平行平面结的仿真实践。通过对比Chynoweth、van Overstraeten等主流模型的适用场景与精度差异,结合具体案例展示了从几何建模到边界条件设定的完整验证流程,并针对非理想因素提供了有效的补偿技术,助力工程师提升器件仿真的准确性与可靠性。

weixin_29074295的博客 593

电机控制易混知识点1-基波频率/载波频率/采样频率

在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2195

最大努力通知(分布式事务解决方案)

最大努力通知是一种轻量级的分布式事务解决方案,其核心思想是通过异步通知和重试机制实现最终一致性。发起方在本地事务完成后,将消息发送至消息队列,接收方处理成功后返回响应。若失败则按指数退避策略重试,直至达到最大重试次数后转入死信队列。该方案通过消息队列解耦系统,要求接收方实现幂等性处理(如唯一ID校验、状态机控制),确保数据一致性。相比2PC、TCC等方案,最大努力通知实现简单、性能影响小,适用于对实时一致性要求不高的场景,如订单状态同步、支付结果通知等业务。

qq_60309351的博客 1081

移相变压器Simulink建模与HVDC系统仿真实践

移相变压器是电力电子领域实现精确相位调节的核心设备,其通过特殊绕组设计改变输出电压相位角,在解决环网潮流不均、阻尼功率振荡等场景具有关键作用。本文基于MATLAB/Simulink环境,详细解析移相变压器的建模原理与技术实现,包括磁路耦合特性模拟、参数计算方法和控制策略设计。针对HVDC高压直流输电和FACTS柔性交流输电系统等典型应用,提供仿真模型搭建技巧与问题排查指南,特别涵盖新能源并网场景下的相位调节优化方案。通过实测数据验证,所建模型在稳态精度和动态响应方面均满足工程要求,为电力系统稳定性分析提供有

weixin_28278377的博客 273

不靠谱的网络之二将军问题

网络的"二将军问题"(Two Generals’ Problem)是一个经典的计算机科学问题,它描述了在不可靠的通信信道上,两个通信方如何达成一致的问题。这个问题在分布式系统、网络通信和密码学等领域都有广泛的应用。

猿脑2.0的博客 552

OAuth2.0集成SpringSecurity加JWT实现单点登录

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以

Nicky's blog 9039

DCMM评估报告模板样例

这篇DCMM评估报告对某数据管理公司2020年的数据管理能力进行了全面分析。报告显示,该公司在数据战略方面取得初步进展,但在数据治理和数据架构方面仍存在明显不足,包括缺乏有效治理流程、数据质量监控不足,以及数据标准化和转换灵活性不足等问题。评估报告提出了针对性改进建议,包括完善数据战略、建立治理流程、加强质量监控和提升数据转换灵活性等,为提升数据管理成熟度提供了重要指导。

cdfunlove的博客 167

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

2PC,两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。由事务协调者询问通知各个事务参与者,是否准备好了执行事务,具体流程图如下:协调者收到各个参与者的准备消息后,根据反馈情况通知各个参与者commit提交或者rollback回滚(1)事务提交:当第一阶段所有参与者都反馈同意时,协调者发起正式提交事务的请求,当所有参与者都回复同意时,则意味着完成事务,具体流程如下:所

很多时候犯错都是在不知情的情况下发生的 1708

Android蓝牙中的Rfcomm协议介绍

RFCOMM(Radio Frequency Communications)是一种基于蓝牙技术的串口仿真协议,以下是详细介绍:一、协议概述二、工作原理三、应用场景

手机-手表蓝牙开发工程师的博客 714

美团Java面试惨败于二面,网络/JVM/MySQL/Spring等答得含糊不清

美团Java面试惨败于二面,网络/JVM/MySQL/Spring等答得含糊不清

javaAnPou的博客 422

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

美团Java一面险过,二面败北,面试官给了我一些学习建议受益匪浅

11月参加美团面试,一面险过,二面凉凉,最终还是自己基础不够扎实,回来后把下面把面试官问的问题整理成了几个模块包括:Java基础+网络+JVM+数据库+Spring+多线程并发+Redis+微服务+算法。接下来分享一下我的这次美团一面和二面面经++一些我的学习笔记。 面试题目总结 01.Java 基础部分 基本这些公司都会问到相关基础,所以,一般来说基础的准备是必要并且通用的,所以这部分真的很重要。 1.1美团面试问题 1.2Java基础笔记(集合,Hash等) ArrayList 和 Vector 的

weixin_47083537的博客 567

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

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

java各知识点详细总结毕向东_美团Java一面险过,二面败北,分享我的凉凉面经和学习经验...

11月参加美团面试,一面险过,二面凉凉,最终还是自己基础不够扎实,回来后把下面把面试官问的问题整理成了几个模块包括:Java基础+网络+JVM+数据库+Spring+多线程并发+Redis+微服务+算法。接下来分享一下我的这次美团一面和二面面经++一些我的学习笔记。我每天学习的技术知识点资料(JVM,Spring,Redis,并发)​shimo.im面试题目总结01.Java 基础部分基本这些公司...

weixin_31859277的博客 138

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

美团Java一面险过,二面败北,分享我的凉凉面经和学习经验

11月参加美团面试,一面险过,二面凉凉,最终还是自己基础不够扎实,回来后把下面把面试官问的问题整理成了几个模块包括:Java基础+网络+JVM+数据库+Spring+多线程并发+Redis+微服务+算法。接下来分享一下我的这次美团一面和二面面经++一些我的学习笔记。 我每天学习的技术知识点资料JVM,Spring,Redis,并发 面试题目总结 01.Java 基础部分 基本这些公司都会问到相关基础,所以,一般来说基础的准备是必要并且通用的,所以这部分真的很重要。 1.1美团面试问题 1.2Java基础笔

weixin_47067712的博客 633

从网络协议到分布式系统:CS 436课程核心与实践指南

计算机网络作为分布式系统的通信基石,其核心在于通过分层模型(如TCP/IP)解决设备间的可靠数据传输问题。传输层的TCP协议提供面向连接的可靠传输,而UDP则适用于无连接的快速交付,理解RTT(往返时间)等概念对优化网络性能至关重要。在分布式系统中,多个节点通过网络协作,面临并发、部分故障和消息不可靠等挑战,RPC(远程过程调用)技术将网络通信抽象为本地函数调用,极大提升了开发效率。分布式锁作为协调共享资源访问的关键机制,常基于Redis等中间件实现,需处理锁过期、续期和原子性操作等问题。本文以滑铁卢大学C

weixin_30652897的博客 353

分布式事务

一、基础概念 1.1 假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子: 上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订单服务,创建订单记录。 正常情况下,两个数据库各自更新成功,两边数据维持着一致性。 但是,在非正常情况下,有可能库存的扣减完成了,随后的订单记录却因为某些原因插入失败。这个时候,两边数据..

sinat_34814635的博客 5436

分布式事务有这一篇就够了!

分布式事务 文章目录分布式事务1. 基础概念1.1 什么是事务1.2 本地事务1.3 分布式事务1.4 分布式事务产生的情景2. 分布式事务基础理论2.1 CAP理论2.1.1 理解CAPC - ConsistencyA - AvailabilityP - Partition tolerance2.1.2 CAP组合方式CAP的组合方式2.1.3 总结2.2 BASE 理论3. 分布式事务解决方案之 2PC3.1 什么是 2PC3.2 解决方案3.2.1 XA 方案3.2.2 Seata 方案3.3 小结4

i_deAc的博客 2465

啥?分布式啥?啥事务?

前言 不知不觉距离上一篇的更新已经有几个月了,后台也有很多小伙伴催更,奈何事情比较多,期望我能坚持下去~ 书接上话,前两篇我们聊了CAP的最佳打开方式,也讲透了分布式系统一致性的问题。最近几篇我们聊一聊分布式事务。 文章结尾附小米大数据平台运维工程师JD,有意者请与我联系~ 二将军问题 我们先来看个故事,相信会有助于你对分布式事务的理解。二将军问题是一个计算机领域一个经典的问题。 「故事背景」黑白两军交战之际,两股白军将黑军被围困在山谷之中;山谷两侧任意一股白军都比山谷中的黑军人数少,因此单独一

weixin_47158466的博客 288

分布式事务解决方案之可靠消息最终一致性、最大努力通知

点击上方蓝色字体,选择“设为星标”优质文章,及时送达本文来源:https://dwz.cn/730BLvt0上篇文章主要介绍了分布式事务解决方案之2PC、TCC,传送门,这篇文章将主要讲...

u010821757的博客 4213

分布式事务解决方案(最终一致性【TCC解决方案】)

例如实现TCC分布式事务方案时,需要实现Try、Confirm、Cancel三个阶段的业务逻辑,这就是TCC操作,在TCC操作的每个阶段的方法都需要实现幂等性,这就是幂等操作,如果在执行分布式事务过程中业务服务出现了异常情况,则需要支持重试阶段,以达到事务补偿的目的,这就是可补偿操作,另外业务服务需要提供可以查询自身内部事务状态的接口,以供其他服务调用,这就是可查询操作。TCC是一种典型的解决分布式事务问题的方案,主要解决跨服务调用场景下得分布式事务问题,广泛应用于分布式事务场景。空回滚、幂等和悬挂问题。

u012014505的博客 1283

分布式事务(四)——TCC补偿模式解决方案

首先需要选择某种TCC分布式事务框架,各个服务力就会有这个TCC分布式事务框架在运行然后你原本的一个接口,需要改造成3个逻辑: Try-Confirm-Cancel先是服务调用链路依次执行Try逻辑如果都正常的话,TCC分布式事务框架推进执行Confirm逻辑,完成整个事务如果某个服务的Try逻辑有问题,TCC分布式事务框架感知到之后会推进执行各个服务的Cancel逻辑,插销之前执行的各个操作先来Try一下,不要把业务逻辑完成,先试试,看各个服务能不能正常运转,能不能先冻结需要的资源。

u012559967的专栏 2262
上一篇: 【分布式面试高频】- 03 分布式事务涉及的BASE理论是什么
下一篇: 【语义分割专题】语义分割前期预处理工作--数据处理
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

mind_programmonkey

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

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

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

打赏作者

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

抵扣说明:

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

余额充值