分布式事务(二)、刚性事务之 2PC、3PC

一文读懂分布式一致性协议2PC和3PC 详解分布式一致性协议2PC和3PC,理解对应的处理流程和特点,面试的时候不会再怂了 阅读详情

目录

前言

XA

2PC

3PC


分布式事务:

分布式事务(一)、CAP,BASE理论


前言

在前面的文章中我们提到了刚性事务遵循ACID原则,满足强一致性,本篇讲解刚性事务的标准实现2PC(二阶段提交)和3PC(三阶段提交)。

XA

XA协议是X/Open CAE Specification定义的一套DTP(Distributed Transaction Processing)分布式事务处理模型,主要包含四个部分:

  • 应用程序(AP):应用程序
  • 事务管理器(TM):交易中间件
  • 资源管理器(RM):数据库
  • 通信资源管理器(CRM):消息中间件

事务管理器作为一个全局的调度者,负责通知各个资源管理器事务的开始、结束、提交、回滚,把多个本地事务协调为全局统一的分布式事务。两阶段提交(2PC)和三阶段提交(3PC)就是基于此协议衍生出来的。Oracle、Mysql等数据库均已实现了XA接口。

2PC

2PC 是二阶段提交(Two-phase Commit)的缩写,分为两个阶段完成,第一个阶段是准备阶段(prepare),第二个阶段是提交阶段(commit/rollback),准备阶段和提交阶段都是由事务管理器(协调者)发起的,协调的对象是资源管理器(参与者)。 

  1. 准备阶段:协调者向所有参与者发起指令,每个参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写 redo 和 undo 日志,然后锁定资源,执行操作,但不提交。
  2. 提交阶段:如果所有参与者返回准备成功,即预留资源和执行操作成功,协调者会向所有参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,即预留资源或者执行操作失败,协调者会向所有参与者发起中止指令,参与者取消已经变更的事务,执行 undo 日志并释放锁定的资源。 

二阶段提交(2PC)的缺点:

  • 阻塞:事务执行过程中所有参与者都是阻塞型的,占用的资源被一直锁定,不会被释放,第三方参与者访问参与者占有的资源时会被阻塞,影响性能;
  • 单点故障:协调者一旦发生故障,参与者与协调者失去同步,参与者会被一直阻塞。尤其在提交阶段,所有参与者都处于锁定资源状态中,无法完成事务操作;(虽然可以选举出新的协调者,但仍然无法解决参与者被阻塞的问题);
  • 数据不一致:提交阶段协调者向参与者发送提交指令,发生局部网络故障,会出现一部分参与者未收到提交指令无法提交事务的情况,导致多个参与者之间出现数据不一致的现象;

二阶段提交协议在准备阶段需要等待所有参与者的反馈,因此可能造成数据库资源锁定时间过长,不适合高并发和子事务生命周长较长的业务场景。两阶段提交牺牲了一部分可用性来换取一致性。 

3PC

3PC是三阶段提交(Three-phase Commit)的缩写,是对2PC 的改进,3PC在2PC的准备阶段和提交阶段中加入一个预提交阶段。保证了在最后提交阶段之前,各参与者节点的状态都一致。同时在协调者和参与者中都引入超时机制解决了阻塞的问题,当参与者由于各种原因未收到协调者的commit 请求后,会对本地事务进行commit,不会一直阻塞等待,解决了2PC的单点故障问题,因此维基百科中定义3PC为“非阻塞”协议。

3PC 的三个阶段:CanCommit(准备阶段)、PreCommit(预提交阶段)、DoCommit(提交阶段)

  1. 准备阶段:协调者询问参与者是否可以执行事务提交操作,协调者只需要回答是还是不是,而不需要做真正的操作,这个阶段参与者在等待超时后会自动中止。
  2. 预提交阶段:如果在CanCommit准备阶段所有的参与者都返回可以执行操作,协调者向所有参与者发送预提交请求,然后参与者写 redo 和 undo 日志,锁定资源,执行操作,但不提交;如果在CanCommit准备阶段任何一个参与者返回不能执行操作的结果,则协调者向所有参与者发送中止指令。这里与两阶段提交协议的准备阶段是相似的,此阶段的参与者在等待超时后会自动提交。
  3. 提交阶段:如果所有参与者在PreCommit预提交阶段都返回成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回失败,也就是预留资源或者执行操作失败,协调者向所有参与者发起中止指令,参与者取消已经变更的事务,执行 undo 日志,释放锁定的资源。这里与两阶段提交协议的提交阶段一致。

