分布式协同 - 分布式事务_2PC 3PC解决方案

文章目录

  • 导图
  • Pre
  • 2PC(Two-Phase Commit)协议
    • 准备阶段
    • 提交阶段
      • 情况 1:只要有一个事务参与者反馈未就绪(no ready),事务协调者就会回滚事务
      • 情况 2:当所有事务参与者均反馈就绪(ready)消息时,事务协调者会提交(commit)事务
  • 3PC(Three-Phase Commit)协议
    • 3PC的三个阶段
    • 3PC 的流程
  • 3PC 和 2PC 的主要区别
    • 1. 阶段数量不同
    • 2. 容错能力
    • 3. 协议的安全性与复杂性
    • 4. 阻塞问题
    • 5. 事务资源锁定
    • 6. 性能开销
  • 总结

在这里插入图片描述

导图

在这里插入图片描述


Pre

分布式协同 - 分布式事务一二事儿DTP 定义了分布式事务的处理模型,可以针对这个模型提出分布式事务的解决方案,2PC 就是其中一种。

2PC 的全称为两阶段提交(Two Phase Commitment Protocol),是 DTP 模型的最佳实践,解决了在分布式服务或数据库场景下,同一事务对多个节点进行操作的数据一致性问题。

2PC 在一定程度上遵守 ACID 理论的刚性事务的要求,保证了强一致性。 2PC 中有两个概念,

  • 一个是事务协调者,对应 DTP 模型中的事务管理器,用来协调事务,所有事务什么时候准备好、什么时候可以提交都由它来协调和管理;
  • 另一个是事务参与者,对应 DTP 模型中的资源管理器,主要负责处理具体事务、管理需要处理的资源。例如事务参与者可以处理订票业务,扣款业务。

2PC(Two-Phase Commit)协议

+-----------------+                +------------------+                +-----------------+
|   Transaction   |                |   Coordinator    |                |   Participant   |
|     Client      |                |       Node       |                |       Node      |
+-----------------+                +------------------+                +-----------------+|                                  |                                   ||----------(1) Request Start ------>                                   ||                                  |                                   ||                                  | --------------(2) Prepare-------->||                                  |                                   ||                                  | <--------- (3) Acknowledge ------||                                  |                                   ||                                  |                                   ||                                  | --------------(4) Commit--------->||                                  |                                   ||                                  | <--------- (5) Acknowledge ------||                                  |                                   ||                                  |                                   ||                                (End)                               (End)

准备阶段

第一阶段(准备阶段):如下图 所示

在这里插入图片描述

事务协调者(事务管理器)给每个事务参与者(资源管理器)发送准备(prepare)消息,目的是询问大家是不是都准备好了,马上就要执行事务了。事务参与者会根据自身业务和资源情况进行检查,然后给出反馈。检查过程根据业务内容的不同而不同,例如订票业务需要检查是否有剩余票、扣款业务需要检查余额是否足够。

只有检查通过,才能返回就绪(ready)信息。否则,事务将终止,并且等待下次询问。由于检查过程需要完成一些操作,因此需要写 redo 日志和 undo 日志,以便事务失败重试,或者失败回滚时使用。


提交阶段

第二阶段(提交阶段):如下图所示
在这里插入图片描述

如果事务协调者接收到事务参与者检查失败或者超时的消息,会给其发送回滚(rollback)消息,否则发送提交(commit)消息。

情况 1:只要有一个事务参与者反馈未就绪(no ready),事务协调者就会回滚事务

  • a) 事务协调者向所有事务参与者发出回滚请求。
  • b) 事务参与者使用第一阶段中 undo 日志里的信息执行回滚操作,并且释放整个事务期间占用的资源。
  • c) 各事务参与者向事务协调者反馈应答(ack)消息,表示完成操作。
  • d) 事务协调者接收到所有事务参与者反馈的应答消息,即完成了事务回滚。

情况 2:当所有事务参与者均反馈就绪(ready)消息时,事务协调者会提交(commit)事务

  • a) 事务协调者向所有事务参与者发出正式提交事务的请求。
  • b) 事务参与者执行提交(commit)操作,并释放整个事务期间占用的资源。
  • c) 各事务参与者向事务协调者反馈应答(ack)消息,表示完成操作。
  • d) 事务协调者接收到所有事务参与者反馈的应答(ack)消息,即完成了事务提交。

3PC(Three-Phase Commit)协议

