这篇文章主要是讲了Paxos发展的历史,发展的过程从Basic Paxos算法,再到Dynamic Paxos算法,还有本文中提到的Cheap Paxos算法。

  一.BasicPaxos算法

Basic Paxos算法首先将议员的角色分为proposers,acceptors,和learners(允许身兼数职)。proposers提出提案,提案信息包括提案编号和提议的value;acceptor收到提案后可以接受(accept)提案,若提案获得多数acceptors的接受,则称该提案被批准(chosen);learners只能“学习”被批准的提案。划分角色后,就可以更精确的定义问题:决议(value)只有在被proposers提出后才能被批准(未经批准的决议称为“提案(proposal)”);在一次Paxos算法的执行实例中,只批准(chosen)一个value,learners只能获得被批准(chosen)的value。

Proposer会发起一个提案,propose一个值v,然后分配一个独有的编号N给他。如果Acceptor并没有承诺接受一个比N更大的提案,则接收这个提案。Learner会在表决结果定了之后get到这个最终的结果。

N=0,当且仅当含有该决议的提案被大多数acceptor接受N>=1,某个决议v被批准后,接下来没有任何编号比他大的提案被接受,提议被接受的条件是:含有该决议的提案被acceptor集合中的任意一个Majority大多数成员接受。这个Majority满足:Mi∩Mj≠∅。

基本的paxos协议,包括四个阶段的协议:

(1):prepare准备阶段:一个proposer选择一个提案编号N,然后发送一个prepare请求消息(包含N)1a消息给acceptor中的大多数

(2): promise承诺阶段:如果acceptor没有接受到过别的比N更大的编号的提案,然后回复proposer一个accept消息(告诉proposer他不会再接受比N小的编号的提案了)

(3): accept! 接受请求阶段 :如果proposer接收到了acceptor大多数集合中的一个1b的promise消息,proposer会给这些有响应的acceptors发送一个accept消息(包含一个自己提出的N和v值)

(4): accepted 接受阶段:如果在这段时间内,acceptor没有对比N大的提案给出一个新的promise,接受proposer的提案。

Phase1:确定谁的编号最高,只有编号最高者才有权利提交proposal;

Phase2:编号最高者提交proposal,如果没有其他节点提出更高编号的proposal,则该提案会被顺利通过;否则,整个过程就会重来。你编号高,我比你更高,反复如此,算法永远无法结束,这叫活锁。

FLP Impossibility已经证明,在异步通信中不存在任何一致性算法,活锁便是Paxos无法解决的硬伤。Phase1,Phase2非常像2PC中的两个阶段,因此paxos本质上是多个2PC交替执行!

二.DynamicPaxos算法

假设一共有2N+1个服务器,Basic Paxos算法在N个服务器坏的情况下,系统可以正常运行。在Dynamic Paxos算法中,如果有N+1中的节点坏了,这个时候替补的节点可以替换进来,参与工作,这样可以动态的替补服务器,但是当第N+1个节点坏了的时候,无论是Basic Paxos算法还是Dynamic Paxos算法,都不能正常工作。

三.CheapPaxos算法

Cheap Paxos算法的主要优点是cheap,原因是如果有2N+1个服务器,如果有N个服务器坏了,Basic Paxos算法必须换一个新的服务器,但是Cheap Paxos有替补的服务器,可以用替补的服务器补上,不用为替补服务器更新之前的状态,当原来的主服务器修补好了之后,替换掉替补服务器,这时再为主服务器更新他之前不在时的状态机,对于替补服务器来说,它之前的状态和它之后的状态都不需要更新。这样可以节约计算资源。需要注意的事,替补的服务器只能服务一段时间,不能一直服务下去,主服务一旦修好,需要加进来,替掉替补服务器。

总结来说,Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法。在分布式中有很广泛的应用场景,包括NoSQL领域:一致性更强调“能读到新写入的”,就是读写一致性。数据库领域:一致性强调“所有的数据状态一致”,经过一个事务后,如果事务成功,所有的表数据都按照事务中的SQL进行了操作,该修改的修改,该增加的增加,该删除的删除,不能该修改的修改了,该删除的没删掉;如果事务失败,所有的数据还是在初始状态。以及状态机,在状态机中的一致性更强调在每个初始状态一致的状态机上执行一串命令后状态都必须相互一致,也就是顺序一致性。

