paxos算法的理论介绍和举例说明

1. paxos简单介绍

Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

 

2. paxos理论总结

2.1、两个操作

1、Proposal Value:提议的值;
2、Proposal Number:提议的编号,可理解为提议版本号,要求不能冲突;

2.2、三个角色

1、Proposer:提议发起者。Proposer 可以有多个,Proposer 提出议案(value)。所谓 value,可以是任何操作,比如“设置某个变量的值为value”。不同的 Proposer 可以提出不同的 value,例如某个Proposer 提议“将变量 X 设置为 1”,另一个 Proposer 提议“将变量 X 设置为 2”,但对同一轮 Paxos过程,最多只有一个 value 被批准。
2、Acceptor:提议接受者。Acceptor 有 N 个,Proposer 提出的 value 必须获得超过半数(N/2+1)的 Acceptor批准后才能通过。Acceptor 之间完全对等独立。

这里说明下Acceptor会维护一个信息表记录,(MaxN,AcceptN,AcceptV)
MaxN是回复过prepare request的最高Number
AcceptN是接受过accept request的最高Number
AcceptV是接受过accept request的最高Number对应的Value

3、Learner:提议学习者。上面提到只要超过半数Acceptor通过即可获得通过,那么Learner角色的目的就是把通过的确定性取值同步给其他未确定的Acceptor。

2.3、协议过程
阶段一,准备阶段(prepare阶段)

(a)Proposer选择一个提议编号N,然后向半数以上的Acceptor发送编号为N的prepare request
(b)如果一个Acceptor收到一个编号为N的prepare request,会有以下三种处理场景:
    b.1、if MaxN 等于 null,设置MaxN=N,承诺保证不再接受任何编号小于N的request,回应(pok,null,null)
    b.2、if N 小于等于 MaxN,回应<pno>
    b.3、if N 大于 MaxN,设置MaxN=N,承诺保证不再接受任何编号小于N的request
        b.3.1、if AcceptN 等于 null,回应(pok,null,null)
        b.3.2、if AcceptN 不等于 null,回应(pok,AcceptN,AcceptV)

阶段二,接受阶段(accept阶段)

(a)Proposer接收到Acceptor对于prepare request的回应
    a.1、收到的pok回应未超过半数,重新发起prepare request请求,修改N值
    a.2、收到的pok回应超过半数,接下来它将给这些Acceptor发送一个Number为N,Value为V的proposal作为accept request
        a.2.1、if 回应全部都是(pok,null,null),任取值作为V,提交
        a.2.2、if 回应包括(pok,AcceptN,AcceptV),取最大的AcceptN对应的AcceptV作为V,提交
(b)Acceptor接收到accept request
    b.1、if N 小于 MaxN,回应<ano>
    b.2、if N 大于等于 MaxN,设置AcceptN=N,AcceptV=V,批准,回应<aok>

阶段三、学习阶段(learn阶段)

1、if 收到的aok回应未超过半数,重新发起prepare request请求,修改N值
2、if 收到的aok回应超过半数,结束,将结果通知给所有的learner

 

3. 简单举例说明---3军问题

假设的3军问题

1) 1支红军在山谷里扎营,在周围的山坡上驻扎着3支蓝军;
2) 红军比任意1支蓝军都要强大;如果1支蓝军单独作战,红军胜;如果2支或以上蓝军同时进攻,蓝军胜;
3) 三支蓝军需要同步他们的进攻时间;但他们惟一的通信媒介是派通信兵步行进入山谷,在那里他们可能被俘虏,从而将信息丢失;或者为了避免被俘虏,可能在山谷停留很长时间;
4) 每支军队有1个参谋负责提议进攻时间;每支军队也有1个将军批准参谋提出的进攻时间;很明显,1个参谋提出的进攻时间需要获得至少2个将军的批准才有意义;
5) 问题:是否存在一个协议,能够使得蓝军同步他们的进攻时间?

 

两个参谋先后提议的场景

paxos算法的理论介绍和举例说明

1) 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);

2) 3个将军收到参谋1的提议,由于之前还没有保存任何编号,因此把(编号1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(pok);

3) 参谋1收到至少2个将军的回复,再次派通信兵带信给3个将军,内容为(编号1,进攻时间1);

