当前位置: 首页 > news >正文

3阶段提交协议(3pc)

3阶段提交协议(3pc)

1 简介

三阶段提交协议是一个强一致、中心化的原子提交协议。解决了分布式事务、副本容错等分布式问题。其核心思想是将2PC的二阶段提交协议的“准备阶段”一分为二,形成了由CanCommit、PreCommit、DoCommit三个阶段组成的事务处理协议。

  • 一、阶段一:CanCommit(事务询问)

协调者向所有的参与者发送一个包含事务内容的CanCommit请求,询问是否可以执行事务提交操作。
参与者根据自身的状态判断是否可以执行事务提交,并返回响应给协调者。

  • 二、阶段二:PreCommit(准备提交)

协调者在接收到所有参与者的CanCommit响应后,进行决策。如果所有参与者都返回可以提交,则进入PreCommit阶段。
协调者向所有参与者发送PreCommit请求,通知参与者准备提交事务。
参与者收到PreCommit请求后,会执行事务操作,但此时事务并未真正提交。参与者会记录当前事务的日志,以便在后续阶段进行恢复。

  • 三、阶段三:DoCommit(执行提交)

在PreCommit阶段结束后,协调者再次向所有参与者发送DoCommit请求,通知参与者真正提交事务。
参与者收到DoCommit请求后,会正式提交事务,并释放相关资源。

3pc时序图

2 相比2pc的提升

三阶段提交相较于二阶段提交,它增加了两点修改:一是增加了CanCommit阶段,把整个协商过程扩展到三个阶段来协商;二是增加了超时机制。两个修改分别解决了问题呢?第一个减少了事务资源的锁定范围,这是CanCommit阶段来实现的,CanCommit阶段它可以排除掉一些因为网络原因还有因为一些自身的问题,不能参与不能完成本次全局事务的参与者,把它排除掉之后才会锁走事务资源的范围。另一个它解决的问题是降低了同步阻塞,参与者在等待协调者指令超时之后,他会执行默认的操作。比方说第二阶段参与者在等待协调者的指令超时之后他会默认执行中断本次事务的操作,也就是说中断本地的分支事务。第三阶段参与者未能在超时时间内接受到协调者的指令,那么他会默认执行Commit操作。因为进入到第三阶段的话本次全局事务提交的可能性已经非常大了,因为我们经过第一阶段网络原因的排除以及参与者自身问题的排除,经过第二阶段参与者也确实可以执行本次分支事务。

3 3pc问题

1.增加了一轮消息,增加了复杂度和协商效率。一般在生产环境中很少用3pc,一般都是使用2pc,像seta分布式框架,以及数据库XA协议都是基于2pc算法。

2.数据不一致(超时机制导致)。如果在DoCommit阶段,协调者或参与者出现故障,导致无法完成事务提交,参与者会在等待超时后,根据之前的PreCommit阶段记录的事务日志进行恢复操作。

http://www.lryc.cn/news/375232.html

相关文章:

  • 802.11中的各种帧
  • SAP PP学习笔记21 - 计划策略的Customize:策略组 > 策略 > 需求类型 > 需求类(消费区分,计划区分)
  • axure9设置组件自适应浏览器大小
  • 示例:WPF中TreeView自定义TreeNode泛型绑定对象来实现级联勾选
  • C++ explicit关键字的用法
  • 51.Python-web框架-Django开始第一个应用的增删改查
  • Redis之线程IO模型
  • 针对微电网中可时移,柔性,基础负荷的电价响应模型---代码解析
  • git使用http协议时免密pull和push方法
  • 编译期间生成代码(Lombok原理)
  • 第2讲:pixi.js 绘制HelloWorld
  • golang HTTP2 https测试POST变GET问题小记
  • Linux下的lvm镜像与快照
  • 嵌入式linux系统中SPI子系统原理分析01
  • Part 4.2 背包动态规划
  • Elasticsearch-使用Logstash同步Mysql
  • 6.17作业
  • 算法思想个人总结(结合生活理解)
  • openh264 帧间预测编码过程源码分析
  • Linux网络 - HTTP协议
  • 面试题——Nginx
  • 持续学习的综述: 理论、方法与应用
  • 跨域资源共享(CORS)问题与解决方案
  • 实用软件分享-----一款免费的人工智能替换face的神器
  • 不可思议!这款 Python 库竟然能自动生成GUI界面:MagicGUI
  • 论文发表CN期刊《高考》是什么级别的刊物?
  • 离散数学复习
  • 华为网络设备高频命令
  • 信友队:南风的收集
  • 找工作小项目:day16-重构核心库、使用智能指针(3)