Paxos如何处理数据包丢失和新节点加入?

时间:2015-11-05 11:41:26

标签: algorithm protocols distributed-system paxos

最近我正在学习Paxos,直到现在我已经基本了解它是如何工作的。但任何人都可以解释Paxos如何处理数据包丢失和新节点加入?如果提供一个简单的例子,可能会更好。

3 个答案:

答案 0 :(得分:2)

经典的Paxos算法没有“新节点加入”的概念。一些Paoxs变体确实存在,例如“Vertical Paxos”,但经典算法要求在运行算法之前静态定义所有节点。关于数据包丢失,Paxos使用了一个非常简单的无限循环:“尝试一轮算法,如果出现任何问题,请尝试另一轮”。因此,如果在第一次尝试实现解析时丢失了太多数据包(可以通过等待回复的简单超时检测到),则可以尝试第二轮。如果该轮的超时到期,请再试一次,依此类推。

究竟如何检测和处理数据包丢失是Paxos算法未定义的内容。这是一个特定于实现的细节。这对于生产环境来说实际上是一件好事,因为如何处理它会对基于Paxos的系统产生相当大的性能影响。

答案 1 :(得分:0)

关于数据包丢失,Paxos使用下一个关于网络的假设:

  

消息可能会丢失,重新排序或重复。

这是通过 quorums 解决的。所有Acceptors中至少有X个必须接受一个值才能让系统接受它。这也解决了节点失败时的问题。

关于新节点加入,Paxos并不关注节点如何检测其他节点。这是其他算法解决的问题。

  

他们自动了解所有节点和每个节点的角色

如果您愿意,对于生产代码实现,您可以使用Zookeeper来解决此新节点检测。

答案 2 :(得分:0)

正如其他答案中所指出的,消息丢失或消息重新排序由算法处理:它被设计为完全处理这些情况。

新节点加入是“集群成员资格更改”的问题。有一种常见的误解,即Paxos不涵盖集群成员资格变更;但它们在最后一段中的2001年论文Paxos Made Simple中有所描述。在这个blog post我讨论它。有一个问题是新节点在加入集群时如何获得所有状态的副本。这在this answer中讨论过。