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


Answers:


236

好的,从根本上讲,这是一个非常简单的想法。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)跃点路由为代价,需要更多维护。

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


22
+1好答案。在第三段中,“一致性散列”是“一致性散列”(“解决其中一些问题的一个示例DHT是n个节点的逻辑环”)。这是一个非常有趣的话题,用在Apache Cassandra(一种由Facebook创建的分布式数据库)中。链接到论文(值得一读):cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf
santiagobasulto

5
Chord是一个非常容易理解的基于环的查找协议:pdos.csail.mit.edu/papers/chord
ThomasWeiss 2014年

您能否详细说明键值在节点上的存储方式?它是某种形式的哈希表还是数据库?
Wand Maker

@HenryR,“节点环”不只是一个树形结构吗?
Pacerier's

如果有人需要更多阅读材料,伊利诺伊州立大学每学期将和弦协议作为其分布式系统课程的一部分进行讲授-Course.engr.illinois.edu/ece428/sp2018/lectures.html
Siddhartha,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.