美文网首页
三阶段提交协议

三阶段提交协议

作者: 想做安徒生 | 来源:发表于2018-06-30 11:04 被阅读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,此时系统状态发生不一致性。

    相关文章

      网友评论

          本文标题:三阶段提交协议

          本文链接:https://www.haomeiwen.com/subject/dnltuftx.html