二段提交协议、三段提交协议

1、二段提交协议

2pc
提交事务阶段------投票阶段
协调者发起事务请求到所有的参与者,参与者接收到事务请求后判断自身情况,如果不能执行事务,则反馈不能提交事务,返回NO,如果可以就执行事务,并将undo和redo信息记录事务日志中,反馈Yes

执行事务阶段
协调者收到所有参与者反馈Yes就发布commit命令,否则如果超时未收到或者收到NO 那么发布回滚命令。

参与者收到commit的请求后正式提交事务操作,提交后释放资源。完成事务后向协调者发送ack消息  协调者收到所有参与者的ack后完成事务。

参与者收到rollback的请求查找undo记录,完成回滚后释放资源。完成事务后向协调者发送ack消息  协调者收到所有参与者的ack后中断事务。

优点:原理简单,实现方便

缺点:同步阻塞,单点问题,脑裂问题,太过保守--超时机制,数据不一致---第二阶段部分事务提交。

2、三阶段提交协议

3pc

第一阶段

cancommit

1、协调者向所有参与者发布包含事务内容的canCommit命令,等待参与者回应。

2、参与者认为自身能执行,则返回yes。否则返回NO

第二阶段

preCommit阶段

1、如果协调者收到的反馈都是yes,那么发出preCommit命令,进入prepared阶段,参与者收到preCommit命令后,执行事务操作。并写入undo和redo信息到事务日志中。然后想协调者反馈ack相应

2、如果协调者收到的返回时NO,那么发布abort命令。各参与者收到abort或者超时,都中断事务。

第三阶段,

docommit阶段

如果协调者收到所有参与者的ack相应,那么会发出doCommit命令,所有参与者收到docommit命令就提交事务,然后释放资源。向协调者发出ack。协调者收到所有参与者的ack详细后完成事务。

如果协调者收到No反馈或者超时响应后,将对所有的参与者发出abort请求。各个参与者收到abort请求后会利用undo信息回滚事务。,然后释放资源,反馈ack。协调者收到所有ack消息后,中断事务。

需要注意的是,在第三阶段如果参与者没有收到docommit命令,那么超时后它会提交事务,毕竟第一阶段所有的参与者都响应了,默认他们都能正常工作。

优缺点:

优点:即第三阶段的超时提交。降低了参与者的阻塞范围,并且能够再出现单点故障后继续达成一致。

缺点:数据可能也会不一致。也存在2pc中的缺点


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值