浅谈Paxos

本文只涉及paxos的算法过程,不包含理论推导。

Paxos协议最终解决什么了问题?

当一个提议被多数派接受后,这个提议对应的值被选定,一旦有一个值被选定,那么只要按照协议的规则继续交互,后续被选定的值都是同一个值,也就是这个选定值的一致性问题。(可用于选举leader

基本概念

Proposal Value     提议的值

Proposal Number  提议编号,要求提议编号不能冲突

Proposal              提议 提议的值 提议编号

Proposer             提议发起者

Acceptor             提议接受者

Learner               提议学习者

 

{nv}为提议编号为n,提议的值为v的提议

(m{nv})为承诺了Preparem)请求,并接受了提议{nv}

每个参与者又可兼领多个角色

协议中Proposer有两个阶段。

一是ProposerAcceptorPrepare请求。

二是ProposerAcceptorAccept请求。

 

Acceptor则根据协议规则,对Proposer的请求作出应答。

 

最后Learner可以根据Acceptor的状态,学习最终被确定的值。

 

协议过程

第一阶段A

Proposer选择一个提议编号n,向所有的Acceptor广播Preparen)请求。

第一阶段B

Acceptor接收到Preparen)请求,若提议编号n比之前接收的Prepare请求都要大,则承诺将不会接收提议编号比n小的提议,并且带上之前Accept的提议中编号小于n的最大的提议,否则不予理会。

第二阶段A

proposer得到了多数Acceptor的承诺后,如果没有发现有一个Acceptor接受过一个值,那么向所有的Acceptor发起自己的值和提议编号n,否则,从所有接受过的值中选择对应的提议编号最大的,作为提议的值,提议编号仍然为n

第二阶段B

Acceptor接收到提议后,如果该提议编号不违反自己做过的承诺,则接受该提议。

需要注意的是,Proposer发出Preparen)请求后,得到多数派的应答,然后可以随便再选择一个多数派广播Accept请求,而不一定要将Accept请求发给有应答的Acceptor,这是常见的Paxos理解误区。

上面的图例中,P1广播了Prepare请求,但是给A3的丢失,不过A1A2成功返回了,即该Prepare请求得到多数派的应答,然后它可以广播Accept请求,但是给A1的丢了,不过A2A3成功接受了这个提议。因为这个提议被多数派(A2A3形成多数派)接受,我们称被多数派接受的提议对应的值被Chosen

这个图例中,三个Acceptor之前都没有接受过Accept请求,所以不用返回接受过的提议,但是如果接受过提议,则根据第一阶段B,要带上之前Accept的提议中编号小于n的最大的提议。

Proposer广播Prepare请求之后,收到了A1A2的应答,应答中携带了它们之前接受过的{n1, v1}{n2, v2}Proposer则根据n1n2的大小关系,选择较大的那个提议对应的值,比如n1 >n2,那么就选择v1作为提议的值,最后它向Acceptor广播提议{n, v1}

fast paxos

Paxos算法在出现竞争的情况下,其收敛速度很慢,甚至可能出现活锁的情况,例如当有三个及三个以上的proposer在发送prepare请求后,很难有一个proposer收到半数以上的回复而不断地执行第一阶段的协议。因此,为了避免竞争,加快收敛的速度,在算法中引入了一个Leader这个角色,在正常情况下同时应该最多只能有一个参与者扮演Leader角色,而其它的参与者则扮演Acceptor的角色,同时所有的人又都扮演Learner的角色。只有Leader可以提出议案,从而避免了竞争使得算法能够快速地收敛而趋于一致,此时的paxos算法在本质上就退变为两阶段提交协议。在异常情况下,系统可能会出现多Leader的情况,但这并不会破坏算法对一致性的保证,此时多个Leader都可以提出自己的提案,优化的算法就退化成了原始的paxos算法。

参考资料

知乎讨论如何浅显易懂地解说 Paxos 的算法? - 知乎

理论基础Paxos理论介绍(1): 朴素Paxos算法理论推导与证明 - 知乎

视频http://video.tudou.com/v/XMTc4NjM4Nzc1Mg==.html

CAP:https://www.zhihu.com/question/54105974?from=profile_question_card

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值