简述计算机学科的三个过程,三阶段提交

article/2025/9/15 7:55:09

三阶段提交,也叫三阶段提交协议,是在计算机网络及数据库的范畴下,使得一个分布式系统内的所有节点能够执行事务的提交的一种分布式算法。三阶段提交是为解决两阶段提交协议的缺点而设计的。

中文名

三阶段提交

外文名

Three-phase commit

阶    段

决定段、准备提交段和执行段优    点

能避免阻塞状态等

缺    点

实现比较复杂等

学    科

计算机科学

三阶段提交简述

编辑

语音

两阶段提交协议(2PC)既简单又精巧,它把本地原子性提交行为的效果扩展到分布式事务,保证了分布式事务提交的原子性,并在不损坏日志的情况下,实现快速故障恢复,提高分布式数据库系统的可靠性。但是在最坏的情况下,两阶段提交协议在执行过程中可能出现任意多次服务器和通信故障。尽管协议不可能指定协议完成的时间限制,但它能够处理连续故障(服务器崩溃或消息丢失),并保证最终完成。

对于前面提到的超时问题,两阶段提交协议可能造成参与者很长时间停留在不确定状态上。这些延迟主要源于协调者故障或者不能从参与者那里得到getDecision请求的回答。即使协作协议允许参与者可以向其他参与者发送getDecision请求,但是当所有参与者都处于不确定状态时,延迟仍然不可避免。

2PC并不是一个无阻塞协议,有些失败修复方式有可能能使得站点阻塞。例如,一个进程在投了“提交”票之后,在接收到全局决策之前超时失败了;如果这个进程所能通信到的站点对全局决策同样一无所知,那么这个站点只好被阻塞了。实际上这种情况是相当少见的,但还是有必要引入一个更强的无阻塞协议——三段提交协议(3PC)。3PC协议在站点失败,甚至是所有的站点都失败的情况下也不会带来阻塞,但是会因为通信失败导致全局事务原子性被破坏,不同的站点收到了不同的策略。

三阶段提交协议(3PC)在恢复过程中协调者场地发生故障的情况下,也能够避免事务阻塞。这种方法的基本思想是在协调者发出prepare消息并收到所有下属的yes消息时,向所有下属发送precommit消息,而不是commit消息。然后在收到足够数目(比必须处理的最大故障数目要大)的ack消息以后,协调者向日志中强迫写入commit记录,再向所有下属发送commit消息。在3PC中,协调者场地能够有效地推迟commit决定,只有在确定所有下属都知道commit决定以后,才真正发出commit决定。如果协调者随后发生了故障,在协调者恢复之前,下属场地之间就可以互相通信,确定事务是应该提交还是中止事务(如果所有下属都没有收到precommit消息)。

3PC在正常执行时会增加许多额外的负载,并且为了确保不发生事务阻塞,还需要在发生传输故障时不会发生网络分割(部分场地不能同其他场地相连)。出于这些原因,3PC并没有实际应用。[1]

三阶段提交两阶段提交协议(2PC)

编辑

语音

为了保持分布式事务的原子性,事务管理器使用了一个标准的两层恢复机制,称为两阶段提交协议(2PC)。这种两阶段提交协议可以确保事务的更新可以提交给所有参与的资源,或者确保更新完全回滚到所有的资源外,资源恢复到事务开始前的状态。通过这种方式,提交协议就可以保证数据的完整性。

两段提交协议把一个分布事务的所有分布管理分为两类:一个是协调者,所有其他的是参与者。协调者作出该事务是提交还是撤消的最后决定。所有的参与者负责管理相应的子事务的执行及各自局部数据库上执行写操作。

两段提交协议的内容是:

表决阶段:协调者向所有参与者发出“准备提交”信息。如果某个参与者准备提交,就回答就绪信息,否则回答撤消信息。参与者在回答前应把有关信息写入自己的日志中。协调者在发出准备提交信息前也要把有关信息写入自己的日志中。

如果在规定时间内协调者收到所有参与者的就绪信息,就作出提交的决定,否则作出撤消的决定。

执行阶段:协调者将有关决定的信息先写入日志,然后把这个决定发给所有的参与者。所有的参与者收到命令以后首先往自己的日志中写入收到提交(或撤消)决定的信息,并向协调者发送应答信息,最后执行有关决定。协调者收到所有参与者的应答信息后,一个事务执行到此结束。有关日志信息可以脱机保存。

