怎么理解MySQL的2PC和3PC

67次阅读
没有评论

共计 2384 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要介绍“怎么理解 MySQL 的 2PC 和 3PC”,在日常操作中,相信很多人在怎么理解 MySQL 的 2PC 和 3PC 问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解 MySQL 的 2PC 和 3PC”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

分布式系统和分布式一致性问题

分布式系统,即运行在多台不同的网络计算机上的软硬件系统,并且仅通过消息传递来进行通信和协调。

分布式一致性问题,即相互独立的节点之间如何就一项决议达成一致的问题。

2PC(Two-Phase Commit 二阶段提交)

二阶段提交,是指将事务提交分成两个部分:准备阶段和提交阶段。事务的发起者称之为协调者,事务的执行者称为参与者。

阶段一:准备阶段

              由协调者发起并传递带有事务信息的请求给各个参与者,询问是否可以提交事务,并等待返回结果。

              个 参与者执行事务操作,将 Undo 和 Redo 放入事务日志中(但是不提交)

              如果参与者执行成功就返回 YES(可以提交事务),失败 NO(不能提交事务)

阶段二:提交阶段

              此阶段分两种情况:所有参与者均返回 YES,有任何一个参与者返回 NO

                所有参与者均反馈 YES 时,即提交事务。

                任何一个参与者反馈 NO 时,即中断事务。

提交事务:(所有参与者均反馈 YES)

1、协调者向所有参与者发出正式提交事务的请求(即 Commit 请求)。

2、参与者执行 Commit 请求,并释放整个事务期间占用的资源。

3、各参与者向协调者反馈 Ack 完成的消息。

4、协调者收到所有参与者反馈的 Ack 消息后,即完成事务提交。

中断事务:(任何一个参与者反馈 NO)

1、协调者向所有参与者发出回滚请求(即 Rollback 请求)。

2、参与者使用阶段 1 中的 Undo 信息执行回滚操作,并释放整个事务期间占用的资源。

3、各参与者向协调者反馈 Ack 完成的消息。

4、协调者收到所有参与者反馈的 Ack 消息后,即完成事务中断。

2PC 的缺陷

1、同步阻塞:最大的问题即同步阻塞,即:所有参与事务的逻辑均处于阻塞状态。

2、单点:协调者存在单点问题,如果协调者出现故障,参与者将一直处于锁定状态。

3、脑裂:在阶段 2 中,如果只有部分参与者接收并执行了 Commit 请求,会导致节点数据不一致。

由于 2PC 存在如上同步阻塞、单点、脑裂问题,因此又出现了 2PC 的改进方案,即 3PC。

3PC(Three-Phase Commit 三阶段提交协议)

3PC,三阶段提交协议,是 2PC 的改进版本,即将事务的提交过程分为 CanCommit、PreCommit、do Commit 三个阶段来进行处理。

阶段一:CanCommit

             1、协调者向所有参与者发出包含事务内容的 CanCommit 请求,询问是否可以提交事务,并等待所有参与者答复。

             2、参与者收到 CanCommit 请求后,如果认为可以执行事务操作,则反馈 YES 并进入预备状态,否则反馈 NO。

阶段二:PreCommit

                此阶段分为两种情况:

                1. 所有参与者均受到请求并返回 YES。

                2. 有任何一个参与者返回 NO,或者有任何一个参与者超时,协调者无法收到反馈,则事务中断

事务预提交:(所有参与者均反馈 YES 时)

1、协调者向所有参与者发出 PreCommit 请求,进入准备阶段。

2、参与者收到 PreCommit 请求后,执行事务操作,将 Undo 和 Redo 信息记入事务日志中(但不提交事务)。

3、各参与者向协调者反馈 Ack 响应或 No 响应,并等待最终指令。

中断事务:(任何一个参与者反馈 NO,或者等待超时后协调者尚无法收到所有参与者的反馈时)

1、协调者向所有参与者发出 abort 请求。

2、无论收到协调者发出的 abort 请求,或者在等待协调者请求过程中出现超时,参与者均会中断事务。

阶段 3:do Commit

此阶段也存在两种情况:

1、所有参与者均反馈 Ack 响应,即执行真正的事务提交。

2、任何一个参与者反馈 NO,或者等待超时后协调者尚无法收到所有参与者的反馈,即中断事务。

提交事务:(所有参与者均反馈 Ack 响应时)

1、如果协调者处于工作状态,则向所有参与者发出 do Commit 请求。

2、参与者收到 do Commit 请求后,会正式执行事务提交,并释放整个事务期间占用的资源。

3、各参与者向协调者反馈 Ack 完成的消息。

4、协调者收到所有参与者反馈的 Ack 消息后,即完成事务提交。

中断事务:(任何一个参与者反馈 NO,或者等待超时后协调者尚无法收到所有参与者的反馈时)

1、如果协调者处于工作状态,向所有参与者发出 abort 请求。

2、参与者使用阶段 1 中的 Undo 信息执行回滚操作,并释放整个事务期间占用的资源。

3、各参与者向协调者反馈 Ack 完成的消息。

4、协调者收到所有参与者反馈的 Ack 消息后,即完成事务中断。

注意:进入阶段三后,无论协调者出现问题,或者协调者与参与者网络出现问题,都会导致参与者无法接收到协调者发出的          do Commit 请求或 abort 请求。此时,参与者都会在等待超时之后,继续执行事务提交。

3PC 的优点和缺陷

优点:降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题,阶段 3 中协调者出现问题时,参与者会继续提交事务。

缺陷:脑裂问题依然存在,即在参与者收到 PreCommit 请求后等待最终指令,如果此时协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。

到此,关于“怎么理解 MySQL 的 2PC 和 3PC”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计2384字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)