前言

Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名。其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证明其正确性。本文尝试通过流程图来说明协议的内容以及基本应用过程,不涉及如何证明其正确性。

基本概念

Paxos 可以分为两种:

  • Single-Decree Paxos:决策单个 Value
  • Multi-Paxos:连续决策多个 Value,并且保证每个节点上的顺序完全一致,多 Paxos 往往是同事运行多个单 Paxos 协议共同执行的结果。

本文只关注单 Paxos 的原理,理解了单 Paxos,多 Paxos 也就不难理解了。

Paxos 协议中的三种角色

  • 倡议者(Proposer):倡议者可以提出提议(数值或者操作命令)以供投票表决
  • 接受者(Acceptor):接受者可以对倡议者提出的提议进行投票表决,提议有超半数的接受者投票即被选中
  • 学习者(Learner):学习者无投票权,只是从接受者那里获知哪个提议被选中

在协议中,每个节点可以同时扮演以上多个角色。

Paxos 的特点

  • 一个或多个节点可以提出提议
  • 系统必须针对所有提案中的某个提案达成一致(超过半数的接受者选中)
  • 最多只能对一个确定的提议达成一致
  • 只要超半数的节点存活且可互相通信,整个系统一定能达成一致状态,即选择一个确定的提议

协议图示


通过上面的流程,如果有多个节点同时提出各自的提议,Paxos 就可以保证从中选出一个唯一确定的值,保证分布式系统的一致性。

实例

下面我们通过例子来理解 Paxos 的实际应用过程。

假设现在有五个节点的分布式系统,此时 A 节点打算提议 X 值,E 节点打算提议 Y 值,其他节点没有提议。

假设现在 A 节点广播它的提议(也会发送给自己),由于网络延迟的原因,只有 A,B,C 节点收到了。注意即使 A,E 节点的提议同时到达某个节点,它也必然有个先后处理的顺序,这里的“同时”不是真正意义上的“同时”。

A,B,C接收提议之后,由于这是第一个它们接收到的提议,acceptedProposal 和 acceptedValue 都为空。

由于 A 节点已经收到超半数的节点响应,且返回的acceptedValue 都为空,也就是说它可以用 X 作为提议的值来发生 Accept 请求,A,B,C接收到请求之后,将 acceptedValue 更新为 X。

A,B,C 会发生 minProposal 给 A,A 检查发现没有大于 1 的 minProposal 出现,此时 X 已经被选中。等等,我们是不是忘了D,E节点?它们的 acceptedValue 并不是 X,系统还处于不一致状态。至此,Paxos 过程还没有结束,我们继续看。

此时 E 节点选择 Proposal ID 为 2 发送 Prepare 请求,结果就和上面不一样了,因为 C 节点已经接受了 A 节点的提议,它不会三心二意,所以就告诉 E 节点它的选择,E 节点也很绅士,既然 C 选择了 A 的提议,那我也选它吧。于是,E 发起 Accept 请求,使用 X 作为提议值,至此,整个分布式系统达成了一致,大家都选择了 X。

以上内容均引用自: http://blog.jobbole.com/106327/

感谢作者画图解说如上的paxos算法

原设计师的最先设计方案:

上图的图解,缺了一部分同步的操作,当然不是作者画错了,而是我们的分布式发现服务的问题,当一个节点不可用,那么发起议案的时候,节点不可用,那么提交议案成功后,也不会去再同步此节点,因为不可用。

交叉分布式事务

下图将解说交叉分布式同步问题,下图将采用的另一个收费课程的图解:更复杂!!!!

模拟场景:战略会议       交叉分布式事务

制定作战计划,两位作战计划的制定者,分别制定一个计划,上面的进攻时间改为进攻目标更妥当

三位将军作为计划的执行者。

开始:

1:参谋1  制定作战目标成功,发送给三个将军。但是将军3与他有意见,拒绝他的意见,此时的将军1,将军2,觉得作战目标可行。同意

2:在参谋1还没做表决的时候,参谋2,将作战目标做完,分别发给三位将军,这时将军1跟参谋2有意见,不接受他的作战目标。其他两个将军觉得作战目标可行,同意

3:这是参谋1 举行表决,超过半数即可行。将军2 将军1 做表决,但是将军2接受了新的作战计划,此时不再能执行作战计划1了,所以参谋一的作战计划未通过

4:此时参谋2开始做作战计划的表决,因为将军2 将军3 同意,因此此计划通过。这时其实意味这分布式事务的成功,数据一致性处理成功

5:此时参谋1 又做了一个作战计划,3 发给将军1,将军2,此时将军1,2返回他们手里的作战计划,看是否领先作战计划3。

6:参谋1发现将军1,将军2 的作战计划已执行,可以表决自己的作战计划,则提交表决

7:将军1 将军2 表决通过参谋1的作战计划3

哈哈,懵了没有,其实这模拟的是:

