2015-12-15 86 views
4

下图是基本的Paxos的消息流,在相位2a中,组长选择值Vn其proposal1并发送接受!(1,VN)的每一个受体。我的问题是:如果三条消息中的两条丢失了,该怎么办?我的意思是只有接受者1(不是多数)接受接受!(1,Vn)。受让人1会接受这个请求吗?然后播放给每个学习者?这个值是选择? enter image description here的Paxos阶段2a消息丢失

+0

应该避免接受第一不正确的答案,只是因为这是你所期望的答案。 – simbo1905

+2

JensG的回答是正确的。基本的Paxos算法没有负面响应的概念,因此缺少响应被解释为否定确认。 Simbo1905的答案也是正确的,但是引用了超出核心算法要求的实际扩展。纯算法的优点是它避免了现实世界实现中涉及的大部分复杂性。在实际实施中有效检测和处理这些故障情况可能相当复杂和具有挑战性。所以,在第一次学习Paxos时最好忽略这些细节。 – Rakis

+0

@Rakis加上你认真的评论。我已经编辑了我的答案,明确表示它将帮助用paxos构建真正的解决方案,而不是通过关于该主题的cs考试。在我实施paxos的经验中,我发现使用不实用的合成单轮协议来证明正确性的学术方法可能是人们感到困惑和复杂的主要原因。所以即使它不会帮助任何人通过大学笔试,我也会离开我的实际帮助答案。 – simbo1905

回答

2

提议者没有得到足够数量的接受答复(读数为法定人数),因此整个回合失败。

3

的Paxos是容忍重复消息,因此它是安全的,最佳的,对于投保人重新发送或者准备或接收消息,如果它没有得到大多数回应。假设有一个短暂而短暂的网络问题,只有那些信息丢失了。如果响应超时,然后重新发送消息,则消息将通过,并且该回合可以成功。这比由于丢失信息而失败并开始新一轮更有效。

编辑我要指出,作为@Rakis的评论指出,其实我在谈论的Paxos的实际应用,而不是其目的是为了证明该方法的正确性算法的理论描述。如果有人正在对该主题进行考试,则坚持学术描述。如果您实际上正在编写an implementation,则超时和重新发送是由于瞬时消息丢失而有效处理丢失的消息的方式。

编辑的回答“全面失败”意味着有通过启动新一轮采取行动这一事实超时。超时在文件Paxos Made Simple中未实际提及。因此,如果有人想坚持算法的学术描述,那么消息丢失的确切答案是“世界停止时没有任何事情发生”。请注意,该文件表示它不会及时发布事件,只会导致不会出现不正确的结果。显然没有合理的实施将只会无所作为;它应该超时并且做一些事情。这突出表明了该算法的学术描述仅用于证明正确性的事实;它故意忽略了如何使用该算法实际构建实际解决方案的实际考虑。该文件暗示说,您可以添加诸如负面响应之类的内容,以帮助构建实用的实现而不会影响正确性。所以像trex这样的实用解决方案会返回否定确认,以加快使用该算法的故障恢复恢复。然后没有得到回应与获得否定回答不一样;所以在消息丢失的情况下,轮次不会失败,但它有一个不确定的结果。进一步的消息(重新发送)可以安全地发送以确定实际结果。

+0

由于接受者根本没有收到消息,所以他们不太可能发送回复。 – JensG

+0

我的回答是,发件人应该在响应上超时并重新发送。 – simbo1905

+0

我同意你的实际应用,但差别确实在细节上。正如你正确的写道:“发送者**应该重新发送*”。虽然这可能是一个很好的建议,但在情况发生之后,它仍然在谈论*可以*做些什么。发件人决不是有义务重发邮件。换句话说,如何处理这种情况是(仅)一个选项,而不是强制性的。并且可能有些情况下开始新一轮比赛可能是更好的选择,例如当旧轮在很长的超时后很可能失败。 – JensG