要解决的问题:分布式数据一致性(当客户端发起写入数据请求时,各个节点的数据保持一致)

两阶段提交

存在的问题:

  1. 同步阻塞: 协调者发起命令后只能无限等待参与者响应
  2. 单点问题:协调者宕机则整个集群不可用
  3. 脑裂问题:网络分化后,导致部门节点提交成功,部分节点失败,造成数据不一致

Paoxs协议

问题背景:假设我们有下图的系统,想要在server1,server2,server3选一个master。


prepare阶段 
  1. 每个server向proposer发送消息,表示自己要当leader,假设proposer收到消息的时间不一样,顺序是: proposer2 -> proposer1 -> proposer3,消息编号依次为1、2、3。 
  紧接着,proposer将消息发给acceptor中超过半数的子成员(这里选择两个),如图所示,proposer2向acceptor2和acceptor3发送编号为1的消息,proposer1向acceptor1和accepto2发送编号为2的消息,proposer3向acceptor2和acceptor3发送编号为3的消息。 
   2. 假设这时proposer1发送的消息先到达acceptor1和acceptor2,它们都没有接收过请求,所以接收该请求并返回【pok,null,null】给proposer1,同时acceptor1和acceptor2承诺不再接受编号小于2的请求; 
  紧接着,proposer2的消息到达acceptor2和acceptor3,acceptor3没有接受过请求,所以返回proposer2 【pok,null,null】,acceptor3并承诺不再接受编号小于1的消息。而acceptor2已经接受proposer1的请求并承诺不再接收编号小于2的请求,所以acceptor2拒绝proposer2的请求; 
  最后,proposer3的消息到达acceptor2和acceptor3,它们都接受过提议,但编号3的消息大于acceptor2已接受的2和acceptor3已接受的1,所以他们都接受该提议,并返回proposer3 【pok,null,null】; 
  此时,proposer2没有收到过半的回复,所以重新取得编号4,并发送给acceptor2和acceptor3,此时编号4大于它们已接受的提案编号3,所以接受该提案,并返回proposer2 【pok,null,null】。

accept阶段 

  Proposer3收到半数以上(两个)的回复,并且返回的value为null,所以,proposer3提交了【3,server3】的提案。 
  Proposer1也收到过半回复,返回的value为null,所以proposer1提交了【2,server1】的提案。 
  Proposer2也收到过半回复,返回的value为null,所以proposer2提交了【4,server2】的提案。

(这里要注意,并不是所有的proposer都达到过半了才进行第二阶段,这里只是一种特殊情况)

  Acceptor1和acceptor2接收到proposer1的提案【2,server1】,acceptor1通过该请求,acceptor2承诺不再接受编号小于4的提案,所以拒绝; 
  Acceptor2和acceptor3接收到proposer2的提案【4,server2】,都通过该提案; 
  Acceptor2和acceptor3接收到proposer3的提案【3,server3】,它们都承诺不再接受编号小于4的提案,所以都拒绝。

所以proposer1和proposer3会再次进入第一阶段,但这时候 Acceptor2和acceptor3已经通过了提案(AcceptN = 4,AcceptV=server2),并达成了多数,所以proposer会递增提案编号,并最终改变其值为server2。最后所有的proposer都肯定会达成一致,这就迅速的达成了一致。
原文链接:https://blog.csdn.net/u013679744/article/details/79222103

存在问题:

  1. 活锁问题:假如提案者1因为不能获得过半响应而将自己的编号变为maxN+1=3,而此时提案者2的提案号是2<3,因此也会将自己的编号maxN+1=4,and so on, 造成活锁问题

ZAB协议

广播模式

无历史数据时,选举leader

有历史数据,则按照zxid, myid 顺序选择最大的节点

