CNFS协议中有限去中心化分布式哈希表资源查找方法与流程

文档序号:23718165发布日期:2021-01-24 06:28阅读:96来源:国知局
cnfs协议中有限去中心化分布式哈希表资源查找方法
技术领域
:[0001]本发明涉及分布式存储
技术领域
:,尤其涉及一种cnfs协议中有限去中心化分布式哈希表资源查找方法。
背景技术
::[0002]分布式哈希表技术(distributedhashtable,dht,类似tracker的根据种子特征码返回种子信息的网络。dht是一种分布式存储路由设计思想。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个dht网络的寻址和存储。[0003]传统集中式哈希表技术,在节点定位,资源查询,资源存储,更新路由的过程中都在极大程度上依赖中心节点。整个网络以中心节点为核心,系统中心化程度高,中心节点是系统的性能瓶颈,在大数据时代下日益增长的数据量处理下已显得捉襟见肘。此外,中心化系统中的安全问题也越发明显,一旦中心节点遭受到攻击,整个系统都会瘫痪。而在分布式系统中却不存在这些问题,分布式哈希表技术就是一种分布式的策略。其所具有的安全性,效率,系统可用性是传统的集中式哈希表技术所无法比拟的。技术实现要素:[0004]本发明主要解决传统集中式哈希表技术中存在的单点故障和中心化程度高等技术问题,参考并改进kademlia算法来实现分布式哈希表思想。公开了一种cnfs协议中有限去中心化分布式哈希表资源查找方法,以提高在节点定位,资源存储,资源查询和节点加入路由建立过程的速度和系统可用性,使系统在安全性,去中心化程度,鲁棒性和可扩展性上得到了极大的提升。[0005]本发明提供了一种cnfs协议中有限去中心化分布式哈希表资源查找方法,包括:[0006]步骤100,查询用户节点以节点标识为参数,查询并返回与目标最近的k个节点标识,得到k个距离目标节点最近的节点,包括步骤101至步骤103:[0007]步骤101,由查询用户节点根据目标节点标识定位到自己路由表中的对应k桶位置,然后从该k桶中筛选出k个距离目标最近的节点,存储于结果列表中,并同时向这些节点转发查找该目标节点的节点查询请求;[0008]步骤102,收到查询请求的节点,将从自己对应的k桶中筛选出距离查询目标最近的k个节点,并返回给查询用户节点;[0009]步骤103,查询用户节点在收到所有返回的节点信息之后,计算其中是否有比当前结果列表中距离目标节点标识更近的节点,如果没有,则说明当前结果列表中节点已是距离目标节点最近的k个节点,查找结束;如果有,则更新自己的结果列表,再向更新后的结果列表中未发送过请求的节点继续发送查询请求,返回执行步骤102,直至查找结束;[0010]步骤200,查询用户节点以资源标识为参数查询,查询并返回所查找的数据或查找失败信息,包括步骤201至步骤203:[0011]步骤201,当查询用户节点要查询一个资源标识对应的数据时,首先会查找自己是否存储了该资源标识对应的数据,如果存在则直接返回该数据,查询结束;否则就在自己路由表中根据该资源标识定位到对应的k桶,再从此k桶中筛选出k个距离该资源标识值最近的节点,存储于结果列表中,并向这k个节点发起资源查询请求;[0012]步骤202,收到资源查询请求的节点,检查自己是否存储了该资源标识对应的数据,如果有直接向查询用户节点返回要查询的数据,查询结束;如果没有就在自己的路由表的对应k桶中筛选出k个距离资源标识最近的节点返回给查询用户节点;[0013]步骤203,查询用户节点在收到返回的所有节点后,计算其中是否有比结果列表中距离目标资源标识更近的节点,如果没有,表示当前结果列表中的k个节点已是距离目标资源标识最近的k个节点,且没有找到目标资源,则查询失败,查询结束并向查询用户节点返回查询失败信息;如果有则更新自己的结果列表,并再次从其中挑选未发送过请求的节点再次发起资源查询请求,并返回执行步骤202。[0014]进一步的,节点标识和资源标识同构,节点标识和资源标识通过进行异或运算,得到节点与资源的距离。[0015]进一步的,在需要存储资源时:[0016]步骤301,存储用户节点以资源标识为参数,查询得到距离资源标识最近的k个节点;[0017]步骤302,存储用户节点向查询得到的k个距离资源标识最近的节点发起存储指令;[0018]步骤303,用户节点接收到存储指令后,将存储指令对应的数据对存储到该用户节点本地。[0019]进一步的,在新节点加入时,包括以下过程:[0020]步骤401,新节点获取引导节点,并把引导节点加入到自己路由表的对应k桶中,并生成一个随机的节点标识,用于标识新节点,直到离开网络前一直使用该标识;[0021]步骤402,新节点向该引导节点发起一个查找节点请求,请求的参数为新节点的节点标识;[0022]步骤403,收到新节点查找节点请求的节点,会先把新节点的节点标识加入到自己路由表的对应k桶中;并且根据查找节点请求的约定,找到k个最接近新节点的节点,并返回给新节点;[0023]步骤404,新节点收到返回的所有节点标识之后,把他们加入到自己路由表的对应k桶中;[0024]步骤405,新节点检查自己路由表中是否还有未发送过请求的节点,若有,则向其中还未发送过请求的节点发送查询自己的查找节点请求,返回执行步骤403;若无,说明新节点已建立完整的路由表,结束。[0025]本发明提供的一种cnfs协议中有限去中心化分布式哈希表资源查找方法,采用kademlia算法思想实现分布式哈希表设计,以异或距离为度量的基础,引入k桶机制,建立一种全新的网络拓扑结构;节点定位通过提供一个节点标识nodeid值可查询返回与该值相近的k个节点,查询可异步进行也可同步进行大大提升了分布式系统中查询的效率;资源定位与节点定位类似,通过提供一个资源标识key值可查询返回对应资源value;资源存储通过提供<key,value>参数,可将资源存储到距离key最近的节点中;节点的加入采用一种“自我定位”的方式,即通过向网络中发起查询自己的请求,使得其他节点(收到请求的节点)能够感知到新节点的加入并使新节点获得详细路由信息。本发明大大提高了节点定位和资源查询的速度和系统可用性,解决了在去中心化分布式存储协议cnfs中点对点网络的路由问题。附图说明[0026]图1是本发明提供的cnfs协议中有限去中心化分布式哈希表查找节点方法的实现流程图;[0027]图2是本发明提供的cnfs协议中有限去中心化分布式哈希表查找资源方法的实现流程图;[0028]图3是本发明提供的cnfs协议中有限去中心化分布式哈希表存储资源方法的实现流程图;[0029]图4是本发明提供的cnfs协议中有限去中心化分布式哈希表新节点加入建立路方法的实现流程图。具体实施方式[0030]为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。[0031]如图1所示,本发明实施例提供的cnfs协议中有限去中心化分布式哈希表资源查找方法,包括:[0032]步骤100,查询用户节点以节点标识为参数,查询并返回与目标最近的k个节点标识(nodeid),得到k个距离目标节点(id)最近的节点。[0033]在基于cnfs协议的文件系统中,每个节点都有唯一的节点标识(nodeid),每个资源也有唯一的资源标识(key),节点标识和资源标识同构,都由160位的二进制表示。根据节点标识和资源标识间的异或距离建立路由表和存取资源。每个节点维护由160个k桶组成的路由表。(k桶定义与kademlia算法中相同:每个节点按照自己的视角对二叉树拆分,将全网节点拆分为160棵子树,对应160个k桶,将每个子树中的k个节点记录在对应的k桶中。)[0034]步骤100查找节点(find_node)。步骤100具体包括步骤101至步骤104:[0035]步骤101,由查询用户节点根据目标节点标识(nodeid)定位到自己路由表中的k桶位置,然后从该k桶中筛选出k个距离目标(id)最近的节点,存储于结果列表中,并同时向这些节点转发查找该目标节点(find_node)的节点查询请求。[0036]在本步骤中,为了确定距离目标最近的节点,通过异或距离来得到节点间距离:[0037]异或距离:节点标识(nodeid)和资源标识(key)同构,二者可进行异或运算,得到的值为节点与资源的距离,值越小代表距离越近。[0038]步骤102,收到查询请求的节点,将从自己对应的k桶中筛选出距离查询目标(id)最近的k个节点,并返回给查询用户节点;[0039]步骤103,查询用户节点在收到所有返回的节点信息之后,计算其中是否有比当前结果列表中距离目标节点标识更近的节点,如果没有,则说明当前结果列表中节点已是距离目标节点最近的k个节点,查找结束;如果有,则更新自己的结果列表,再向更新后的结果列表中未发送过请求的节点继续发送查询请求,返回执行步骤102,直至查找结束;[0040]在上述查询过程中,没有及时响应的节点应该立即从结果列表中删除,以保证最终获得的k个节点都是在线的。[0041]步骤200,查询用户节点以资源标识(key)为参数查询,查询并返回所查找的数据或查找失败信息。[0042]在基于cnfs协议的文件系统中,资源为value,有唯一的资源标识(key)对应资源(value),资源标识(key)与节点标识(nodeid)同构,所以查找到离资源标识(key)最接近的节点标识(nodeid),在节点处匹配到key,返回key对应的value。[0043]如图2所示,步骤200查询资源(find_value),与步骤100查找节点find_node的过程类似。具体的,步骤200包括步骤201至步骤204:[0044]步骤201,当查询用户节点要查询一个资源标识对应的数据时,首先会查找自己是否存储了该资源标识对应的数据,如果存在则直接返回该数据,查询结束;否则就在自己路由表中根据该资源标识定位到对应的k桶,再从此k桶中筛选出k个距离该资源标识值最近的节点,存储于结果列表中,并向这k个节点发起资源查询请求。[0045]例如,当用户节点要查询标识为key的数据时,首先会查找自己是否存储了<key,value>数据对,如果存在则直接返回;否则就在自己路由表中根据key值定位到对应的k桶,再从此k桶中筛选出k个距离key值最近的节点,并向这k个节点发起资源查询(find_value)的资源查询请求。[0046]步骤202,收到资源查询请求的节点,检查自己是否存储了该资源标识对应的数据,如果有直接向查询用户节点返回要查询的数据,查询结束;如果没有就在自己的路由表的对应k桶中筛选出k个距离资源标识最近的节点返回给查询用户节点。[0047]步骤203,查询用户节点在收到返回的所有节点后,计算其中是否有比结果列表中距离目标资源标识更近的节点,如果没有,表示当前结果列表中的k个节点已是距离目标资源标识最近的k个节点,且没有找到目标资源,则查询失败,结束查询并向查询用户节点返回查询失败信息;如果有则更新自己的结果列表,并再次从其中挑选未发送过请求的节点再次发起资源查询请求,并返回执行步骤202。[0048]如图3所示,本实施例的哈希表资源查找方法,对应的存储资源过程,发起用户节点需要将资源数据对<key,value>存储于网络中时:[0049]步骤301,存储用户节点以资源标识(key)为参数,查询得到距离资源标识(key)最近的k个节点。[0050]本步骤,用查找节点方法(步骤100)查询得到距离资源标识(key)最近的k个节点。[0051]步骤302,存储用户节点向查询得到的k个距离资源标识(key)最近的节点发起存储指令store(<key,value>)。[0052]步骤303,用户节点接收到store(<key,value>)后,将存储指令对应的数据对<key,value>存储到该用户节点本地。[0053]至此,数据对<key,value>便存储到了距离key最近的k个节点上。[0054]本实施例的哈希表资源查找方法,对应的新节点加入建立路由过程:[0055]如果有新节点加入,新节点加入建立路由方法:当有新节点加入网络时,要使网络中其他节点能够知道新节点的存在,同时新节点也要获得属于自己的路由表。如图4所示,新节点加入网络更新路由过程包括以下步骤:[0056]步骤401,新节点获取引导节点,并把引导节点加入到自己路由表的对应k桶中,并生成一个随机的节点标识,用于标识新节点,直到离开网络前一直使用该标识;[0057]步骤402,新节点向该引导节点发起一个查找节点请求(步骤100),请求的参数为新节点的节点标识;[0058]步骤403,收到新节点查找节点请求的节点,会先把新节点的节点标识加入到自己路由表的对应k桶中;并且根据查找节点请求的约定,找到k个最接近新节点的节点,并返回给新节点;[0059]步骤404,新节点收到返回的所有节点标识之后,把他们加入到自己路由表的对应k桶中;[0060]步骤405,新节点检查自己路由表中是否还有未发送过请求的节点,若有,则向其中还未发送过请求的节点发送查询自己的查找节点请求,返回执行步骤403;若无,说明新节点已建立完整的路由表,结束。[0061]新节点在自我定位建立路由表的同时,也使得其他节点能够使用新节点标识(nodeid)来更新他们的路由表,这过程让新节点a获得详细路由表的同时,也让其他节点知道新节点a的加入。[0062]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1