在分布式系统中,为什么我们需要2n+1个节点来处理n个故障?



我最近读到,为了处理n个节点的故障,数据必须在2n+1个节点上复制。我不明白那背后的原因。有人能解释一下吗?

这是一个有效的仲裁配置,它需要最少数量的n进程来容忍f错误。

详细地说,为了容错,您永远不能等待所有进程的读或写,否则当其中至少一个进程崩溃时,您将阻塞。你需要从子集中读写。

假设您没有写入和读取所有的数据,您必须确保(1)您从至少一个具有最新版本数据的进程中读取数据,并且(2)每两个写操作相交,这样其中一个就会终止。这些是仲裁规则。

最后,使用n = 2f+1进程并写入f+1是您需要f的最小n的配置。您可能仍然使用较大的写仲裁和较小的读仲裁来遵守仲裁,但是您需要更多的进程来确保写入不会阻塞等待失败的进程。

好,我们这样想。n次多项式由n+1个点唯一定义。这个的证明相当长而且需要一些线性代数的知识所以我在这里把它联系起来。因此,如果您想要发送一条消息,您可以推导出对消息进行编码的多项式(最理想的是通过一些相互同意的标准,以便接收消息的人知道该怎么做)。但是你通过你的频道发送了多少点呢?如果你知道信道会丢失n个包,接收的人需要n+1个包来读取消息,你需要使用你想要发送的n+1个点来插值你的多项式,然后计算n个位于该多项式上的额外点,并发送整套2n+1个点,以便接收的人将始终能够重构你的多项式并读取消息。

最新更新