paxos算法

paxos算法解决的问题是如何在一个分布式系统中就某个问题达成共识,解决数据的一致性问题。具体来讲,因为分布式系统包含众多节点,节点之间通过消息传递进行通信,在这一过程中必然存在消息的丢失、延迟、重复等问题,在这种情况下,集群中所有的节点如何对某个全局数据达成一致,保持数据的一致性,即使paxos要解决的问题。


paxos将节点分为proposer、acceptor、learner三种角色,proposer发起提案,acceptor收到提案后可以接受提案,也可以拒绝提案,若提案被大多数acceptor接受,则表示该提案通过。learner不参与以上过程,只是获取最重被通过的提案。


paxos分为两个阶段:prepare阶段和批准阶段


prepare阶段

proposer发起一个提案(编号为N),并将该提案发送给多于一半的acceptor。

acceptor收到提案后,如果之前没有接受过其他的提案,则回复OK;如果已经接受过其他的提案(编号为M),但M<N,那么acceptor将提案M回复给proposer,如果M>=N,则不做回复。


批准阶段

当一个proposer收到多数acceptor的回复后,就进入批准阶段,他会向回复proposer的acceptor发送accept请求(具体的提案编号),需要注意的是,该提案编号不一定就是最开始的N,因为proposer可能会接收到多个accpetor发送不来的多个提案,proposer会从多个提案中选择一个编号最大的提案(表明提案更权威)发送给acceptor。

acceptor收到accept请求后即接受对应的提案请求。


这里需要注意的是

(1)在一次paxos算法的执行中,可能不能确定一个共识提案,则需要再执行一次。

(2)提案的编号表示对应节点的优先级和权威性,用于当acceptor在同时收到多个提案时,如何选择一个提案,这个和现实世界是一样的,人们往往会选择更权威的提案。

(3)为了让算法更快的产生出一个最重的提案,建议参与投票节点的数量为一个奇数。


网上有一些该算法的实现,可以参考:

https://github.com/cocagne/paxos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值