Cheap Paxos

  这篇文章主要是讲了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进行了操作,该修改的修改,该增加的增加,该删除的删除,不能该修改的修改了,该删除的没删掉;如果事务失败,所有的数据还是在初始状态。以及状态机,在状态机中的一致性更强调在每个初始状态一致的状态机上执行一串命令后状态都必须相互一致,也就是顺序一致性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值