超时机制:

  • 如果在CanCommit 准备阶段等待超时,则自动中止;
  • 如果在PreCommit预提交阶段等待超时,则自动提交。

3PC 通过预提交阶段可以减少故障恢复时候的复杂性,但3PC 还是没能从根本上解决数据一致性的问题,比如在预提交阶段时协调者和其中一个参与者都发生了故障,此时其他参与者在超时情况下会自动选择提交或回滚,当新选举出的协调者上任时也会给活着的参与者发送提交命令,但发生故障的那个参与者还未恢复且无法确定是否执行了事务,这里就出现了数据不一致的情况。

事实上 2PC 和 3PC 都无法保证完全的数据一致性,于是需要利用补偿机制尽量确保数据的一致性,在后面的文章中会具体介绍。

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

分布式集群理论和分布式事务协议 参与者都返回了准备好了的消息,这个时候就进行事务的提交,协调者此时会给所有的参与者发送 Commit 请求,当参与者收到 Commit 请求的时候会执行前面执行的事务的提交操作,提交完毕之后将给协调者发送提交成功的响应;如果一个系统将转账业务拆分成了两部分,一部分是自己扣钱,另一部分是对方加钱,这两个服务部署在不同的机器上,万一在消息的传播过程中某个系统宕机了,我们需要保证两边的数据的一致性,我们所有服务的数据处理要么都成功要么都失败,即所有服务的原子性问题。但是 2PC 其他缺点全部处理了。 阅读详情

相关推荐

分布式事务:2PC与3PC的区别

协调者(Coordinator)是事务的发起者在实际的使用过程中,TM作为协调者。TM(Transaction Manager)是定义的一种软件组件,有着分布式事务的管理职责,对分布式事务进行协调和执行。对于2PC来说,3PC有以下好处:(1)3PC减少了资源的使用,因为在CanCommit阶段,并没有进行真正执行事务。

ycsdn10的博客 2734

详谈 2PC 3PC

一致性问题 分布式系统中,为了保证数据的高可用。通常,会将数据保留多个副本放置在不同的物理的机器上。为了保证正确的增、删、改、操作,还需要保证这些放置在不同物理机器上的副本数据是一致的。 为了这样的分布式一致性问题,前人在性能和数据一致性衡过程中总结了许多典型的协议和算法。比较著名的有二阶提交协议(2PC)、三阶提交协议(3PC)。 分布式事务 分布式事务是指涉及到操作多个数据库的事务,目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或

菜鸟厚非 7630

分布式事务之2PC、3PC、TCC

目录 什么是2PC 关系型数据库的2PC=>XA方案 分布式事务框架Seata的2PC=》AT方案 Seata的2PC和传统2PC比较 2PC的问题 什么是3PC 什么是TCC 什么是2PC 2PC即两阶段提交协议,将整个事务流程分为两个阶段:准备阶段、提交阶段。 简单来说准备阶段就执行事务代码,但不一定提交,提交阶段决定是最终提交事务还是回滚事务。 为什么要简单来说?因为基于数据库的2PC和分布式框架Seata的2PC有差异,不能一概而论。 关系...

我能在河边钓一整天的鱼 1718

【分布式】分布式事务基础概念(2PC,3PC,TCC)

文章目录XA协议两阶段提交协议(2PC)2PC 过程准备阶段提交阶段2PC总结三阶段提交协议(3PC)3PC过程阶段一 CanCommit阶段二 PreCommit阶段三 DoCommit3PC总结TCC(Try-Confirm-Cancel)流程设计要点TCC总结 XA协议 在讲分布式事务之前,必然需要先了解XA协议。XA是一个协议,由Oracle Tuxedo系统提出的XA分布式事务协议。 XA协议定义了分布式事务参与方的两个角色: 事务协调者(TM=Transaction Manager) 资源管

BookSea的博客 3582

分布式事务:2PC与3PC

2PC和3PC是两种经典的分布式事务协议。2PC采用两阶段提交(准备+提交),优点是简单易实现,但存在同步阻塞、单点故障和数据不一致风险。3PC在2PC基础上增加预提交阶段和超时机制,降低了阻塞范围和单点故障影响,但增加了复杂度和网络开销。实际应用中,2PC多见于MySQL XA等技术,3PC因复杂性应用较少。现代系统更倾向于采用TCC、SAGA等柔性事务方案来规避两者的固有缺陷,实现更好的分布式事务处理效果。

Quan 903

分布式事务(XA、2PC、3PC介绍)