采用两段提交协议以后,当系统发生故障时,各场地利用各自有关的日志信息(必要是加上后备副本)便可以执行恢复操作。[2]

三阶段提交三阶段提交协议内容

编辑

语音

be9b1ca98c2196503082eff7343b72c5.png

图1:三阶段提交协议3PC包括三段:决定段、准备提交段和执行段。其具体过程如图1所示。

(1)第一段——决定段

◆协调者向所有参与者发出准备消息(prepare)(同2PC)。

◆若任一参与者回答中止Abort消息,则进入第三段(执行段),协调者发出反转Rollback命令。

若所有参与者都回答Vote-Commit消息,则进入第二段(准备提交段)。

(2)第二段——准备提交段

◆由协调者发准备提交消息(Prepare to Commit)。

◆参与者收到该消息后写入运行记录(Log record)中,并回答确认消息ACK。

(3)第三段——执行段

◆协调者根据参与者回答的ACK/Abort消息,向参与者发Commit/Rollback命令。

◆参与者根据协调者的命令决定执行提交或回滚,完成事务的处理。[3]

三阶段提交三阶段提交协议特点

编辑

语音

一、优点

三段提交协议的优点:能避免阻塞状态,在三段提交协议中,如果协调者在第二段之后失效,不会产生像2PC协议中可能出现的事务阻塞现象。因为下面两种状态至少存在一种:

1、所有参与者都进入Prepare to Commit状态,事务可以安全地提交。因为所有参与者都回答了ACK确认消息。

2、至少有一个参与者未进入Prepare to Commit状态,事务可以安全回滚。因为至少有一个参与者未回答ACK确认消息,则协调者也不会发出Globle-Commit命令。

二、缺点

三段提交协议缺点:虽能避免阻塞状态,但需要更多的通讯次数,实现比较复杂。因此实际应用较少。大多数使用一致性提交协议的系统都采用二阶段提交协议。[3]

词条图册

更多图册

参考资料

1.

(美)罗摩克希纳 (美)格尔克著.数据库管理系统(第2版):清华大学出版社,2002年12月

2.

成思危主编.过程系统工程辞典:中国石化出版社,2001年08月

3.

高红云主编.分布式数据库技术:内蒙古大学出版社,2008.12


http://chatgpt.dhexx.cn/article/fRdYkiep.shtml

相关文章

什么是Mysql 两阶段提交?为什么必须有“两阶段提交”呢? 两阶段提交的原理? 解决 bin log 与 redo log 的一致性问题?

文章目录 什么是两阶段提交为什么必须有“两阶段提交”呢? 两阶段提交的原理? 解决 bin log 与 redo log 的一致性问题?在没有两阶段提交的恢复情况下:有了两阶段两阶段提交后的恢复情况: 什么是两阶段提交 当有数据修…

分布式事务 - 两阶段提交与三阶段提交

在分布式系统中,著有CAP理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,该理论阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区…

mysql的两阶段提交理解

一个事务的执行方式(一般存在显式开启和隐式开启,在未申明的情况下一般是隐式事务):redo log存在两阶段提交,prepare和commit.当写完redo log 时,开始写 bin log ,当bin log写完,会在这次事务的最后加上commit(xid)&am…

分布式事务(两阶段提交、三阶段提交)

假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子: 上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻…

两阶段提交(2 Phase Commit) 在 PostgreSQL 和 RocksDB 中的实现

文章目录 前言用法PostgreSQLRocksDB 实现PostgreSQL 2PCRocksDB 2PCWRITE_COMMITTEDWRITE_PREPARED解决 snapshot-read 问题解决 rollback 问题 WRITE_UNPREPARED 总结 前言 本节中提到的代码实现是基于 PG:REL_15_STABLE 和 Rocksdb: master-fcd816d534 代码介绍的…

分布式事务(2)两阶段提交

分布式事务(1)基本概念 分布式事务(2)两阶段提交 分布式事务(3)TCC 分布式事务(4)可靠消息最终一致性 分布式事务(5)最大努力通知 分布式事务【2】2PC两阶段提交 1.什么是2PC(两阶段提交)2.解决方案2.1 XA方案2.2 Seata方案 3.seata实现2PC事务4.2PC解决…

