4

下图是基本 Paxos 的消息流,在阶段 2a,Leader 为其提案 1 选择值 Vn,并向每个接受者发送 Accept!(1,Vn)。我的问题是:如果这三个消息中的两个丢失了怎么办?我的意思是只有接受者 1(不是多数)接收接受!(1,Vn)。Acceptor 1 会接受这个请求吗?然后广播给每个学习者?选择这个值? 在此处输入图像描述

4

2 回答 2

3

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

编辑我应该注意,正如@Rakis 在评论中指出的那样,我实际上是在谈论 Paxos 的实际应用,而不是旨在证明该方法正确性的算法的学术描述。如果一个人正在参加该主题的考试,请坚持学术描述。如果您实际上正在编写一个实现,那么超时和重新发送是有效处理由于瞬时消息丢失而丢失的消息的方法。

编辑答案“回合失败”意味着通过开始新回合来对该事实采取行动有超时。Paxos Made Simple论文中实际上并没有提到超时. 因此,如果要坚持算法的学术描述,那么消息丢失的确切答案是“世界停止时什么都不会发生”。请注意,该论文说它没有声称及时发生的事情只是不会发生错误的结果。显然,任何合理的实施都不会做任何事情;它应该超时并做一些事情。这突出了一个事实,即算法的学术描述只是为了证明正确性;它故意忽略了如何使用算法实际构建实际解决方案的实际考虑。该论文暗示您可以添加诸如否定响应之类的内容,以帮助构建实用的实现而不影响正确性。如此务实的解决方案,例如trex返回否定确认以使用该算法加速故障转移恢复。那么没有得到回应与得到否定回应是不一样的;因此,由于消息丢失,这一轮并没有失败,它有一个未确定的结果。可以安全地发送更多消息(重新发送)以确定实际结果。

于 2015-12-15T20:04:01.323 回答
2

提议者将无法获得足够数量(阅读:Quorum)的接受响应,因此整个回合失败。

于 2015-12-15T08:48:55.670 回答