XA简单介绍 XA是由X / Open发布的规范,用于DTP(分布式事务处理)。 DTP分布式模型主要含有 AP: 应用程序 TM: 事务管理器 RM: 资源管理器(如数据库) CRM: 通讯资源管理器(如消息队列) XA主要就是TM和RM之间的通讯桥梁。 2PC 两阶段提交协议(The two-phase commit protocol,2PC)是 XA 用于在全局事务中协调多个资源的机制。...

yuck的博客 1454

分布式事务 | 2PC与3PC 详解

分布式事务| 2PC 和 3PC

面向生活编程 1499

基于PID的定速巡航控制系统设计【MATLAB源码+Word文档】

本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统,它能让驾驶者在高速或长途驾驶时,设定一个固定的车速,然后车辆会自动维持这个速度行驶,无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳,同时也提高了行驶的安全性。PID定速巡航控制系统是一种利用比例(Proportional)、积分(Integral)和微分(Derivative)控制算法来实现车辆定速巡航的先进系统。这种系统能够根据设定的速度,自动调整油门开度或制动力度,使车辆保持恒定的速度行驶。这种控制系统具有响应速度快、控制精度高、稳定性好等优点。

weixin_761237174的博客 1667

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

在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。本文详解介绍七种常见分布式事务的原理以及优缺点和适用场景(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)

张维鹏的博客 9万+

SystemVerilog新手实战指南:iverilog与VScode的完美组合

本文为SystemVerilog新手提供了一套高效入门方案,详细介绍了如何利用开源编译器iverilog与轻量编辑器VScode搭建学习环境。内容涵盖十分钟快速安装配置、首个工程从编码到查看波形的完整流程,并演示了动态数组和队列等SystemVerilog新特性的使用,旨在帮助初学者避开复杂商业工具,快速掌握数字电路设计与验证的核心技能。

f6g7h8i9j的博客 513

告别调试烦恼:用Lattice Diamond手把手教你JTAG烧录FPGA(附SRAM/Flash模式详解)

本文详细介绍了使用Lattice Diamond软件进行JTAG烧录FPGA的全流程,包括SRAM临时调试和Flash固化的核心区别。从环境准备、硬件连接到文件准备、烧录模式选择,再到典型问题排查和高级技巧,手把手教你快速掌握FPGA烧录技术,提升开发效率。

weixin_42569329的博客 495

分布式事务:深入理解什么是2PC、3PC及TCC协议

1导读对于分布式事务的概念,可能还会有很多同学不理解或者理解得不是很深刻的地方,在这篇文章中,作者打算重点给大家先介绍下分布式事务相关的基本概念,诸如2PC、3PC、TC...

程序员小灰的博客 4万+

MySQL 一一 MySQL基本使用

1、数据库 简单来说,所谓的数据库就是存储数据的容器,而且是永久存储的。 2、为什么需要数据库 3、为什么要学习MySQL数据库 最早MySQL数据,瑞典AB公司开发的一款开源型的关系型数据库。 随着时间的推移,瑞典AB公司把MySQL数据库转让给Sun公司(Java语言的创始公司) 后来,Sun公司经营不善,又把MySQL数据库转让给甲骨文公司(Oracle数据库) 4、数

Guizy 7万+

分布式事务讲解 - 2PC、3PC、TCC

一个操作由多个不同服务器的子操作组成,分布式事务就是要保证这些子操作要不全部执行成功,要不全部执行失败。从本质上讲,分布式事务就是为了保证不同数据库的数据一致性。在2PC的第一阶段基础之上,3PC新加了一个准备阶段(上图所示),用于询问所有参与者节点是否已经准备好要进行分布式事务操作了,这一阶段没有对资源的占用,只是测试数据库是否能获取锁即可,只是保证所有参与者都有能力参与事务,如果有网络或者其他问题就不用进行第二、三阶段了。

IT枫斗者的博客 1828

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2312

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

分布式事务(2PC、3PC、TCC)

什么是分布式事务? 我们看看百度上对于分布式事务的定义:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 额~ 看了反而更懵逼了,简单的画个图好让大家理解一下,拿下单减库存来说举例:当系统的业务量很小时,“一站式”的系统完全可以满足现有业务需求,所有的业务都共用一个数据库,整个下单流程或许只用在一个方法里同一个事务下操...

张伯毅的专栏 4083

在 ABAP Push Channel 里玩转 Detached Client:用 Attach Handle 把 WebSocket 连接交接给业务逻辑

