叙述你所知道的分布式一致性协议

2pc,3pc,paxos,zab
在分布式应用中,每个节点都知道自己的事务提交的结果是成功或者失败,但是无法直接获取其他分布式节点的结果。因此需要一个协调者,其他节点成为参与者。
一. 2pc
提交事务请求,执行事务提交。同步阻塞、单点故障、不一致。主要用于数据库领域内,解决了分布式事务的原子性问题
1.提交事务请求
首先向其他节点询问是否可以执行事务提交操作,并发送事务给各个节点。然后各个节点执行事务,并将操作写入本地事务日志。各个参与者向协调者发送反馈。
2.执行事务提交
1)若协调者受到所有参与者的ACK反馈
向所有的参与者发送commit消息。参与者收到commit消息后执行事务提交操作,并向协调者发送ACK反馈,然后释放事务资源。协调者收到反馈后完成事务。
2)若协调者收到某一个参与者的NO反馈,或者协调者等待超时之后
向所有参与者节点发送回滚请求,参与者收到后执行回滚请求,执行完成后向协调者发送ACK反馈,协调者接收到所有参与者的ACK反馈后完成事务终端。
二. 3pc
cancommit, precommit, docommit;单点故障,数据不一致,解决了同步阻塞问题(超时提交策略,第三阶段参与者等待超时后会提交事务)。preCommit解决了同步阻塞的问题。
1)cancommit
协调者向所有参与者发送包含事务内容在内的cancommit请求,并等待参与者的反馈。参与者收到cancommit请求后,若判断自己可以顺利执行事务,则向协调者发送ACK响应,否则反馈NO响应。
2)precommit
若协调者收到所有参与者的ACK响应,则向所有的参与者发送precommit请求。参与者收到后执行事务,并将操作写入本地事务日志,成功后向协调者发送ACK响应。若协调者在第一阶段的反馈中有no,或者协调者等待超时,则向所有的参与者发送中断请求。
3)docommit
如果协调者收到了第二阶段的所有参与者的ACK请求,则向参与者发送docommit请求,执行事务的提交。参与者收到docommit请求后,执行事务的提交,成功后释放事务资源。参与者事务提交后向docommit发送ACK反馈,协调者收到所有参与者反馈后,完成事务的提交。
若协调者等待超时,或者第二阶段有参与者发送no反馈,则向所有参与者发送中断请求,参与者收到后执行事务回滚,回滚结束后释放事务资源,并向协调者发送ACK响应,协调者收到所有的ACK响应后中断事务。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在上一篇中,我们介绍了为什么使用分布式,为什么会出现分布式数据一致性问题,以及相关分布式理论:CAP/BASE理论...
    先生zeng阅读 5,860评论 0 2
  • 一致性协议 在分布式系统中,每一个机器节点都能明确知道自己在进行事务操作中的结果是成功还是失败,但是无法直接获取到...
    codingBen阅读 7,188评论 0 4
  • 为了解决分布式系统的一致性问题,在长期的探索研究过程中,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶...
    codersm阅读 2,812评论 0 0
  • 为了解决分布式一致性问题,涌现出了一大批经典的分布式一致性算法,其中最著名的就是2PC、3PC和Paxos。本文将...
    匠丶阅读 4,292评论 0 7
  • 坚持目标【读书】分享第780天2019.3.19 1、心理学不应该只研究人类的弱点和问题,而应该同时关注人类的美德...
    坚定目标阅读 1,738评论 0 0

友情链接更多精彩内容