首页 理论教育分布式数据库技术:树状结构与Kademlia协议

分布式数据库技术:树状结构与Kademlia协议

【摘要】:如果启动中的节点还不是网络的一部分,则会计算一个尚未指定给其他节点的随机ID编号。最高层的子树由整棵树不包含自己的树的另一半组成;下一层子树由剩下部分不包含自己的一半组成;依此类推,直到分割完整棵树。Kademlia协议确保每个节点知道其各子树的至少一个节点,只要这些子树非空。Kademlia为节点和键使用160比特的ID。例如,令x=010101,y=110001,则这两个节点的距离为100100(二进制),即十进制为32+4=36。

Kademlia是由Petar Maymounkov与David Mazières所设计的P2P覆盖网络传输协议,用以构建分布式的P2P计算机网络。它是一个基于“异或”运算的P2P信息系统,制定了网络的结构及规范了节点间通信和交换资讯的方式。

Kademlia节点间的通信使用UDP协议。Kademlia节点利用DHT储存资料索引

想要加入网络的节点,需要先经过启动过程。在这个阶段,该节点需要知道另一个已经在Kademlia网络中注册的节点的IP地址(通过另一个使用者或储存的清单获取)。如果启动中的节点还不是网络的一部分,则会计算一个尚未指定给其他节点的随机ID(160比特)编号。这个ID是由节点的对外IP地址跟端口号通过SHA-1之后得到的。这个ID会一直用到离开网络为止。

简单来说,拥有要分享的文件网络节点,会先处理文件的内容,并从内容中计算出一组数字(哈希值),这组数字将会在文件分享网络中辨识这个文件。哈希值与节点ID的长度相同。接着会查找几个ID与哈希值相近且节点内储存着自己IP地址的节点。搜索的用户会使用Kademlia来搜索网络上节点的ID离自己最近的节点来获取文件的哈希值,再获取该节点上的路由清单。当节点联入和联出时,这份存储在网络上的路由清单也将保持不变。因为内嵌的冗余存储算法、路由清单将复制在多个节点上。

在Kademlia网络中,所有节点都被当成一棵二叉树的叶子,并且每个节点的位置都由其ID值的最短前缀唯一确定。

对于任意一个节点,都可以把这棵二叉树分解为一系列连续的、不包含自己的子树。最高层的子树由整棵树不包含自己的树的另一半组成;下一层子树由剩下部分不包含自己的一半组成;依此类推,直到分割完整棵树。(www.chuimin.cn)

Kademlia协议确保每个节点知道其各子树的至少一个节点,只要这些子树非空。在这个前提下,每个节点都可以通过ID值来找到任意一个节点。这个路由的过程是通过所谓的XOR(异或)距离得到的。

Kademlia为节点和键使用160比特的ID。节点上存放键/值对。Kademlia网络中,每个节点都有一个160比特的ID值作为标识符,key也是一个160比特的标识符,每个加入Kademlia网络的计算机都会在160比特的key空间分配一个节点ID(node ID)值(可以认为ID是随机产生的),〈key,value〉对的数据就存放在ID值“最”接近key值的节点上。

判断两个节点x、y的距离远近是基于数学上的异或的二进制运算,d(x,y)=x XOR y,即对应位相同时结果为0,不同时结果为1。例如,令x=010101,y=110001,则

这两个节点的距离为100100(二进制),即十进制为32+4=36。

显然,(二进制)高位上数值的差异对结果的影响更大。