摘要:本文介绍了ABAP Push Channels (APC)中的Detached Client技术,该技术通过将WebSocket连接建立与后续处理分离,实现更高效的实时通信。核心流程包括创建连接、使用connect_and_detach交接连接、以及通过attach handle重新附着发送消息。文章还探讨了PCP协议和AMC技术在企业级推送场景中的应用,并通过示例代码展示了Detached Client的具体实现方式。这种设计解决了传统轮询的资源浪费问题,特别适用于生产线监控、客服系统等需要服务端主

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2310

分布式事务:2PC 与 3PC 深度解析

本文深入解析分布式事务中的2PC与3PC协议。传统单机事务在分布式场景下面临网络分区、节点故障、数据不一致等挑战,无法满足CAP定理要求。2PC协议通过准备阶段和提交阶段两阶段协调,确保事务一致性,但存在同步阻塞和单点故障风险。文中提供了2PC的Java实现示例,展示了协调者与参与者的核心逻辑。相比之下,3PC通过引入预提交阶段降低阻塞时间,提高系统可用性。分布式事务技术选型需权衡一致性、可用性和性能需求,根据业务场景选择合适方案。

qq_43414012的博客 1449

STM32F103待机模式原理与低功耗实战指南

待机模式是嵌入式系统实现超低功耗的核心机制,其本质是通过切断内核域电源(VDD/VDDA)实现微安级静态电流,区别于睡眠/停止模式的状态保持特性。原理上依赖电源域隔离、WKUP引脚事件唤醒与RTC备份域协同,技术价值在于支撑电池供电设备长达数年续航。典型应用场景包括物联网传感器节点、智能电表、便携医疗设备等对功耗极度敏感的终端。工程落地需严格遵循GPIO模拟输入配置、唤醒标志清除、备份域解锁等关键步骤,避免因漏电或误唤醒导致实测电流超标。本文以STM32F103为例,深入解析待机模式的硬件基础与HAL库实现

weixin_32999557的博客 66

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

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

分布式事务(定理-刚性事务-柔性事务)

大家都知道事务有四大特性(ACID) ,原子性、一致性、隔离性、持久性。那么什么是分布式事务呢?就是从单机变成多个机器。那么这个时候问题就出现了,比如你要吃饭,自已怎么点什么都行,想吃什么点什么,但是此时不是你自已了,就可能会出现意见的分歧等等。分布式事务确保所有参与的数据库或服务要么全部成功提交,要么全部回滚,以保证数据的一致性。分布式事务的实现和管理比单一数据库的事务要复杂得多。

zihenzzz的博客 1207

STM32F407中文手册

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

什么是分布式事务?2PC、XA、3PC、TCC

事务的 ACID 想必大家都熟知,这其实是严格意义上的定义,指的是事务的实现必须具备原子性、一致性、隔离性和持久性。单体架构的优势在于前期快速搭建、快速上线,并且方法和模块之间都是内部调用,没有网络的开销更加的高效。分布式事务是由多个本地事务组成的,分布式事务跨越了多设备,之间又经历的复杂的网络,可想而知想要实现严格的事务道路阻且长。

RToax 2039

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

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分布式事务(刚性和柔性事务)

普通事务:多个 操作单元,要么全部执行成功,要么全部失败回滚,也就是原子性分布式事务:在普通事务的基础上,只是多个操作单元变成了各分布于多个不同的服务中。说白了就是从本地原子性变成多个服务的原子性。

风生的博客 1208

彻底掌握分布式事务2PC、3PC模型

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源支持(可能也是觉得没人会用吧可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

2401_84103216的博客 937

分布式事务之2PC和3PC

随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。在分布式一致性一文中主要介绍了分布式系统中存在的一致性问题。本文将简单介绍如何有效的解决分布式的一致性问题,其中包括什么是分布式事务,二阶段提交和三阶段提交。 分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置.

xiaomisolo的博客 1744

入门分布式事务,事务协调方法之 2PC & 3PC & XA

事务处理几乎在每一个信息系统中都会涉及,它存在的意义是为了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾,即数据状态的一致性C按照数据库的经典理论,要达成这个目标,需要三方面共同努力来保障。原子性Atomic):在同一项业务处理过程中,事务保证了对多个数据的修改,要么同时成功,要么同时被撤销。隔离性Isolation):在不同的业务处理过程中,事务保证了各自业务正在读、写的数据互相独立,不会彼此影响。持久性D。

weixin_43501634的博客 1167
上一篇: 分布式事务(一)、CAP,BASE理论
下一篇: 分布式事务(三)、柔性事务之 TCC、Saga、本地消息表、事务消息、最大努力通知
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

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

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

打赏作者

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

抵扣说明:

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

余额充值