Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的「La」)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。

Paxos算法一开始非常难以理解,但是一旦理解其实也并不难,之所以难理解其实是因为作者讲的故事难理解。

Paxos算法维基百科https://en.wikipedia.org/wiki/Paxos_(computer_science)

网上有2篇帖子是讲的非常好的,

分别是:以两军问题为背景来演绎Basic Paxos和Paxos算法细节详解(一)--通过现实世界描述算法

本人是在看了这2个帖子之后再结合原论文才看懂的。

Paxos一共4个角色:Client   Proposer      Acceptor     Learner。

Client:产生议题者
Proposer :提议者
Acceptor:决策者
Learner:最终决策学习者,也就是执行者。

Proposer拿着Client的议题去向Acceptor提议,让Acceptor来决策。
Proposer提出议题,Acceptor初步接受或者Acceptor初步不接受。
Acceptor初步接受则Proposer再次向Acceptor确认是否最终接受。
Acceptor最终接受或者Acceptor最终不接受。

Learner最终学习的目标是向所有Acceptor学习,如果有多数派个Acceptor最终接受了某提议,那就得到了最终的结果,算法的目的就达到了。

最基本的Message flow: Basic Paxos演示图如下图所示,其他情况可以参考百科。

图解:

A1,,A2和A3就是Acceptor。

P1,p2和p3就是Proposer。浅色的P1和P2说明是进行提议,深色的P1和P2说明是拿到表决。

圆圈123表明是每次提议序号,递增即可。黑色的图表示被黑了,也就是否决。方块表示投票结果,绿方块表示投票通过,红色菱形表示最终的投票结果。

整个事件是按照时间线从左到右发展。

事件发展:

第一个框代表第一阶段--提议

1.p2最先找到A2,P2提议序号是2,A2记录下,因为之前没有其他的序号所以成功了,然后返回标志给p2;

2.p1找到A1,P1提议序号是1,A1记录下,因为之前没有其他的序号所以成功了,然后返回标志给p1;

3.p1找到A3,P1提议序号是1,A3记录下,因为之前没有其他的序号所以成功了,然后返回标志给p1;

问题来了

4.p1找到A2,P1提议序号是1,A2已经记录下提议序号2,2>1,所以不成功;

5.p2找到A1,P2提议序号是2,A1已经记录下提议序号1,1>2,所以成功;,然后返回标志给p2;

6.p2找到A3,P2提议序号是2,A3已经记录下提议序号1,1>2,所以成功;,然后返回标志给p2;

第二个框代表第二阶段--确认提议(投票)

7.p1找到A1,P1确认序号是1,A1已经记录下提议序号2,1<2,所以不确认,然后p1继续提议序号是3,周而复始...;

8.p2找到A2,P2确认序号是2,A2已经记录下提议序号2,2=2,所以确认成功;,然后返回投票标志给p2;

9.p2找到A3,P2确认序号是2,A3已经记录下提议序号2,2=2,所以确认成功;,然后返回投票标志给p2;

10.p2找到A1,P2确认序号是2,A1已经记录下提议序号3,2<3,所以不确认,;然后p2继续提议序号是4,周而复始...;
问题来了

11.p1找到A2,P1确认序号是1,A1已经记录下确认序号2,1<2,所以不确认,然后返回确认序号2;

12.p1找到A3,P1确认序号是1,A3已经记录下确认序号2,1<2,所以不确认,然后返回确认序号2;

13.p1和p2都得到确认也就是投票结果是2。

14.所有的Learner最终学习的目标是2。

Paxos过程结束了,这样,一致性得到了保证,算法运行到最后所有的proposer都投“2”所有的acceptor都接受这个议题,也就是说在最初的第二阶段,议题是先入为主的,谁先占了先机,后面的proposer在第一阶段就会学习到这个议题而修改自己本身的议题,才能让一致性得到保证,这就是paxos算法的一个过程。该算法就是为了追求结果的一致性。

