分布式一致性协议 2PC 3PC

2PC:

第一阶段是提交事务请求:

1.首先就是事务询问,协调者向参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者响应。

2.然后就是执行事务,各参与者节点执行事务操作,并将undo和redo信息计入事务日志中。

3.最后就是各参与者向协调者反馈事务询问的响应,如果参与者成功执行了事务操作,那么就反馈反馈给协调者YES响应,表示事务可以执行;如果参与者没有成功执行事务,那么反馈给协调者NO响应,表示事务不可以执行。

 

第二阶段是执行事务提交(如果所有参与者在第一阶段都响应YES):

1.首先由协调者向所有参与者节点发出commit请求。

2.参与者接收到commit请求后,会正式执行事务提交操作,并在完成提交后释放在整个事务执行期间占用的事务资源。

3.然后参与者在完成事务提交之后,向协调者发送确认ack消息。4.协调者接收到所有参与者反馈的ack消息后,完成事务。

 

  • 优点是:原理简单,实现方便。
  • 缺点:同步阻塞,单点问题,脑裂,太过保守。

 

3PC:

cancommit阶段

1.首先是cancommit阶段,协调者向所有参与者发送事务内容在内的cancommit请求。并等待参与者的反馈。

2.参与者收到cancommit请求后,若判断自己可以顺利执行事务,则向协调者发送ack响应,否则反馈NO相应。

precommit阶段

3.然后就是precommit阶段,若协调者收到了所有参与者的ACK响应,则向所有的参与者发送precommit请求。

4.参与者收到后执行事务,并将操作写入本地事务日志中,成功后向协调者发送ACK响应。若协调者在第一阶段的反馈中有NO,或者协调者等待超时,则向所有的参与者发送中断请求。

docommi阶段

5。最后是docommit,如果协调者收到第二阶段的所有参与者的ack请求,则向参与者发送docommit请求,执行事务的提交。

6.参与者收到docommit请求后执行事务的提交,成功后释放事务资源,并向协调者发送ACK反馈。协调者收到所有的参与者反馈后,完成事务的提交。

 

若协调者等待超时,或者第二阶段中有参与者发送NO反馈,则向所有参与者发送中断请求。参与者收到后执行事务回滚,回滚结束后释放事务资源。参与者向协调发送ACK响应,协调者收到所有的ACK响应后中断事务。

 

  • 缺点:单点故障,数据不一致(超时提交策略,第三阶段参与者等待超时后会提交事务,必会导致数据不一致)。
  • 优点:解决了同步阻塞问题(超时提交策略,第三阶段参与者等待超时后会提交事务)。由precommit解决同步阻塞的问题。

参考:https://mp.weixin.qq.com/s/Blo4uOqZtbf3mMTObRdKXw

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值