分布式哈希表(DHT)与Chord协议

分布式哈希表(DHT)
通常是直接拿业务数据的散列值作为 key,业务数据本身作为 value。可以简单而快速地进行put、get。

Chord协议
原理:Chord通过把Node和Key映射到相同的空间而保证一致性哈希,为了保证哈希的非重复性,Chord选择SHA-1作为哈希函数,SHA-1会产生一个2^160的空间,每项为一个16字节的大整数。这些整数首尾相连形成一个环,称之为Chord环。整数在Chord环上按大小顺时针排列,Node(机器的IP地址和Port)与Key(资源标识)都被哈希到Chord环上,这样就假定了整个P2P网络的状态为一个虚拟的环。
1 覆盖网络
在一个含有N个节点的网络中,将整个网络看做一个圆环,节点按标识符从小到大顺时针组成一个环。对象分配在节点n上,n是从节点标识符大于等于对象标识的节点开始顺时针方向遇到的第一个活着的节点。

2 数据查找
每个节点都维护一个Finger表,该表长度为m(m就是位数,在Chord中为160),该表的第i项存放节点n的第(n+2^i-1) mod 2^m个successor(1<=i<=m)。
每个节点都维护一个predecessor和successor列表,该列表的作用是能快速定位前继和后继,并能周期性检测前继和后继的健康状态。就是说存放的successor是按2的倍数等比递增,之所以取模是因为最后的节点的successor是开始的几个节点,比如最大的一个节点的下一个节点定义为第一个节点
资源Key存储在下面的Node上:沿Chord环,hash(Node)>=hash(key)的第一个Node,我们称这个Node为这个Key的successor。

给定一个Key,按下面的步骤查找其对应的资源位于哪个节点,也就是查找该Key的successor:(假如查找是在节点n上进行)
1 查看Key的哈希是否落在节点n和其直接successor之间,若是结束查找,n的successor即为所找。
2 在n的Finger表中,找出与hash(Key)距离最近且小于hash(Key)的n的successor,该节点也是Finger表中最接近Key的predecessor,把查找请求转发到该节点。
3 继续上述过程,直至找到Key对应的节点。

查询过程实际上就是折半查找的过程。虽然Chord中的每个节点维护了O(log(N))个信息,但是Chord协议提高了数据路由和定位的效率,从O(N)提高到了O(log(N)),查询时信息的转发也减少到了O(log(N))。

你可能感兴趣的:(知识点)