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

时间:2014-05-11 04:26:59

标签: replication

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

2 个答案:

答案 0 :(得分:2)

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

详细地说,对于容错,您永远不能等待读取或写入所有进程,否则当至少其中一个进程崩溃时,您将阻止。您需要从子集读取和写入。

鉴于您没有编写和阅读所有这些内容,您必须确保(1)您从至少一个具有最新版本数据的进程中读取并且(2)每两个写入相交,这样他们中的一个就会中止。这些是quorum rules

最后,让 n = 2f + 1 进程并写入 f + 1 是您需要 n <的配置< EM>˚F。您可能仍然遵循具有较小读取仲裁的较大写入仲裁的仲裁,但是您需要更多进程以确保写入永远不会阻止等待失败的进程。

答案 1 :(得分:0)

好的,所以想想就这样吧。 n次多项式由n + 1个点唯一定义。对此的证明相当长,需要一些线性代数知识,因此我只需将其链接here。因此,如果要发送消息,可以导出编码消息的多项式(最佳通过一些共同商定的标准,以便接收消息的人知道该怎么做)。但是你通过你的频道发送了多少积分?如果您知道该通道将丢弃n个数据包并且接收的人需要n + 1个数据包来读取该消息,您将需要使用要发送的n + 1个点插入多项式,然后计算n个其他点。多项式并发送整组2n + 1个点,这样接收者将始终能够重建多项式并阅读信息。