MYSQL之两阶段提交和组提交(数据一致性)

我们在MySQL 的日志中详细的介绍了undo log、redo log、binlog这三个日志和所用到的一些缓存知识,那么下面我们分析一下更新语句执行过程,它们是怎么变化的呢?下面我们直接给答案吧。假如我们修改一行主键索引(id)为1的…

MySQL的两阶段提交(数据一致性)

MySQL的两阶段提交 两阶段提交过程为什么要写redo log,不写redo log的话,根本就不会出现“两阶段提交”的麻烦事啊?为什么要写两次redo log,写一次不行吗?在两阶段提交的情况下,是怎么实现崩溃恢复的呢&…

分布式事务之两阶段提交

两阶段提交协议 两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,另一个是提交阶段;准备阶段和提交阶段都是由事务管理器发起的;我们可以将事务管理器称为协调者,将资源管理器称为参与者。 流程 准备阶段&a…

两阶段提交和三阶段提交的理解

两阶段提交和三阶段提交的理解 本文主要通过梳理流程说明2PC的缺点,并总结3PC的优点。 一、2PC流程及致命问题 如图所示,2PC的流程简要: 1.协调者 参与者都是INIT状态,参与者等待消息。 2.协调者进入prepare状态发送vote_requ…

两阶段提交和三阶段提交的区别

1.分布式理论:一致性协议:2PC 1.1 什么是2PC2PC,即两阶段提交协议的简写,是整个事务过程分为两个阶段,准备阶段(Prepare phase)和提交阶段(Commit phase)两个阶段过程: …

分布式两阶段提交和三阶段提交

随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。 为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本…

MySQL (十四) 两阶段提交

一. 两阶段提交 1.1 利用 binlog 和redolog 做到两阶段提交 从上图中看出:最后提交事务的三个步骤: 写入redo log ,处于prepare状态写binlog修改redo log 状态变为commit 由于redo log 的提交分为prepare 和commit两个阶段,所以我…

mysql之两阶段提交

什么是两阶段提交 当有数据修改时,会先将修改redo log cache和binlog cache然后在刷入到磁盘形成redo log file,当redo log file全都刷入到磁盘时(prepare 状态)和提交成功后才能将binlog cache刷入磁盘,当binlog全部刷…

分布式事务:两阶段提交与三阶段提交

两阶段提交与三阶段提交 分布式事务二阶段提交请求阶段提交阶段举例故障分析柜员侧出现故障或拒绝Proposal第一阶段经理侧出现故障第二阶段经理侧出现故障 二阶段提交存在的问题 三阶段提交canCommit阶段preCommit阶段doCommit阶段特点 参考 分布式事务 满足ACID(原…

正确理解二阶段提交(Two-Phase Commit)

文章目录 明确问题草稿方案原子提交协议希望实现的2个特性正确的二段提交协议(Two-Phase Commit)二阶段提交协议如何满足安全性(Safety)二阶段提交协议如何满足存活性( Liveness) 如何应对超时 超时终止协议 如何应对宕机重启 二阶…

两阶段提交协议(two phase commit protocol,2PC)详解

一、协议概述 两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回…

简单谈谈MySQL的两阶段提交

一、简单回顾三种日志 在讲解两阶段提交之前,需要对MySQL中的三种日志即binlog、redo log与undo log有一定的了解。 在这三种日志中,很多同学会把binlog与redo log混淆,下面使用一张表格来简单对比下两者的区别。 当然,如果对bi…

现控笔记(五)稳定性与Lyapunov方法

稳定性与李雅普诺夫方法 线性系统稳定性:只取决于系统的结构和参数,稳定的条件是特征方程的根都具有负实部(在左半根平面),可用劳斯判据、耐奎斯特判据等方法判断、非线性系统的稳定性:与初始条件和外部扰动的大小有关。 稳定性…

Lyapunov稳定性分析复习笔记

前言 本文所提及的稳定性分析是指系统运动状态的稳定性分析,在进行本文标题内容相关的学习之前,我们首先需要回答一个问题,为什么需要进行稳定性分析?其实这个问题是不言而喻的,稳定性问题在当代显得尤为重要&#xf…