DHT 及 Chord

1.DHT

  DHT(distributed hash table)是一种分布式系统的存储和索引方案,DHT由对组成,整个DHT表被分布在多个节点上。DHT网络中每个节点都有一个唯一的ID,通过某种算法使每个节点负责维护几个keys以及其所有value,不同的DHT系统拥有不同的节点ID和key映射算法。这样减少了节点的添加与删除所带来的破坏。

  Hash函数可以将不同空间的输入转换成相同空间的输出,而且这个过程是不可逆的,例如MD5和SHA-1。

  DHT网络中的资源被划分为许多小块,以它们作为存储的最小单位。新存储一块资源时,先对这块资源的某种标识(文件名、关键字)进行SHA-1 hash产生一个160比特的key,结合资源的内容value组成对。发送消息put(key,value)至DHT网络中的所有节点,这条信息被节点不断转发直到到达负责维护这个key的节点,于是这个节点将key以及value存储起来。  当有客户端需要获取这块资源时,先同样计算出hash后的key,向DHT网络发送get(key)消息,当负责存储这个key的节点收到消息时即作出应答。

2.Chord

  令哈希后的节点ID和key均为m比特,这样它们就可以都分布在一个可以容纳2^m个节点的环上。Chord将key及其value存储在节点successor(key)中,successor(key)指的是环上从key开始顺时针查找,找到的中第一个存在的网络节点。这种哈希方法又被称为一致性哈希。

  如下图所示,蓝色为hash至环上网络节点ID的位置,红色为hash至环上的key的位置。箭头表示key和ID的映射关系。

3.若增加节点,网络中只有一个节点的负载减轻;而若减少节点,其维护的数据会全部交给后续的第一个节点。如果每个节点都代表一台服务器的话,那么增减节点会造成网络的负载不均衡。

  所以往往将一台服务器分为n个虚拟节点,并无规律地分布在环上。这样当一台服务器出现故障时,其维护的资源会均匀地分配到网络中的每个服务器中。

原文地址:http://cozyshu.blog.51cto.com/blog/1462511/573542

你可能感兴趣的:(分布式计算)