分布式学习六:三阶段提交(3PC)

举报
仙士可 发表于 2023/06/26 17:14:05 2023/06/26
【摘要】 三阶段提交3PC,是Three-Phase Commit的缩写,即三阶段提交,是2PC的改进版,其将二阶段提 交协议的“提交事务请求”过程一分为二,形成了由CanCommit, PreCommit和do Commit 三个阶段组成的事务处理协议.阶段一:CanCommit1:事务询问:协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各...

三阶段提交

3PC,是Three-Phase Commit的缩写,即三阶段提交,是2PC的改进版,其将二阶段提 交协议的“提交事务请求”过程一分为二,形成了由CanCommit, PreCommit和do Commit 三个阶段组成的事务处理协议.

阶段一:CanCommit

1:事务询问:协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。

2:反馈响应:参与者在接收到来自协调者的canCommit请求后,正常情况下,如果其自身认为可以顺利执行事务,那么会反馈Yes响应,并进入预备状态,否则反馈No响应.

阶段二:PreCommit

协调者会根据阶段一的反馈决定是否进行事务的PreCommit操作,如果全部为Yes,则进入PreCommit,否则进入中断事务

1:发起预提交请求:协调者向所有参与者发送PreCommit请求,并进入Prepared阶段

2:事务预提交:参与者接收到PreCommit请求后,会执行事务操作,并记录undo和redo信息到日志中

3:参与者反馈:各个参与者反馈事务执行的响应,成功了则返回ACK,并且等待最终的指令:提交(commit)/回滚(rollback)

中断事务

假如参与者在上面步骤返回了No或者协调者等待所有参与者响应超时,则进入中断事务步骤

1:发送中断请求:协调者向所有参与者发送abort请求

2:中断事务:无论是接收到了abort请求,还是等待时接收超时,参与者都中断事务

注意,完成阶段二之后,如果参与者在一定时间没有收到阶段三消息,触发超时后会自动提交

阶段三:doCommit

1:发送提交请求:协调者在收到所有正常响应后,它将转换到"提交"状态,并向所有的参与者发送doCommit请求

2:事务提交:参与者在收到doCommit请求后,正式提交事务,并在完成之后释放事务所占用的资源

3:反馈事务结果:参与者提交事务后,向协调者发送ACK消息

4:完成事务:协调者接收到所有ACK消息后,完成事务

中断事务

假如协调者接收到了No响应或者长时间没有接收到所有参与者的响应,则进入中断事务状态

1:发起中断请求:协调者向所有参与者发送abort请求

2:事务回滚:参与者接收到abort请求后,会利用阶段二中记录的undo信息来回滚事务,回滚成功后释放事务占用的资源

3:反馈回滚结果:参与者向协调者发送ACK消息

4:中断事务:协调者接收到所有参与者反馈的ACK消息,中断事务成功

注意:一旦进入阶段三,可能会出现 2 种故障:

1:协调者出现问题

2:协调者和参与者之间的网络故障

一段出现了任一一种情况,最终都会导致参与者无法收到 doCommit 请求或者 abort 请求,针对这种情况,参与者都会在等待超时之后,继续进行事务提交。


优缺点

优点:相比较 2PC,最大的优点是减少了参与者的阻塞范围(第一个阶段是不阻塞的),并且能够在单点故障后继续达成一致(2PC 在提交阶段会出现此问题,而 3PC 会根据协调者的状态进行回滚或者提交)。

缺点:如果参与者收到了 preCommit 消息后,出现了网络分区,那么参与者等待超时后,都会进行事务的提交,这必然会出现事务不一致的问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。