如果DHT的节点发生故障,值将不可用吗?

问题描述

我正在阅读有关DHT的信息,但是很难找到有关节点故障时DHT值后果的信息。

据我了解,如果没有数据冗余(哈希表值),则单个节点的故障只会使存储在该节点中的值不可用。但是,如果我想将DHT用作任何系统的存储,我希望该系统能够随时依赖所有存储的可用性,对吗?也许在这里将数据冗余外包出去是一个独立的问题,但这意味着DHT的分散化会引入更多的故障点,这似乎是DHT的巨大缺点。

如果负责这些值的节点发生故障,那么如何保持值的可访问性?

解决方法

据我所知,如果没有数据冗余(哈希表值),单个节点的故障只会使存储在该节点中的值不可用。

这是同义反复。是的,如果您选择无冗余,则没有冗余。

但是如果我想使用 DHT 作为任何系统的存储,我希望该系统能够随时依赖所有存储的可用性,对吗?

这取决于您实际需要多少可用性。没有系统是 100% 可靠的。

而且 DHT 通常不用作存储系统。无论如何,不​​适用于长期存在的批量数据。它应该被认为是一个动态值查找系统,类似于 DNS,但分布式和点对点。

如果负责这些值的节点发生故障,那么如何保持值的可访问性?

最简单的方法是发布冗余数据,即将其写入多个节点。要么到最接近目标 ID 的 N 个节点,要么到其他一些可以选择多个地址的确定性密钥派生。 重新发布数据以补偿存储节点的流失的责任也可能在于数据的创建者。这使实现复杂性和安全/博弈论方面保持简单。

存储节点本身也可以执行冗余重新发布,以确保在没有原始节点的情况下数据仍然可用。这种方法的问题是很难在公共网络上正确地保护和激励,尤其是当有多个实现时。 在封闭环境中,这更可行。