一、2PC

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段

整个事务过程由事务管理器和参与者组成,事务管理器负责 决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚

在计算机中部分关系数据库如Oracle、MySQL支持两阶段提交协议,如下图:

准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者在本地执行事 务,并写本地的Undo/Redo日志,此时事务没有提交。 (Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数 据文件)

提交阶段(commit phase):如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者 发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操 作,并释放事务处理过程中使用的锁资源。注意:必须在最后阶段释放锁资源。 下图展示了2PC的两个阶段,分成功和失败两个情况说明:

成功情况:

失败情况

阶段一 提交事务请求

协调者向所有的参与者节点发送事务内容,询问是否可以执行事务操作,并等待其他参与者节点的

反馈

参与者节点收到协调者的事务操作后,执行操作,但不提交

各参与者节点反馈给协调者,事务是否可以执行

阶段二 事务提交

根据一阶段各个参与者节点反馈的ack,如果所有参与者节点反馈ack,则执行事务提交,否则中断事务

事务提交:

协调者向各个参与者节点发送commit请求

参与者节点接受到commit请求后,执行事务的提交操作

各参与者节点完成事务提交后,向协调者返送提交commit成功确认消息

协调者接受各个参与者节点的ack后,完成事务commit

中断事务:

1、发送回滚请求

2、各个参与者节点回滚事务

3、反馈给协调者事务回滚结果

4、协调者接受各参与者节点ack后回滚事务

二阶段提交存在的问题:

同步阻塞

二阶段提交过程中,所有参与事务操作的节点处于同步阻塞状态,无法进行其他的操作

单点问题

参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)

脑裂导致数据不一致

如果分布式节点出现网络分区,某些参与者未收到commit提交命令。则出现部分参与者完成数据提

交。未收到commit的命令的参与者则无法进行事务提交,整个分布式系统便出现了数据不一致性现

象。

二、3PC 三阶段提交

3PC是2PC的改进版,实质是将2PC中提交事务请求拆分为两步,形成了CanCommit、PreCommit、

doCommit三个阶段的事务一致性协议

阶段一 : CanCommit

1、事务询问

2、各参与者节点向协调者反馈事务询问的响应

阶段二 : PreCommit

根据阶段一的反馈结果分为两种情况

执行事务预提交

发送预提交请求

协调者向所有参与者节点发送preCommit请求,进入prepared阶段

事务预提交

各参与者节点接受到preCommit请求后,执行事务操作

各参与者节点向协调者反馈事务执行

中断事务

任意一个参与者节点反馈给协调者响应No时,或者在等待超时(协调者等待参与者)后,协调者还未收到参与者的反

馈,就中断事务,中断事务分为两步:

1)协调者向各个参与者节点发送abort请求

2)参与者收到abort请求,或者等待超时时间后,中断事务(参与者等待协调者)

阶段三 : doCommit

1、执行提交

发送提交请求

协调者向所有参与者节点发送doCommit请求

事务提交

各参与者节点接受到doCommit请求后,执行事务提交操作

反馈事务提交结果

事务完成

协调者接受各个参与者反馈的ack后,完成事务

2、中断事务

参与者接受到abort请求后,执行事务回滚

参与者完成事务回滚以后,向协调者发送ack

协调者接受回滚ack后,回滚事务

3PC相较于2PC而言,解决了协调者挂点后参与者无限阻塞和单点问题,但是仍然无法解决网络分

区问题

