Paxos算法内容

Paxos算法内容要满足P2c的约束,proposer提出一个提案前,首先要和足以形成多数派的acceptors进行通信,获得他们进行的最近一次接受(accept)的提案(prepare过程),之后根据回收的信息决定这次提案的value,形成提案开始投票

当获得多数acceptors接受(accept)后,提案获得批准(chosen),由proposer将这个消息告知learner

这个简略的过程经过进一步细化后就形成了Paxos算法

在一个paxos实例中,每个提案需要有不同的编号,且编号间要存在全序关系

可以用多种方法实现这一点,例如将序数和proposer的名字拼接起来

如何做到这一点不在Paxos算法讨论的范围之内

如果一个没有chosen过任何proposer提案的acceptor在prepare过程中回答了一个proposer针对提案n的问题,但是在开始对n进行投票前,又接受(accept)了编号小于n的另一个提案(例如n-1),如果n-1和n具有不同的value,这个投票就会违背P2c

因此在prepare过程中,acceptor进行的回答同时也应包含承诺:不会再接受(accept)编号小于n的提案

这是对P1的加强:P1a:当且仅当acceptor没有回应过编号大于n的prepare请求时,acceptor接受(accept)编号为n的提案

现在已经可以提出完整的算法了

决议的提出与批准通过一个决议分为两个阶段:prepare阶段:proposer选择一个提案编号n并将prepare请求发送给acceptors中的一个多数派;acceptor收到prepare消息后,如果提案的编号大于它已经回复的所有prepare消息(回复消息表示接受accept),则acceptor将自己上次接受的提案回复给proposer,并承诺不再回复小于n的提案;批准阶段:当一个proposer收到了多数acceptors对prepare的回复后,就进入批准阶段

它要向回复prepare请求的acceptors发送accept请求,包括编号n和根据P2c决定的value(如果根据P2c没有已经接受的value,那么它可以自由决定value)

在不违背自己向其他proposer的承诺的前提下,acceptor收到accept请求后即批准这个请求

这个过程在任何时候中断都可以保证正确性

例如如果一个proposer发现已经有其他proposers提出了编号更高的提案,则有必要中断这个过程

因此为了优化,在上述prepare过程中,如果一个acceptor发现存在一个更高编号的提案,则需要通知proposer,提醒其中断这次提案

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关