【课程报告四】精度Paxos Made Simple(3)

        在完备了精确的规则需求后,文章提出了Paxos的过程:

阶段一:(a)A proposer向大多数acceptors提出一个数字标记为 n 的prepare request

              (b)如果an acceptor收到的prepare request的编号n大于它已经响应的任何prepare request的编号n,那么它将响应该请求,并承诺不再接受编号小于n的任何提议,并使用它已接受的编号最高的提议。

(prepare)

阶段二:(a)如果 proposer从大多数acceptors收到了对其prepare request(编号为n)的响应,那么它将向每个接受方发送一个accept request,以获取编号为n且值为v的提议,其中v是响应中编号最高的提议的值,或者如果响应没有报告提议,则为任意值。

              (b)如果acceptors收到对编号 n 的提案的accept request,它接受该提案,除非它已经响应了编号大于n的prepare request。

(accept)

        因为我看了好多资料都将这个模型成为Basic Paxos,就将这个过程叫做Basic Paxos。

        文章2.3将Paxos模型的最后一个角色learner引入,learner的角色可以简单理解为将被accept的v值记录备份。

        learners与acceptors的交互,最简单明了的方式就是每个acceptor接受到一个提议就向每个learner发送请求,这种方式响应的数量为learner数量与acceptor数量的乘积,这也同时是比较可靠,安全性较高的方式。而文章提出的另一种方式:acceptors向learners中的杰出者(领导者)发送请求,在由杰出的learner向其他learners同步这个请求。显然这种方式降低了响应的数量(learner数量与acceptor数量的和),但它也不太可靠,因为杰出的learner可能会失败。

        越多杰出的learner,通讯复杂度越高,系统的可靠性越高。一般地,acceptors向几个杰出的learner发送请求。

        文章的2.4提出了改进思路。因为Basic Paxos中的问题显而易见,我在【课程报告一】中也由简单提及:

        假设一个proposer a提出一个请求,编号为n,在Basic Paxos的过程中,另一个proposer b提出一个请求,编号为n+1,那么a的请求就被拒绝。那a再次提出请求,只不过将编号为n+2,那么b的请求jiu被拒绝。系统就先陷入了循环而无法正常工作。

        文章给出的解决方法是在proposers中选出一个杰出的proposer来决定某个提议是否被请求。选择提议者的可靠算法必须使用随机性或实时性——例如,通过使用超时。但是,无论选举是否成功,都要确保安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值