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阶段记录的事务日志进行恢复操作。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介: 课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程。对于难以理解的知识点,全部用画图+实战的方式讲解。 第一部分:彻底明白事务的四个特性:原子性、一致性、隔离性、持久性,用场景和事例来讲解。 第二部分:实战讲数据库事务的6中并发异常:回滚丢失、覆盖丢失、脏读、幻读、不可重复读、MVCC精讲。 第三部分:彻底搞清楚4种事务隔离级别:READ_UNCOMMITTED 读未提交隔离级别、READ_COMMITTED 读已提交隔离级别、REPEATABLE_READ 可重复度隔离级别、SERIALIZABLE 序列化隔离级别 第四部分:彻底搞清楚MySQL的各种锁:行锁、表锁、共享锁、排它锁、Next-Key锁、间隙锁、X锁、S锁、IS锁、IX锁、死锁、索引与锁、意向锁等。 第五部分:彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED分布式事务的理论基础:RPC定理、BASE理论、XA协议都是什么,原理是什么,有什么关联关系 第六部分:分布式事务的5种解决方案原理和优缺点:2PC阶段提交法、3PC阶段提交法、TCC事务补偿、异步确保策略、最大努力通知策略 第七部分:阿里巴巴分布式事务框架Seata:历经多年双十一,微服务分布式事务框架,用一个Nacos+Spring Cloud+Seta+MySql的微服务项目,实战讲解阿里的分布式事务技术,深入理解和学习Seata的AT模式、TCC模式、SAGA模式。 课程资料: 课程附带配套2个项目源码72页高清PDF课件一份阿里巴巴seata-1.1.0源码一份阿里巴巴seata-server安装包一份
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值