三阶段提交协议

2018-06-30  本文已影响0人  想做安徒生

一.三阶段提交协议过程介绍
在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段拆分成了两步:询问,然后再锁资源,最后真正提交。三阶段提交协议顾名思义,分为三个阶段:申请询问阶段(canCommit)、执行阶段(PreCommit)、提交阶段(doCommit)

1.申请询问阶段
提交一个包含事务内容的申请给参与者,询问参与者是否可以执行事物。如果回复OK则进行下一个阶段

image.png

2.执行&预提交阶段-根据阶段一的结果有两种情况
(1)阶段一参与者反馈都是ok,则各参与者执行事物操作 并记录redo、undo日志后,反馈协调者ack,然后等到指令(commit or abort)
(2)阶段一任一参与者反馈NO,或者与协调者发生网络异常,协调者超时等待,协调者将发送 abort请求,进入中断事务流程,无论是参与者收到abort请求,还是等待协调者超时,都会自动进行中断事务

3.执行真正的事物提交-根据阶段二的结果需要执行提交事物
(1)根据阶段二的结果需要执行提交事物,协调者发送commit指令,进入真正的提交事务阶段,释放资源,参与者完成事物后反馈ack给协调者
(2) 协调者正常工作时,任意参与者反馈no或者 协调者等待超时,将会进行中断事务操作(发出abort指令,参与者执行undo日志,回滚后释放资源

(3)在阶段三,参与者等待网络超时都将继续执行commit

二、三阶段提交协议和两阶段提交协议的不同

(1)对于协调者(Coordinator)和参与者(Cohort)都设置了超时机制(在2PC中,只有协调者拥有超时机制,即如果在一定时间内没有收到cohort的消息则默认失败)。

(2)在2PC的准备阶段和提交阶段之间,插入预提交阶段,使3PC拥有CanCommit、PreCommit、DoCommit三个阶段。

(3)PreCommit是一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。

三.三阶段提交协议的缺点

如果进入PreCommit后,Coordinator发出的是abort请求,假设只有一个Cohort收到并进行了abort操作,

而其他对于系统状态未知的Cohort会根据3PC选择继续Commit,此时系统状态发生不一致性。

上一篇下一篇

猜你喜欢

热点阅读