简体   繁体   English

如果 DHT 的一个节点发生故障,值会变得不可用吗?

[英]If a node of a DHT fails, will the values become unavailable?

I'm reading up about DHTs, but struggle to find information on what the consequences are for DHT values when a node fails.我正在阅读有关 DHT 的信息,但很难找到有关节点发生故障时 DHT 值的后果的信息。

As far as I understand, without redundancy of data (hash table values) the failure of a single node would simply make the values stored in that node unavailable.据我了解,如果没有数据冗余(哈希表值),单个节点的故障只会使存储在该节点中的值不可用。 But if I wanted to use DHTs as storage for any system, I would like that system to be able to rely on the availability of all storage at any time, right?但是如果我想使用 DHT 作为任何系统的存储,我希望该系统能够随时依赖所有存储的可用性,对吗? Maybe data redundancy is outsourced to be an independent problem here, but then this would mean that the aspect of decentralization of a DHT introduces additional points of failures, which seems like a huge downside of DHTs.也许数据冗余在这里被外包成为一个独立的问题,但这意味着 DHT 的去中心化方面会引入额外的故障点,这似乎是 DHT 的一个巨大缺点。

So how are values kept accessible, if the node responsible for those values fails?那么,如果负责这些值的节点出现故障,如何保持这些值的可访问性?

As far as I understand, without redundancy of data (hash table values) the failure of a single node would simply make the values stored in that node unavailable.据我了解,如果没有数据冗余(哈希表值),单个节点的故障只会使存储在该节点中的值不可用。

That is tautological.那是同义反复。 Yes, if you choose no redundancy then there is no redundancy.是的,如果您选择无冗余,则没有冗余。

But if I wanted to use DHTs as storage for any system, I would like that system to be able to rely on the availability of all storage at any time, right?但是如果我想使用 DHT 作为任何系统的存储,我希望该系统能够随时依赖所有存储的可用性,对吗?

That depends on how much availability you actually need.这取决于您实际需要多少可用性。 No system is 100% reliable.没有系统是 100% 可靠的。

And DHTs usually are not used as a storage system.并且 DHT 通常不用作存储系统。 Not for long-lived bulk data anyway.无论如何,不​​适用于长期存在的批量数据。 It should be considered a dynamic value lookup system, similar to DNS, but distributed and peer-to-peer.它应该被认为是一个动态值查找系统,类似于 DNS,但是是分布式的和点对点的。

So how are values kept accessible, if the node responsible for those values fails?那么,如果负责这些值的节点出现故障,如何保持这些值的可访问性?

The simplest approach is to publish the data with redundancy, ie write it to multiple nodes.最简单的方法是将数据冗余发布,即写入多个节点。 Either to the N nodes closest to the target ID or with some other deterministic key derivation that can choose multiple addresses.要么到最接近目标 ID 的 N 个节点,要么到其他一些可以选择多个地址的确定性密钥派生。 The responsibility of republishing the data to compensate for churn of storage nodes can also lie with the originator of the data.重新发布数据以补偿存储节点的流失的责任也可能在于数据的创建者。 This keeps the implementation complexity and the security/game-theoretic aspects simple.这使实现复杂性和安全/博弈论方面保持简单。

Storage nodes themselves could also perform redundancy republishing to ensure that data remains available in the absence of the originating node.存储节点本身也可以执行冗余重新发布,以确保在没有原始节点的情况下数据仍然可用。 The problem with this approach is that it is difficult to secure and incentivize correctly on public networks, especially when there are multiple implementations.这种方法的问题是很难在公共网络上正确地保护和激励,尤其是当有多个实现时。 In closed environments this is more feasible.在封闭环境中,这更可行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM