Paxos(帕克索斯)一致性算法[卷一]

导读

译《The Part-Time Parliament》——终于读懂了Paxos协议!

究竟是什么?

简单说,paxos是为了解决强一致性的算法
算法中,大概有3种角色(一人可以作为多个角色)

主要3种角色

  • proposer:提议发起者

     proposer可以发起proposal(提议)
     
     proposal(提议)包括:
     
     1.Proposal Value:提议的值;
     
     2.Proposal Number:提议编号,要求提议编号不能冲突;
    
     proposer:提议发起者,主要有两种行为:
     
     1.向acceptor发prepare请求
     
     2.向acceptor发accept请求
    
  • acceptor:提议接受者,主要行为:

     根据协议规则,对(proposer:提议发起者)的请求作出应答;
    
  • learner:提议学习者,主要行为:

     可以根据(acceptor:提议接受者)的状态,学习最终被确定的值。
    

主要流程

1.[prepare]阶段

进行[prepare]请求

	(proposer:提议发起者)
	
	选择一个proposalValue(提议编号)n,
	
	向所有的acceptor广播prepare(n)请求。

进行[promised]响应

	(acceptor:提议接受者)
	
	若proposalValue(提议编号)n比之前阶段接收的prepare(请求)都要大,
	{
    promised(承诺)之后的[accept]阶段,proposalValue(提议编号)只能>=n
    promised(承诺)之后新的[prepare]阶段,proposalValue(提议编号)只能>n
	}
	并返回上一次的[accept]阶段中,
	proposalValue(提议编号)m < n  且
	m为上一次[accept]阶段中最大proposalValue(提议编号)的proposal(提议)

2.[accept]阶段

进行[propose]请求

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

进行[accept]响应

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

问题:为什么能做到一致性?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值