3PC(三阶段提交)是分布式事务中的一种协议,旨在解决2PC协议中的阻塞问题。3PC协议通过在2PC的基础上增加了一个阶段,增加了事务的容错能力,从而避免了协调者或参与者崩溃时可能发生的阻塞现象。

3PC的三个阶段

  1. CanCommit 阶段(询问阶段)

    • 协调者向所有参与者发送“CanCommit”请求,询问它们是否可以提交事务。
    • 参与者收到请求后,会检查本地的事务状态。如果没有冲突,且可以提交,它们就返回“Ready”响应;如果事务存在问题,则返回“No”响应,表示无法提交。
  2. PreCommit 阶段(预提交阶段)

    • 如果所有参与者都返回了“Ready”,协调者就会向所有参与者发送“PreCommit”命令,表示准备提交事务,并让它们锁定相关资源。
    • 参与者在接收到“PreCommit”命令后,执行事务的预提交操作并返回确认。
  3. DoCommit 阶段(提交阶段)

    • 如果所有参与者都返回了预提交确认(“PreCommit”),协调者会向所有参与者发送“DoCommit”命令,正式提交事务。
    • 参与者接收到“DoCommit”命令后,执行提交操作,事务完成。

3PC 的流程

+-----------------+                +------------------+                +-----------------+
|   Transaction   |                |   Coordinator    |                |   Participant   |
|     Client      |                |       Node       |                |       Node      |
+-----------------+                +------------------+                +-----------------+|                                  |                                   ||----------(1) Request Start ------>                                   ||                                  |                                   ||                                  |  --------(2) CanCommit --------->||                                  |                                   ||                                  | <----------(3) Ready/No --------||                                  |                                   ||                                  |  --------(4) PreCommit --------->||                                  |                                   ||                                  | <----------(5) PreCommitAck -----||                                  |                                   ||                                  |  --------(6) DoCommit ---------->||                                  |                                   ||                                  | <----------(7) DoCommitAck ------||                                  |                                   ||                                (End)                               (End)

3PC 和 2PC 的主要区别

1. 阶段数量不同

  • 2PC 有两个阶段:

    1. Prepare: 协调者询问参与者是否能提交事务。
    2. Commit/Abort: 根据参与者的响应,协调者决定是否提交或回滚事务。
  • 3PC 有三个阶段:

    1. CanCommit: 协调者询问参与者是否准备提交。
    2. PreCommit: 协调者发送预提交命令,参与者准备提交并锁定资源。
    3. DoCommit: 协调者发送最终提交命令,事务正式提交。

2. 容错能力

  • 2PC 在协调者或参与者崩溃时可能会出现阻塞。例如,如果协调者崩溃后,参与者不知道是应该提交还是回滚,系统可能会陷入阻塞状态,无法继续执行。
  • 3PC 增加了一个额外的阶段(PreCommit),并且在每个阶段都有明确的响应协议,可以减少系统在协调者或参与者崩溃时的阻塞风险。3PC通过引入超时机制预提交锁定,有效减少了数据不一致和系统停滞的概率。

3. 协议的安全性与复杂性

  • 2PC 协议相对简单,但存在阻塞问题,且在部分情况下(例如,协调者崩溃),事务无法保证最终一致性。
  • 3PC 协议在设计上更加复杂,通过引入预提交阶段,提高了系统的容错能力,但也增加了协议的开销和实现的复杂性。

4. 阻塞问题

  • 2PC 存在阻塞问题,特别是在协调者或参与者崩溃的情况下,事务无法继续或回滚,可能会导致长时间的停滞。
  • 3PC 通过引入额外的阶段,并要求所有参与者在每个阶段都给予明确的响应,避免了阻塞的可能性。当协调者或参与者崩溃时,系统会通过超时机制自动恢复,减少了长时间的停滞。

5. 事务资源锁定

  • 2PC 中,事务资源在提交后才被释放,可能会因为参与者的延迟或崩溃导致长时间的资源占用。
  • 3PC 引入了预提交阶段,在PreCommit时就锁定了资源并确保它们在提交前是有效的,因此能更有效地管理资源的占用。

6. 性能开销

  • 2PC 因为只有两个阶段,协议简单,性能相对较好,但当系统出现故障时,性能和一致性会受到较大影响。
  • 3PC 虽然增加了一个阶段,但引入了更多的容错机制,可能会有稍微的性能开销,但能在故障恢复时保持更高的可用性。