如淘宝交易,同一时间两个会员购买同一个商品 第一个会员需要去修改淘宝的分布式系统的商品剩余数量,此时第二位会员同时间消费的会员也要来修改数据。时间在0.00毫秒间产生。交叉型的分布式事务处理出现在超大型并发系统中。这时两个会员会出现争夺谁先去修改库存的操作。

看得懂的行家可能会说,在参谋2提交计划成功的时候,参谋1又提交议案,就造成了死锁了。Paxos算法在提交失败后,睡眠1毫秒参谋2的提议就表决通过了。当然算法内还有更深层次的实现,无法得知:,目前 Google Facebook IBM 都有自己的算法实现,可是都没有公开源码,zookeeper的实现源码好像说也很晦涩。但是算法内部用队列或者一些简单的类似MQ处理机制就可以避免上面这种彼此死锁的方式。

Zookeeper Paxos算法 一致性协议相关推荐

  1. Paxos分布式一致性协议

    为什么80%的码农都做不了架构师?>>>    源码:https://bitbucket.org/sciascid/libpaxos/src 1 前言   分布式系统中的节点通信存在 ...

  2. Paxos——分布式一致性协议

    目录 1. Paxos的理解困境 2. Paxos和分布式存储系统 3. 确定一个不可变变量的取值 3.1 如何定义"确定一个不可变变量的取值"这样的系统问题? 3.2 确定一个不 ...

  3. Zookeeper的一致性协议:Zab

    Zookeeper使用了一种称为Zab(Zookeeper Atomic Broadcast)的协议作为其一致性复制的核心,据其作者说这是一种新发算法,其特点是充分考虑了Yahoo的具体情况:高吞吐量 ...

  4. 图解:一致性协议算法

    点击上方 蓝字 关注我们! 2021 最新 Java 编程资料免费领! 来源:网络 背景 CAP 定理 Base 理论 2PC 3PC Paxos算法 Raft一致性算法 一致性协议之 ZAB NWR ...

  5. Zookeeper的Paxos算法,(2P/3P/CAP/BASE)一致性协议简单介绍

    2P/3P提交(为了保证事务的ACID) 2P 就是二段提交(RDBMS经常就这种机制,保证强一致性),3P就是三段提交: 2P提交 -- 1阶段:提交事务请求(投票阶段)               ...

  6. 超详细解析 | 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/VMW9 背景 在常见的分布式系统中, ...

  7. 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR超详细解析

    背景 在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟.丢失.重复.乱序,还有网络分区)等情况. 一致性算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地 ...

  8. 图解分布式一致性协议 Paxos 算法【BAT 面试题宝库附详尽答案解析】

    0. 问题场景 1.Paxos 简介 Paxos is a family of protocols for solving consensus in a network of unreliable p ...

  9. Paxos分布式一致性算法简介和Apache ZooKeeper的概念映射

    为什么80%的码农都做不了架构师?>>>    Paxos是一个基于消息传递的一致性算法,近几年被广泛应用于分布式计算中,Google的Chubby,Apache的Zookeeper ...

最新文章

  1. AI靠语意理解把照片变抽象画,无需相应数据集,只画4笔也保留神韵,有毕加索内味儿了...
  2. Android MVP模式 简单易懂的介绍方式
  3. ntv.js框架(第三章) - 机顶盒HTML和CSS编写注意事项
  4. Json Schema快速入门
  5. 【PIFO】以线速编程数据包调度
  6. lvs,haproxy实现负载均衡
  7. Python学习心得--变量类型篇
  8. 蓝牙芯片 csr8645 和 qcc3005 哪个比较
  9. newifi刷老毛子笔记
  10. 数据结构/排序/归并排序/二路归并排序
  11. 获取每周第一天和最后一天
  12. 任何矩阵都能变换成梯形阵的证明
  13. Scrapy spiders介绍
  14. c语言运行环境的熟悉实验报告,c语言实验报告
  15. 转载:12个医学公共数据库
  16. Q版本 安卓手机录制系统声音
  17. 如何有效提高公众号文章阅读量
  18. php sql多字段求和,JSP_sql实现多字段求和并查询,下面就sql多字段求和并作为sql - phpStudy...
  19. 工业机器人 郝卫东_智能保安巡逻机器人论文
  20. P1460 健康的荷斯坦奶牛

热门文章

  1. hdu 5148 Cities(树形dp)
  2. js实现图片连续滚动播放
  3. 使用JAVA进行ad域身份验证常用属性详解
  4. 软技能:代码之外的生存指南
  5. 数据分析与数据挖掘实战案例本地房价预测(716):
  6. 【软件工具】百度搜索技巧
  7. html 5 压缩zip,Zip
  8. springboot配置内置tomcat的日志
  9. Filter为什么会在一次请求执行多次doFilter?
  10. tiny6410刷机教程