深入浅出理解Paxos算法相关推荐

  1. 通俗理解Paxos算法

    维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...

  2. 一步一步理解Paxos算法

    一步一步理解Paxos算法 作者:jw (360电商技术组) 背景 Paxos算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lampo ...

  3. 如何透彻理解 Paxos 算法?

    我们主要讲解"如何透彻理解 Paxos 算法"? 文章目录 Quorum 机制 Quorum 定义 Quorum 的应用 Paxos 节点的角色和交互 Paxos 的节点角色 Pr ...

  4. 深入浅出理解FFT算法。通俗易懂,xilinxIP核仿真

    深入浅出理解FFT算法,通俗易懂,用xilinxIP核心仿真 1.前言:傅里叶变换:时域到频域的转换 FS连续时间周期傅里叶级数->DFS离散傅里叶级数->FT连续时间非周期信号的傅里叶变 ...

  5. 03 如何透彻理解 Paxos 算法?

    文章目录 03 如何透彻理解 Paxos 算法? Quorum 机制 Quorum 定义 Quorum 的应用 Paxos 节点的角色和交互 Paxos 的节点角色 Proposer 提案者 Acce ...

  6. 理解paxos算法--事前咨询,事中决定,事后提交

    要点: (1)Paxos算法描述的过程发生在"一次选举"的过程中,一次选举包括多轮的提案(proposal)提交,批准,决议的过程 (2)一个proposal(提案)包含该提案的唯 ...

  7. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  8. 区块链共识之Paxos算法理解与实战

    0.前言 本文记录笔者学习和理解区块链共识算法Paxos的点滴,文章比较长,需要耐心来细细琢磨,笔者也是苦战了一个周末才对此有那么一点初步了解,有问题的地方请不吝斧正! 1.初始是阅读本文后续内容的基 ...

  9. Basic Paxos算法

    Basic Paxos算法 背景 Paxos算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到TOCS上. ...

最新文章

  1. 微信小程序提示 出现脚本错误或者未正确调用 Page()
  2. php各种api接口,PHPSAPI接口
  3. LeetCode Ransom Note(字符串)
  4. 程序员的修养--读书笔记
  5. vue中进度条写法_vue组件实现进度条效果
  6. SVNserver搭建和使用(二)
  7. 海康+萤石云+云存储多少钱一个月_400万极清画质 萤石C6Wi智能家居摄像机
  8. python函数进阶小结_python之函数进阶
  9. 线上python课程一般多少钱-排名前十的python零基础编程在线网课一对一费用多少钱...
  10. nyoj------20吝啬的国度
  11. win10下装黑苹果双系统_黑苹果macOS10.15.4单硬盘三系统安装教程
  12. MATLAB角度转换
  13. FPGA视频处理系统
  14. 15种手机游戏引擎和开发工具介绍
  15. Koo叔说Shader-CG语言介绍
  16. Excel中快速删除换行
  17. GIS地理信息定位系统
  18. springboot接口接参注解详解 controller @Valid
  19. zoho邮箱收信服务器,配置邮件交付 - Zoho Mail 设置
  20. FRM-91500: Unable to start/complete the build.

热门文章

  1. 输入引脚时钟约束_Happy Design in Vivado 系列:时序分析入门三板斧(一):创建时钟...
  2. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估
  3. java 初始化系统参数_系统中参数的初始化 参数在系统中配置
  4. 使用Python,OpenCV加载图像并将其显示在屏幕上?
  5. Linux那些事儿 之 戏说USB(26)设备的生命线(九)
  6. 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码
  7. 【ios开发/Xcode】使用UITableView完成学生信息及成绩的显示
  8. 业务逻辑组件化android,AppJoint 极简 Android 组件化方案
  9. 机器学习与高维信息检索 - Note 6 - 核, 核方法与核函数(Kernels and the Kernel Trick)
  10. Udacity机器人软件工程师课程笔记(三)-样本搜索和找回-基于漫游者号模拟器-使用moviepy输出测试视频