总结

特性2PC (Two-Phase Commit)3PC (Three-Phase Commit)
阶段数量2个阶段:Prepare(准备阶段)和Commit/Abort(提交/回滚阶段)3个阶段:CanCommit(询问阶段)、PreCommit(预提交阶段)、DoCommit(提交阶段)
协议设计基于两阶段协议,协议简单但容易导致阻塞问题基于三阶段协议,增加了预提交阶段,减少了阻塞问题
阻塞问题存在阻塞问题,特别是当协调者或参与者崩溃时,系统可能无法继续通过引入PreCommit阶段,减少了崩溃时的阻塞问题,避免了长时间停滞
协调者崩溃的处理协调者崩溃后,参与者不确定事务是提交还是回滚,导致阻塞由于引入了CanCommit和PreCommit阶段,协调者崩溃后的恢复能力较强,减少了阻塞的可能
参与者崩溃的处理如果参与者在Prepare阶段崩溃,事务可能无法提交在PreCommit阶段,参与者能锁定资源,如果崩溃,系统能更好恢复,减少了不一致情况
事务提交的一致性保证一致性,但有可能因为协调者或参与者崩溃导致无法提交或回滚在多数情况下保证一致性,并且通过额外阶段减少了崩溃带来的影响
资源管理资源管理依赖于Prepare阶段,协调者发出提交或回滚命令资源管理通过PreCommit阶段锁定资源,协调者发送最终提交命令
性能开销由于只有两个阶段,性能较高,但可能因为故障导致较长的延迟增加了一个阶段,性能会有一定的开销,但能有效减少阻塞问题
协议复杂性协议较简单,实现起来相对容易,但缺乏容错能力协议更复杂,要求在协议层面上有更多的容错设计和实现
适用场景适用于对一致性要求较高的场景,如分布式数据库事务适用于对高可用性和容错性要求较高的场景,尤其是需要更好恢复能力的分布式系统
超时处理通常需要外部机制(如超时检测)来处理超时问题协议本身提供了对超时和崩溃的处理机制,有更强的容错能力
  • 2PC 由于其简单的设计,适用于一些不涉及复杂容错的场景,但它容易因为崩溃或故障导致阻塞问题,事务可能无法继续进行。
  • 3PC 在 2PC 的基础上增加了一个阶段,提升了系统容错能力,减少了由于协调者或参与者崩溃导致的阻塞,但相应地增加了协议的复杂度和性能开销。

在选择2PC还是3PC时,需要根据具体应用场景的容错要求、性能需求以及系统复杂度进行权衡。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495514.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GFPS扩展技术原理(七)-音频切换消息流

音频切换消息流 Seeker和Provider通过消息流来同步音频切换能力&#xff0c;触发连接做切换&#xff0c;获取或设置音频切换偏好&#xff0c;通知连接状态等等。为此专门定义了音频切换消息流Message Group 为0x07&#xff0c;Message codes如下&#xff1a; MAC of Audio s…

实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响

在 Qt 开发中&#xff0c;QTreeWidget 提供了树形结构的显示和交互功能。为了实现某个子节点勾选或取消勾选时&#xff0c;只影响当前节点及其子节点的状态&#xff0c;同时递归更新父节点的状态以正确显示 Qt::PartiallyChecked 或 Qt::Checked&#xff0c;我们可以借助 Qt 的…

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中&#xff0c;“形”指形体或形状&#xff0c;存在于客观世界和虚拟世界&#xff0c;它的本质是“表示”&#xff1b;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面&#xff0c;用于表达…

Yolo11改策略:卷积改进|SAC,提升模型对小目标和遮挡目标的检测性能|即插即用

摘要 一、论文介绍 本文参考的论文主要介绍了DetectoRS模型&#xff0c;一个高性能的目标检测模型。DetectoRS通过引入递归特征金字塔&#xff08;RFP&#xff09;和可切换空洞卷积&#xff08;SAC&#xff09;两大创新点&#xff0c;显著提升了目标检测的精度。尽管原文并未…

Y3编辑器教程8:资源管理器与存档、防作弊设置

文章目录 一、资源管理器简介1.1 界面介绍1.2 资源商店1.3 AI专区1.3.1 AI文生图1.3.2 AI图生图1.3.3 立绘头像 二、导入导出2.1 文件格式2.2 模型导入2.2.1 模型制作后导出2.2.2 模型文件导入Y3编辑器2.2.3 Y3编辑器角色、装饰物模型要求 2.3 纹理导入2.4 材质贴图2.4.1 材质支…