Zookeeper研究系列之二阶段提交到Paoxs协议到ZAB协议的演进相关推荐

  1. 《从paxos到zookeeper分布式一致性原理与实践》读书笔记--第二章一致性协议--二阶段提交

    在分布式系统中,每一台机器节点虽然能够知道自己在进行事务操作过程中的结果是成功还是失败但无法直接获取其他分布式系欸但的操作结果.因此,当一个事务需要跨越多个分布式节点的时候为了保持事务的ACID特性, ...

  2. RocketMQ源码分析之RocketMQ事务消息实现原理上篇(二阶段提交)

    在阅读本文前,若您对RocketMQ技术感兴趣,请加入 RocketMQ技术交流群 根据上文的描述,发送事务消息的入口为: TransactionMQProducer#sendMessageInTra ...

  3. 分布式理论 二阶段提交 2PC 3PC 端到端一致性 分布式事务

    一.临界知识对我们学习的巨大帮助 临界知识这个概念,是我上个月读<好好学习:个人知识管理精进指南>这本书学到的概念,真的有被启发到,现在觉得它对于我们深刻了解世界有着非常大的作用. 所谓临 ...

  4. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  5. 分布式事务理论-二阶段提交(Two-phase Commit)

    1 2PC 两阶段提交协议为了保证分布在不同节点上的分布式事务的一致性,我们需要引入一个协调者来管理所有的节点,负责各个本地资源的提交和回滚,并确保这些节点正确提交操作结果,若提交失败则放弃事务. 2 ...

  6. java 二阶段提交,二阶段提交协议(Two Phase Commitment Protocol)

    一.典型的分布式事务实例 跨行转账问题是一个典型的分布式事务,用户A向B的一个转账1000,要进行A的余额-1000,B的余额+1000,显然必须保证这两个操作的事务性. 类似的还有,电商系统中,当有 ...

  7. 漫话:如何给女朋友解释什么是2PC(二阶段提交)?

    周末晚上,正在家里面看综艺节目,突然女朋友跑过来找我打<王者荣耀>. 打了几把游戏,终于可以歇息一会了,准备继续看我的综艺,可是女朋友过来找我给他讲讲到底什么是二阶段提交. 分布式一致性 ...

  8. 95-241-100-源码-Flink语义-Flink的exectly-once系列之两阶段提交概述

    文章目录 1.世界 3.处理语义 4.exectly once语义 5.**两阶段提交2PC** 6.**flink中两阶段提交** 从目录来看(重要) 1.世界 3.处理语义 辅助:95-241-1 ...

  9. 漫画:如何给女朋友解释什么是2PC(二阶段提交)?

    作者|漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 周末晚上,正在家里面看综艺节目,突然女朋友跑过来找我打<王者荣耀>. 打了几把游戏,终于可以歇息一会了,准备继续看我的综 ...

最新文章

  1. Dubbo 18 问
  2. python ssh实现_SSH协议的Python实现paramiko
  3. 剑指Offer - 面试题46. 把数字翻译成字符串(DP)
  4. mssql访问 oracle
  5. Mobius反演定理-BZOJ2154
  6. Delay-Doppler equalization(8)(时延多普勒均衡)⭐
  7. matlab2016a网盘
  8. java对字符串编码转换_(转) Java字符编码转换
  9. Apache配置虚拟主机
  10. CheckException和UnCheckException的区别
  11. 6步讲解应对ESD基本方法
  12. java实现逐级审批_【YOU学吧】NC审批流如何实现自下而上逐级审批
  13. python模拟鼠标和键盘
  14. springboot2.0启动报错The APR based Apache Tomcat Native library which allows optimal performance in ...
  15. ping: www.baidu.com: 域名解析暂时失败 简单解决
  16. 时间序列的极值点提取
  17. java中length和length()的区别
  18. jFinal 使用slf4j打印sql及其它相关日志
  19. Intel 酷睿 i3、i5、i7 CPU 处理器之间有什么区别
  20. 在VMware上安装macOS

热门文章

  1. 在微信小程序中渲染HTML内容
  2. 天正暖通天圆地方在哪_天正暖通8.5命令集锦
  3. 重组、中国、交付、合作,传统汽车巨头发动新「攻势」
  4. python中wraps是什么意思_python 理解functools.wraps
  5. 前端页面有那个html还是jsp(扩展ajax对seo的影响)
  6. 腾讯云跨账号同地域云服务器和轻量应用服务器内网互连
  7. 银行计算机网络管理制度,XX银行计算机信息系统安全管理办法
  8. 张高兴的 Windows 10 IoT 开发笔记:红外温度传感器 MLX90614
  9. playbook的使用
  10. 文章评论回复的设计思路