4) 3个将军收到参谋1的时间,把(编号1,进攻时间1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(aok);

5) 参谋1收到至少2个将军的(aok)内容,确认进攻时间已经被大家接收;

6) 参谋2发起提议,派通信兵带信给3个将军,内容为(编号2);

7) 3个将军收到参谋2的提议,由于(编号2)比(编号1)大,因此把(编号2)保存下来,避免遗忘;又由于之前已经接受参谋1的提议,因此让通信兵带信回去,内容为(pok,编号1,进攻时间1);

8) 参谋2收到至少2个将军的回复,由于回复中带来了已接受的参谋1的提议内容,参谋2因此不再提出新的进攻时间,接受参谋1提出的时间;

 

两个参谋交叉提议的场景

paxos算法的理论介绍和举例说明

1) 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);

2) 3个将军的情况如下
    a) 将军1和将军2收到参谋1的提议,将军1和将军2把(编号1)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(pok);
    b) 负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;

3) 参谋2在同一时间也发起了提议,派通信兵带信给3个将军,内容为(编号2);

4) 3个将军的情况如下
    a) 将军2和将军3收到参谋2的提议,将军2和将军3把(编号2)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(pok);
    b) 负责通知将军1的通信兵被抓,因此将军1没收到参谋2的提议;

5) 参谋1收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号1,进攻时间1);

6) 2个将军的情况如下
    a) 将军1收到了(编号1,进攻时间1),和自己保存的编号相同,因此把(编号1,进攻时间1)保存下来;同时让通信兵带信回去,内容为(aok);
    b) 将军2收到了(编号1,进攻时间1),由于(编号1)小于已经保存的(编号2),因此让通信兵带信回去,内容为(ano);

7) 参谋2收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号2,进攻时间2);

8)2个将军的情况如下 
    a)将军2收到了(编号2,进攻时间2),和自己保存的编号相同,因此把(编号2,进攻时间2)保存下来,同时让通信兵带信回去,内容为(aok);
    b)将军3收到了(编号2,进攻时间2),和自己保存的编号相同,因此把(编号2,进攻时间2)保存下来,同时让通信兵带信回去,内容为(aok);

9) 参谋2收到至少2个将军的(aok)内容,确认进攻时间已经被多数派接受;

10) 参谋1只收到了1个将军的(aok)内容,同时收到一个(ano);参谋1重新发起提议,派通信兵带信给3个将军,内容为(编号3);

11) 3个将军的情况如下
    a) 将军1收到参谋1的提议,由于(编号3)大于之前保存的(编号1),因此把(编号3)保存下来;由于将军1已经接受参谋1前一次的提议,因此让通信兵带信回去,内容为(pok,编号1,进攻时间1);
    b) 将军2收到参谋1的提议,由于(编号3)大于之前保存的(编号2),因此把(编号3)保存下来;由于将军2已经接受参谋2的提议,因此让通信兵带信回去,内容为(pok,编号2,进攻时间2);
    c) 负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;

12) 参谋1收到了至少2个将军的回复,比较两个回复的编号大小,选择大编号对应的进攻时间作为最新的提议;参谋1再次派通信兵带信给有答复的2个将军,内容为(编号3,进攻时间2);

13)2个将军的情况如下 
    a)将军1收到了(编号3,进攻时间2),和自己保存的编号相同,因此保存(编号3,进攻时间2),同时让通信兵带信回去,内容为(aok);
    b)将军2收到了(编号3,进攻时间2),和自己保存的编号相同,因此保存(编号3,进攻时间2),同时让通信兵带信回去,内容为(aok);

14) 参谋1收到了至少2个将军的(aok)内容,确认进攻时间已经被多数派接受;

 
 
 
参考的文档:3军问题,https://www.cnblogs.com/charlesblc/p/6037963.html
参考的文档:《Paxos Made Simple》翻译,https://www.cnblogs.com/YaoDD/p/6150498.html
参看的文档:《Paxos Made Simple》英文原版PDF版本,https://www.microsoft.com/en-us/research/uploads/prod/2016/12/paxos-simple-Copy.pdf

转载于:https://blog.51cto.com/11257187/2122421

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值