三阶段提交(Three-Phase Commit,简称3PC)

在分布式系统中,当多个节点共同参与一个事务时,需要保证事务的执行结果一致。三阶段提交协议由协调者(Coordinator)和参与者(Participant)两种角色组成。协调者负责协调整个事务的进行,而参与者则负责执行具体的操作。

 三阶段提交协议(3PC)主要是为了解决两阶段提交协议的阻塞问题,2pc存在的问题是当协作者崩溃时,参与者不能做出最后的选择。因此参与者可能在协作者恢复之前保持阻塞。三阶段提交是二阶段提交(2PC)的改进版本。

  与两阶段提交不同的是,三阶段提交有两个改动点:

        1、协调者和参与者都引入了超时机制

        2、在第一阶段和第二阶段中引入了准备阶段,把2PC的准备阶段再次一分为二(CanCommit和PreCommit)

三阶段提交协议主要分为以下三个阶段:​​​​​​

1、CanCommit 阶段

        1.1、协调者向 参与者发送CanCommit请求。询问是否可以执行事务提交操作(比如尝试连接数据库锁资源等操作是否正常)。然后开始等待参与者的响应。

        1.2、参与者接到CanCommit请求之后,如果其可以正常顺利执行事务,则返回Yes响应,并进入预备状态。否则反馈No

2、PreCommit阶段

        当所有参与者在CanCommit阶段都响应YES,则协调者向所有参与者发送PreCommit请求(这里 协调者和参与者都引入了超时机制 ,2PC中只有协调者可以超时,参与者没有超时机制),参与者接受到请求后,参与者执行本地事务操作,并写入到本地的 Undo/Redo 日志,此时事务没有提交。(Undo 日志是记录修改的数据,用于数据回滚,Redo 日志是记录修改后的数据,用于提交事务后写入数据文件)将结果返回给协调者,并且记录自己的操作日志以备后续恢复。

3、DoCommit阶段

        该阶段进行真正的事务提交,分为以下两种情况

        3.1、执行提交

        A.发送提交请求。协调者接收到参与者发的响应,那么他将从预提交状态进入到提交状态。并向所有参与者发送doCommit请求。
        B.事务提交。参与者接收到doCommit请求之后,执行正式的事务提交。并在完成事务提交之后释放所有事务资源。
        C.响应反馈。事务提交完之后,向协调者发送响应。
        D.完成事务。协调者接收到所有参与者响应之后,完成事务。

        3.2、中断事务

        协调者没有接收到参与者的响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会通知各个参与者执行中断事务。        

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值