如果一台分布式哈希表(DHT)的节点失效,其存储的值是否会变得不可用?

3

我正在了解DHT,但很难找到与节点故障相关的DHT值影响的信息。

据我所知,如果没有数据冗余(哈希表值),单个节点的失败将使该节点中存储的值不可用。但是,如果我想将DHT用作任何系统的存储,我希望该系统能够在任何时候都依赖于所有存储的可用性,对吗?也许数据冗余被外包为一个独立的问题,在这种情况下,DHT的去中心化方面会引入额外的故障点,这似乎是DHT的一个巨大缺陷。

那么,如果负责这些值的节点失败了,如何保持这些值的可访问性呢?

1个回答

3
据我理解,如果没有数据冗余(散列表值),单个节点的故障将使该节点存储的值不可用。
这是一个自我证明的事实。是的,如果您选择不进行冗余,则不存在冗余。
但如果我想将DHT作为任何系统的存储,则希望该系统能够在任何时候依赖所有存储的可用性,对吧?
这取决于您实际需要多少可用性。没有系统是100%可靠的。
而且通常不会将DHT用作存储系统。至少不是用于长期批量数据。它应该被视为动态值查找系统,类似于DNS,但是分布式和点对点的。
那么,如果负责这些值的节点失败,如何保持值可访问呢?
最简单的方法是使用冗余发布数据,即将数据写入多个节点。可以写入到目标ID最接近的N个节点或使用一些确定性密钥派生选择多个地址。 补偿存储节点的流动性所需的数据再次发布的责任也可以由数据的发起者来承担。这样可以保持实现复杂性和安全/博弈理论方面的简单性。
存储节点本身也可以执行冗余再发布以确保在原始节点不存在的情况下数据仍然可用。使用此方法的问题在于,在公共网络上正确保护和激励实现是困难的,特别是当有多个实现时。 在封闭环境中,这更可行。

惊人的答案。只是好奇,制作弦算法的简单启发式方法是什么?https://stackoverflow.com/questions/66664121/is-the-chord-algorithm-fault-tolerant - nz_21
@nz_21 这个Q&A与这个有什么不同? - the8472
这是针对Chord特定的。 - nz_21
是的,但这个答案是关于DHT的通用内容,其中包括chord。那么这不就已经涵盖了吗? - the8472

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接