【联动】【MSS】【AF】

【联动】【MSS】【AF】 一、版本要求 AF&#xff1a;不低于8.0.7&#xff1b;AF8.0.7R2不支持接入 二、接入配置 2.1、AF配置 对于AF8.0.13版本及以上&#xff0c;登录WEB控制台&#xff0c;点击[下一代安全防护体系] -> [云网联动] -> [云网接入设置]&#xff0c;然…

攻防世界 cookie

开启场景 Cookie&#xff08;HTTP cookie&#xff09;是一种存储在用户计算机上的小型文本文件。它由网站通过用户的浏览器在用户访问网站时创建&#xff0c;并存储一些用于跟踪和识别用户的信息。Cookie 主要用于在网站和浏览器之间传递数据&#xff0c;以便网站可以根据用户的…

STM32-笔记11-手写带操作系统的延时函数

1、为什么带操作系统的延时函数&#xff0c;和笔记10上的延时函数不能使用同一种&#xff1f; 因为笔记10的延时函数在每次调用的时候&#xff0c;会一直开关定时器&#xff0c;而在FreeRTOS操作系统中&#xff0c;SysTick定时器当作时基使用。 时基是一个时间显示的基本单位。…

JWT令牌与微服务

1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性&#xff1a; 紧凑&#xff…

代码随想录Day37 动态规划:完全背包理论基础,518.零钱兑换II,本周小结动态规划,377. 组合总和 Ⅳ,70. 爬楼梯(进阶版)。

1.完全背包理论基础 思路 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完…

【多时段】含sop的配电网重构【含分布式电源】【已更新视频讲解】

1 主要内容 之前分享了很多配电网重构的程序&#xff0c;每个程序针对场景限定性比较大&#xff0c;程序初学者修改起来难度较大&#xff0c;本次分享一个基础程序&#xff0c;针对含sop的配电网重构模型&#xff0c;含风电和光伏&#xff0c;优化了33节点网络电压合理性&…

查看php已安装扩展命令

在powershell中查看完整的拓展 php -m 指定搜索某几个拓展 php -m | Select-String -Pattern "xml"

YOLOv11 引入高效的可变形卷积网络 DCNv4 | 重新思考用于视觉应用的动态和稀疏算子

我们介绍了可变形卷积v4(DCNv4),这是一种为广泛的视觉应用设计的高效且有效的算子。DCNv4通过以下两项关键改进解决了其前身DCNv3的局限性: 在空间聚合中移除softmax归一化,以增强其动态特性和表达能力。优化内存访问,减少冗余操作以提高速度。这些改进使得DCNv4相比DCNv…

vue 基础学习

一、ref 和reactive 区别 问题&#xff1a;发生跨域问题 Access to script at file:///Users/new/Desktop/webroot/vue/vue.esm-browser.js from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, chrom…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异&#xff0c;以下是其具体工作过程&#xff1a; 一、光的收集 目标物体在光源照射下&#xff0c;其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统&#xff08;如透镜、反射镜…

Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)

数据的存储是基于 主题&#xff08;Topic&#xff09; 和 分区&#xff08;Partition&#xff09; 的 Kafka是一个高可靠性的分布式消息系统&#xff0c;广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群&#xff0c;开发人员和运维人员经常需要使用可视化工具…

TLDR:终端命令的简洁百科全书

TLDR&#xff0c;全称 “Too Long, Don’t Read”&#xff0c;是一款特别实用的终端命令百科全书工具。通过 TLDR&#xff0c;您可以快速查找到常用命令的使用方法&#xff0c;避免繁琐冗长的官方文档&#xff0c;让日常工作更加高效。 为什么选择 TLDR&#xff1f; 简单易用&…

2024-12-25-sklearn学习(20)无监督学习-双聚类 料峭春风吹酒醒,微冷,山头斜照却相迎。

文章目录 sklearn学习(20) 无监督学习-双聚类1 Spectral Co-Clustering1.1 数学公式 2 Spectral Biclustering2.1 数学表示 3 Biclustering 评价 sklearn学习(20) 无监督学习-双聚类 文章参考网站&#xff1a; https://sklearn.apachecn.org/ 和 https://scikit-learn.org/sta…

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…