3PC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/deng624796905/article/details/85728221

本篇介绍分布式一致性算法:三阶段提交(3PC)

3PC,即三阶段提交,是2阶段提交的改进版,其将二阶段提交协议的“准备阶段”一份为二,形成了cancommit,precommit,do commit三个阶段。

阶段一:CanCommit
事务询问 
协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
参与者响应 
在参与者接收到协调者的canCommit请求,如果可以执行,参与者发送Yes进行反馈,否者发送No。

阶段二:PreCommit
如果协调者从阶段一中的CanCommit响应中得到Yes反馈 
1. 发送预提交请求 
协调者向所有的参与者发送preCommit请求,并进入Prepared阶段。 
2. 事务预提交 
参与者接收到preCommit请求后,会执行事务操作,并将Undo和Redo信息记录到事务日志中。 
3. 参与者响应                                                                                                                                                                                   如果参与者成功执行了事务操作,就会返回给协调者Ack响应,同时等待最终指令。                                                                    如果协调者从阶段一中的CanCommit响应中得到No反馈,或者协调者等待超时后发送中断请求协调者会向所有的参与者发送abort请求。                                                                                                                                                                                      中断事务,无论是接收到协调者的abort请求,还是等待协调者的响应而出现的超时,参与者都会中断事务。


阶段三:doCommit

执行提交

发送提交请求:当协调者收到所有参与者反馈的Ack响应,向所有参与者发送DoCommit请求,从预提交状态转到提交状态 
事务提交:参与者接收到DoCommit请求后,正式执行事务提交操作,并释放占用的事务资源 
反馈事务提交结果:参与者完成事务提交后向协调者发送Ack消息 
完成事务:协调者接受到所有参与者反馈的Ack响应后,完成事务

中断事务

发送中断请求:协调者向所有参与者节点发出Abort请求 
事务回滚:参与者接收到Abort请求后,利用Undo信息执行事务回滚操作,并释放占用的事务资源 
反馈事务回滚结果:参与者完成事务回滚后向协调者发送Ack消息 
中断事务:协调者接收到所有参与者反馈的Ack响应后,中断事务

第三阶段中若参与者无法及时接收到协调者发送的DoCommit或者Abort请求都会在等待超时后继续进行事务提交

3PC的优缺点

优点:降低参与者的阻塞范围,能够在出现单点故障后继续达成一致

缺点: 接受者接收到PreCommit消息后,如果出现网络分区导致协调者和参与者无法正常通信,这时参与者仍会进行事务提交,造成数据的不一致                                                                                                                                                                            协调者出现问题
协调者和参与者网络出现问题 
无论出现哪种情况,最终都会导致参与者无法及时接收到来自协调者的doCommit或者是abort请求,针对这样的情况,参与者都会在等待超时之后,继续进行事务提交。


 

猜你喜欢

转载自blog.csdn.net/deng624796905/article/details/85728221
3PC
今日推荐