mysql三阶段提交_二阶段提交和三阶段提交相关推荐

  1. mysql 隔离级别 快照_「数据库架构」三分钟搞懂事务隔离级别和脏读

    重要要点 仅凭ACID或非ACID来思考,还需要知道数据库支持的隔离级别. 标榜为"最终一致"的某些数据库可能返回与任何时间点不一致的结果. 一些数据库提供的隔离级别比您要求的更高 ...

  2. 三位数除以两位数竖式计算没有余数_二年级数学第三十课:有余数的除法 例4 试商...

    二年级数学第三十课:有余数的除法 例4 试商 Spring is bound to come. 一.学习目标与重难点 学习目标: 1.通过计算引导学生探索有余数除法的想商试商方法,从计算中总结有余数除 ...

  3. catv系统主要有哪三部分组成_你了解买车“三大件”之一的悬挂系统吗?家用车用什么悬挂系统?...

    ​买车大家都听说要买三大件好的,但是具体哪三大件呢?估计好多买车的人都说不上来,其实三大件也就是"发动机.变速箱.底盘(悬挂系统)". 发动机和变速箱之前跟大家有分享过,今天跟大家 ...

  4. springboot 订单重复提交_瞬间几千次的重复提交,我用Spring Boot+Redis扛住了

    在实际的开发项目中,一个对外暴露的接口往往会面临,瞬间大量的重复的请求提交,如果想过滤掉重复请求造成对业务的伤害,那就需要实现幂等! 我们来解释一下幂等的概念: 任意多次执行所产生的影响均与一次执行的 ...

  5. mysql三个层次_数据库的基本结构三个层次

    数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合.这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增.删.改和检索 ...

  6. 织梦主动提交_织梦CMS网站如何自动提交百度快速收录(详细教程)

    前不久,站长们发现百度搜索资源平台把链接提交"的功能改为"普通收录",同时新增了"快速收录"的功能.普通收录,我相信很多站长们都知道怎么去提交,但是快 ...

  7. 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...

    1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...

  8. 搭建mysql数据库脚本语言_二十二、创建数据库脚本

    安装mysql数据库 可以看之前写过的一篇博文:点击传送 mysql命令 mysql程序使用两种不同类型的命令 特殊的MySQL命令 标准的SQL语句 mysql程序有自己的一组命令,方便控制环境以及 ...

  9. 新华三的背景_智能联接,新华三在重新勾勒拓扑图

    紫光股份旗下新华三集团,正在重新勾勒了拓扑图.曾经被认为是经典,而且永远不会被"淘汰"的设备,好像都已经不见.交换机是否可与服务器合二为一?应该是可以.路由器能否同时具备广域流量本 ...

最新文章

  1. python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客
  2. 【引用】JS刷新当前页面
  3. html引入iview如何修改样式,vue中如何修改iView的样式,
  4. FreeRTOS 的命名规则
  5. JAX-RS协议说明
  6. C语言程序设计实验最短路径,7最短路径C语言程序设计.pdf
  7. Linux,没你想象的那么安全!
  8. 写给考完SDOI2016R2D1的自己
  9. 框架选择的原因及其说明
  10. HTML5中最重要的技术点有哪些
  11. wps2019计算机里的云盘,WPS2019云文档如何使用?
  12. 【ROM定制】Fastboot Enhance —— 适合人类使用的Fastboot + Payload.bin 解包工具箱
  13. 超级终端连接华为交换机_win8系统使用超级终端连接华为交换机的操作方法
  14. 炫酷神器,AE插件Bodymovin.zxp的安装与使用
  15. 原创 基于微信小程序毕业设计题目选题课题 自习室图书馆座位预约小程序的设计与实现(2)座位预约的实现
  16. 植物大战僵尸修改存档总结
  17. Whitestorm.js入门
  18. Choco求解器的安装
  19. 【Python实战】听书就用它了:海量资源随便听,内含几w书源,绝对精品哦~(好消息好消息)
  20. Centos启动界面:You are in emergency mode

热门文章

  1. Oracle数据库登陆报错ORA-00257
  2. xxx.tlb文件与xxx.tli, xxx.tlh 的关系
  3. springmvc的RequestResponseBodyMethodProcessor解析_晏无心_新浪博客
  4. 周期噪声频域滤除、散粒噪声中值滤波
  5. 文本生成图像T2I复现所需操作命令合集
  6. vue webpak版本 查看_vue版本以及webpack版本
  7. 大数据助力农牧业转型升级
  8. linux vi 复制与粘贴
  9. C语言的左值(lvalue)和右值(rvalue)的含义是什么?
  10. STM32串口发送数据和接收数据方式总结