Cheap Paxos相关推荐

  1. 理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos

    理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos Cheap Paxos Message flow: Cheap Multi-Paxos Fast Paxos ...

  2. 理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos

    理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos Generalized Paxos Byzantine Paxos Byzantine ...

  3. 阿里如何实现高性能分布式强一致的独立 Paxos 基础库?

    作者|江疑.胡炜 编辑|木环 Paxos 从理论界到工业界,阿里怎样实现分布式系统的一致性? 近来 Paxos 的分享和讨论越来越频繁,它是分布式系统保持一致性的法宝,但是同时又有着最难理解的算法之& ...

  4. Paxos (computer science)

    Paxos 协议是一个解决分布式系统中,多个节点之间就某个值(提案)达成一致(决议)的通信协议.它能够处理在少数派离线的情况下,剩余的多数派节点仍然能够达成一致. Paxos 是解决在不可靠网络中,多 ...

  5. Paxos - 分布式表决算法

    原文链接:http://en.wikipedia.org/wiki/Paxos_(computer_science) Paxos (computer science) From Wikipedia, ...

  6. 世上只有一种一致性算法,那就是Paxos ,所有其它一致性算法都是Paxos算法的不完整版!

    前言 最近在研究Paxos算法,提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的.比如,Fast Paxos 算 ...

  7. 分布式 | Paxos 共识算法

    1.简介 Paxos共识算法 是非拜占庭容错算法的一种, 用来解决分布式下存在 故障行为 但不存在 恶意行为的共识问题 是一种强一致性模型, 需要半数以上的读取或者写入成功才算操作成功. 当前最常用的 ...

  8. Paxos 算法详解(一)

    前言 提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代 名词,因为当前最常用的一批共识算法都是基于它改进的.比如,Fast Paxos 算法. Cheap Pax ...

  9. 分布式一致性与共识算法

    区块链技术是近几年逐渐变得非常热门的技术,以比特币为首的密码货币其实已经被无数人所知晓,但是却很少有人会去研究它们的底层技术,也就是作为一个分布式网络比特币等加密货币是如何工作的. 无论是 Bitco ...

最新文章

  1. pandas使用pad函数向dataframe特定数据列的每个字符串添加后置(后缀)补齐字符或者字符串、向所有字符串的右侧填充、直到宽度达到指定要求(right padding)
  2. 查看PID 进程是否存在的一个小技巧
  3. Excel简单读写操作
  4. idea中修改jsp文件不用再重启tomcat的方法
  5. 新浪微博api(.net)时间格式问题
  6. linux的基础知识——守护进程
  7. Codeigniter Grid 使用方法 (flexigrid)
  8. 如何在Red Hat Linux上安装和配置FreeIPA
  9. 阿里千亿级购物节背后,淘宝智能客服架构演进之路
  10. postgresql user表
  11. C/C++文件操作效率比较——FILE/fstream
  12. 【Python实例第7讲】真实数据集的异常检测
  13. 携号转网查询接口API,手机号码归属地及运营商查询接口
  14. Swift开发:使用SwiftyJSON解析JSON数据
  15. php模板引擎smarty案例下载,Smarty下载|Smarty(php模板引擎) v3.1.30官方版 - 121下载站...
  16. matlab线圈磁场,载流圆线圈磁场的MATLAB数值计算
  17. 修正Linux下WPS字体库缺失
  18. opencv矩阵转eigen_矩阵迹运算介绍及C++/OpenCV/Eigen的三种实现
  19. 用c写的酒店客房登记管理系统
  20. html标签不使用css样式,html – 忽略CSS样式

热门文章

  1. Java中使用Redis Hash的3种方法
  2. 【瑞萨RA_FSP】GPT—— PWM功能详解
  3. 【RN】Text lineHeight
  4. C语言刷题之摩尔投票法
  5. 数据系统架构-8.任务调度系统
  6. 用信息化手段打赢疫情防控阻击战
  7. 聊聊常见的加密与JWT
  8. 寒门难再出贵子(3),一篇值得思考的文章
  9. 数据分析数据挖掘的步骤
  10. Matlab中添加网格线和编辑布局