Chord环的原理和路由表

1.首先是覆盖网络的概念

•覆盖网络
–在一个含有N个节点的网络中,将整个网络看做一个圆环,节点按标识符从小到大顺时针组成一个环。对象分配在节点n上,n是从节点标识符大于等于对象标识的节点开始顺时针方向遇到的第一个活着的节点。

Chord环的原理和路由表
Chord环的原理和路由表

•Chord协议的数据定位
–网络*可能存在N个节点,ID值0-N。组成一个环, Chord协议规定每个节点一定知道其后继节点,查找只能是顺时针进行。
–Chord为每个节点维护一个路由表,路由表的大小为m项(2m>=N),称其为 finger table。finger table保存的节点不是直接相邻的节点,而是按照ID间隔2i的关系排列(i表示表中的数组下标),表中包括m个后继节点和一个前驱节点。前驱节点即NodeID比本节点小的最近节点
–假设本节点 NodeID为X,则m个后继节点分别为 NodeID大于X+20,X+21,…,X+2m的第一个节点。其中第i项指向节点X的后继集中第一个活动的并满足条件大于等于n+2i-1的最小节点s



Chord协议的数据查找
–Chord协议在查询的过程中,查询节点将请求发送到附近(键值最接近)的节点上。收到查询请求的节点如果发现自身存储了被查询的信息,可以直接回应查询节点(这与一致性哈希完全相同);如果被查询的信息不在本地,就根据查询表将请求转发到与键值最接近的节点上。这样的过程一直持续到找到相应的节点为止。
–查询过程实际上就是折半查找的过程。虽然Chord中的每个节点维护了O(log(N))个信息,但是Chord协议提高了数据路由和定位的效率,从O(N)提高到了O(log(N)),查询时信息的转发也减少到了O(log(N))。

1、查看Key的哈希是否落在节点n和其直接successor之间,若是结束查找,nsuccessor即为所找

2、在nFinger表中,找出与hash(Key)距离最近且<hash(Key)nsuccessor,该节点也是Finger表中最接近Keypredecessor,把查找请求转发到该节点

3、继续上述过程,直至找到Key对应的节点


Chord环的原理和路由表
Chord环的原理和路由表

•Chord协议其他的一些要素
–节点的加入与退出
•节点的加入必须有一个节点推荐
–节点内保存的数据资料的迁移
–实际中多采用 (key, value) 对来实现,key决定存储的目标节点,value则是存储在目标节点的信息,可以是内容的索引,也可能是内容本身(如文件中的一个片段)
–超级节点

下面有几个定义:

  • 我们称Chord环上的每个节点为标志符
  • 如果某个Node映射到了某个标志符,则继续称该标准符为Node
  • 按顺时针,节点前面的成为前继(predecessor),节点后面的成为后继(successor);同理,第一个predecessor称之为直接前继,第一个successor称之为直接后继

如图:

Chord环的原理和路由表

红色点为Node,蓝色为标志符。上面只是部分节点和标志符,以节点N1为例说明其Finger表中的successor:

 

No ith successor Successor
1 N1+20  N18 
2 N1+21  N18
3 N1+22  N18
4 N1+23  N18
5 N1+24  N18
6 N1+25  N45
7 N1+26   N1
8 N1+27  N1