4

Paxos made simple Lamport 中描述了算法的阶段 2 (a) 如下:

如果提议者从大多数接受者那里收到对其准备请求(编号为 n)的响应,那么它会向这些接受者中的每一个发送一个接受请求,以获取编号为 n 且值为 v 的提议,其中 v 是最高-在响应中编号的提案,或者如果响应报告没有提案,则为任何值。

  • 这是否意味着提议者可以在收集到大多数接受者的响应后立即发送接受请求,而不管他们的提议编号如何?(我发现引用的强调部分暗示了这一点,因为所有相同编号的提案都应该具有相同的价值,对吧?)
  • 或者提议者是否需要来自大多数接受者的具有相同提议编号的响应?(意味着编号为m(小于n)的响应不计入编号为n的响应的多数)
4

2 回答 2

3

这是否意味着提议者可以在收集到大多数接受者的响应后立即发送接受请求,而不管他们的提议编号如何?(我发现引用的强调部分暗示了这一点,因为所有相同编号的提案都应该具有相同的价值,对吧?)

是的,提议者可以在收集到大多数接受者的响应后立即发送接受请求。返回的提案编号告诉提案者在接受请求中发送哪个值。

如果没有返回提案编号,则提案者可以自由选择自己的值。但是,如果返回任何提案编号,则提案者必须发送与最高提案编号相关联的值。

这是一个例子。假设提议者向Propose(4)五个接受者发送并接收回Ack(abc, 2), Ack(abc, 2)Ack(xyz, 3)必须发送Accept(xyz, 4)

于 2013-11-08T23:24:15.910 回答
2

在paxos中,你要区分proposal number、promise number、accepted number。

响应包含一个提案编号和一个接受的编号。在响应中,提案编号与提案编号相同,接受的编号是Acceptor之前接受的编号。

提议者可以在收集到大多数接受者的响应后立即发送接受请求。

每个提案都有一个唯一的提案编号,并且提案者发送的提案中没有包含值。接受者将响应相同的提案编号,接受的数字和前几轮接受的值。然后提议者选择该值,或者作为响应中编号最高的提议的值,或者如果响应报告没有提议,则选择任何值。

于 2013-11-08T16:15:42.407 回答