分布式哈希表(DHT)的简单基本说明

时间:2020-03-06 14:49:51  来源:igfitidea点击:

有人能解释一下DHT的工作原理吗?

没什么太重的,只是基础。

解决方案

DHT为用户提供与普通哈希表相同的接口类型(通过键查找值),但是数据分布在任意数量的连接节点上。 Wikipedia有一个很好的基本介绍,如果我写更多的内容,那么我本质上会反省-

http://en.wikipedia.org/wiki/Distributed_hash_table

看看这篇维基百科文章
或者这张幻灯片

好的,从根本上讲,这是一个非常简单的想法。 DHT为我们提供类似于字典的界面,但是节点分布在网络中。 DHT的窍门在于,通过散列该密钥可以找到要存储特定密钥的节点,因此实际上,散列表存储桶现在是网络中的独立节点。

这提供了很多的容错性和可靠性,并可能带来一些性能上的好处,但同时也带来了很多麻烦。例如,当某个节点因故障或者其他原因离开网络时会发生什么?以及在节点加入时如何重新分配键,以便大致平衡负载。想一想,我们如何均匀地分配密钥?当节点加入时,如何避免重新哈希所有内容? (请记住,如果增加存储桶数,则必须在普通哈希表中执行此操作)。

解决这些问题的一个示例DHT是n个节点的逻辑环,每个节点负责1 / n的密钥空间。将节点添加到网络后,它会在环上找到一个位于其他两个节点之间的位置,并负责其兄弟节点中的某些密钥。这种方法的优点在于,环中的其他节点均不受影响。只有两个兄弟节点必须重新分配密钥。

例如,在一个三节点环中,第一个节点具有键0-10,第二个11-20和第三个21-30。如果出现第四个节点并将其自身插入节点3和0之间(请记住,它们成环),它可以负责说说3的键空间的一半,因此现在它处理26-30,而节点3处理21 -25.

诸如此类的许多其他覆盖结构都使用基于内容的路由来找到要在其上存储密钥的正确节点。在环中定位密钥需要一次在一个环上搜索一个节点(除非我们保留本地查找表,这在成千上万个节点的DHT中是有问题的),这就是O(n)跳路由。包括增强环在内的其他结构保证了O(log n)跃点路由,并且有些人声称以O(1)跃点路由为代价要进行更多维护。

阅读维基百科页面,如果我们真的想深入了解,请查看哈佛的此课程页面,该页面具有非常全面的阅读清单。