Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3334547
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: 系统运维

2010-09-19 17:58:53

1.什么是DHT
       DHT的全称是Distributed Hash Table,即分散式哈希表技术,是一种分散式存储方法。这种网络不需要中心节点伺服器,而是每个用户端负责一个小范围的路由,并负责存储一小部分资料,从而实现整个DHT网络的定址和存储。和中心节点伺服器不同,DHT网络中的各节点并不需要维护整个网络的资讯,而是只在节点中存储其临近的后继节点资讯,大幅减少了带宽的占用和资源的消耗。DHT网络还在与关键字最接近的节点上复制备份冗余资讯,避免了单一节点失效问题。

       DHT使用分布式哈希算法来解决结构化的分布式存储问题
       分布式哈希算法的核心思想是通过将存储对象的特征(关键字)经过哈希运算,得到键值(Hash Key),对象的分布存储依据键值来进行

       形象地,我们可以把整个DHT网络想像成一个大城市,那么每个用户端,就好比城市里各个角落的地图,上面绘制了附近区域的地形情况,把这些地图一汇总,城市的全貌就出来了。

2.DHT的原理
       每个文件索引被表示成一个(K, V)对,K称为关键字,可以是文件名(或文件的其他描述信息)的哈希值,V是实际存储文件的节点的IP地址(或节点的其他描述信息)。所有的文件索引条目(即所有的(K, V)对)组成一张大的文件索引哈希表,只要输入目标文件的K值,就可以从这张表中查出所有存储该文件的节点地址。
       将上面的大文件哈希表分割成很多局部小块,按照特定的规则把这些小块的局部哈希表分布到系统中的所有参与节点上,使得每个节点负责维护其中的一块。例如,节点A负责存储键值从8000到8999的对象;而节点B负责7000~7999的对象。这样,节点查询文件时,只要把查询报文路由到相应的节点即可(该节点维护的哈希表分块中含有要查找的(K,V)对)。这里面有个很重要的问题,就是节点要按照一定的规则来分割整体的哈希表,进而也就决定了节点要维护特定的邻居节点,以便路由能顺利进行。
       这个规则因具体系统的不同而不同,CAN,Chord,Pastry和Tapestry都有自己的规则,也就呈现出不同的特性有查找可确定性、简单性和分布性等优点,正成为国际上结构化P2P网络研究和应用的热点。
 
总结:
        根据对hash表的分割规则,分为CAN,Chord,Pastry和Tapestry,从而体现不同的优点。

问题1:
       将存储对象的键值均匀的分布到每个节点上,这种做法并没有考虑节点的处理能力和在线时间,能不能有更好的方法进行改进。

问题2:
       DHT如何hash的?


3.DHT的查询
       结构化的分布式存储问题解决后,剩下的问题就是用户如何才能找到存储着目标信息的节点。
       在有着大量节点(如100万个)的P2P系统中,任何节点都不可能拥有全部的节点的键值和内容的对应关系;因此用户获得了键值之后,如何找到该键值对应的节点就被称为DHT的路由问题。DHT协议必须定义优化的查找(路由)算法来完成这一搜寻的工作。不同的DHT协议之间区别很大程度上就在于定义了不同的路由算法。
问题1:每个节点如果能发现距离比较近的可用节点,就不会关心距离远,传输慢的节点,就如同人并不关心其它地方的新闻一样,这种说法是遵循何种理论,应该看看社会网络上的知识?

4.常见DHT技术
(1)Kademlia
       详见:分布式哈希表技术Kademlia

参考文献
1.使用DHT tracker. %E4%BD%BF%E7%94%A8dht_tracker
2.DHT 原理zz. http://dev.firnow.com/course/6_system/linux/Linuxjs/20090822/169839.html

阅读(2945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~