首页> 中国专利> 一种基于P2P模式的PSRD普适服务资源发现方法

一种基于P2P模式的PSRD普适服务资源发现方法

摘要

一种基于P2P模式的PSRD普适服务资源发现方法。该方法通过哈希函数对目标(资源的名称或描述、节点的IP地址)进行哈希运算,哈希运算结果是一个m位的二进制标识符ID,分别记为:IDk=Hash(资源名称或描述),IDn=Hash(IP);IDn的取值范围为[0,2

著录项

  • 公开/公告号CN101917475A

    专利类型发明专利

  • 公开/公告日2010-12-15

    原文格式PDF

  • 申请/专利权人 天津理工大学;

    申请/专利号CN201010255789.7

  • 发明设计人 张德干;王京辉;王晓晔;赵德新;

    申请日2010-08-18

  • 分类号H04L29/08;

  • 代理机构天津佳盟知识产权代理有限公司;

  • 代理人侯力

  • 地址 300384 天津市南开区红旗南路延长线天津理工大学主校区

  • 入库时间 2023-12-18 01:26:38

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-10-15

    未缴年费专利权终止 IPC(主分类):H04L29/08 授权公告日:20130102 终止日期:20130818 申请日:20100818

    专利权的终止

  • 2013-01-02

    授权

    授权

  • 2011-02-02

    实质审查的生效 IPC(主分类):H04L29/08 申请日:20100818

    实质审查的生效

  • 2010-12-15

    公开

    公开

说明书

【技术领域】:

本发明属于计算机应用与移动互联网结合的技术领域。

【背景技术】:

随着普适计算时代的到来,各种支持普适计算环境的服务资源发现技术研究在如火如荼的进行。服务发现技术的提出,是为了使网络中的节点可以自动搜索所需要的服务。这里的服务包括网络中的任何节点所提供的能被其它节点利用的如扫描、打印、存储和处理数据等任何逻辑功能。服务发现技术使得网络节点能有效的从网络中其它节点寻找和利用这些服务。随着网络规模的不断扩大,加入网络的计算机迅速增多,而网络上各节点对服务的需求和能提供的服务也越来越多样化。所以,如何从众多的网络服务资源中高效率的寻找可用的服务是服务发现技术的关键。大部分的研究者主要的工作都集中在服务资源的搜索和存储上,这使得对服务资源的发现算法的研究成为热点。

考虑到普适计算环境的高度自组织特性,P2P模式的服务资源查找算法为研究普适计算环境中的服务发现提供了优秀的理论基础。

目前已有的服务资源发现算法主要有集中索引算法、结构化算法、非结构化算法以及混合发现算法。集中索引算法以Napster系统为代表,采用了集中式的目录服务器机制,该算法存在单点失效的问题,即目录服务器将成为整个P2P系统的瓶颈,一旦中心服务器出现问题,将导致整个系统崩溃。非结构化算法代表系统为Gnutella,采用洪泛或类洪泛算法,每一个用户消息都将被广播给与该用户直接相连的若干其他用户,这些用户收到消息后,也同样地将消息广播给各自连接的用户,依此类推,直到请求被应答或消息的TTL(Time To Live)值减少为0,该算法可靠性差,对网络的资源消耗大,安全性低,容易大量散播垃圾文件和病毒。结构化算法典型代表包括Tapestry,Pastry,CAN和Chord等,它们都采用了一种分布式哈希表(Distributed Hashing Table,DHT)的数据结构,并根据不同的算法决定网络中节点维护哈希表的方式。混合发现算法则结合了集中索引和完全分布式两种算法来构建网络拓扑。

通过对国内外的普适计算服务的研究现状可以看出,现阶段服务资源发现还有很多方面的不足。在集中索引算法中,采用的机制是基于目录服务器的,各个结点的地址信息和所保存数据的信息集中存储在目录服务器中。这种算法存在单点失效的问题,既目录服务器将成为整个P2P系统的瓶颈,一旦目录服务器出现问题,将导致整个系统崩溃。非结构化算法采用洪泛转发的方式,可靠性差,对网络的资源消耗大。随着网络规模的扩大,通过扩散方式定位对等点及查询信息的方法将造成网络流量急剧增加,从而导致网络拥塞。因此,网络的可扩展性不好,对于大型网络也不适合。另外,其安全性也不高,易遭受恶意攻击,如攻击者发送垃圾查询信息,会造成网络拥塞等。

【发明内容】:

本发明目的是解决提升基于P2P模式的普适服务资源发现过程中的发现效率和发现覆盖率问题,促进普适计算技术的发展及应用,提供一种基于P2P模式的普适服务资源发现(Pervasive Service Resource Discovery,PSRD)方法。

最新的研究成果体现在采用分布式散列表(DHT)的完全分布式结构化拓扑网络。本发明针对现存研究方法的不足,基于分布式结构化网络拓扑结构,通过对传统的指针表进行分析,优化指针表,并结合small-world理论,改进传统DHT资源发现算法,以提高服务资源发现效率和发现覆盖率。

本发明基于P2P模式,结合Small-World理论,提出了新的普适服务资源发现方法。传统的DHT发现算法中,每个节点维护的指针表存储的是临近节点的节点信息。为了构建Small-World模型,提出了添加远程节点信息的思想,每个节点维护的指针表通过计算后删除冗余信息,加入相应的远程索引。与一些已经提出的采用随机选取远程连接节点的算法不同,将通过本地节点的计算来选取远程节点,保证加入远程连接节点后既能使服务发现的范围覆盖整个网络,又不会增加指针表的长度,并简化了指针表的计算和维护工作。

本发明提供的基于P2P模式的PSRD普适服务资源发现方法的具体步骤包括:

基于P2P模式的PSRD普适服务资源发现方法,其特征在于该方法的具体步骤包括:

第1、通过哈希函数对目标即节点信息或资源信息进行运算

使用常规的哈希函数H(x)对目标进行哈希运算,将目标变换成固定长度的输出,对资源的名称或描述、节点的IP地址进行哈希运算Hash()后,分别记为:IDk=Hash(资源名称或描述),IDn=Hash(IP);

第2、将每个加入PRSD网络中的节点及资源按照第1步的方法进行哈希运算,哈希运算结果是一个m位的二进制标识符ID,为了保证两个节点或关键字哈希值相同的概率小到可以忽略不计,m必须足够长,一般取100~200位;节点n的ID用IDn表示,IDn的取值范围为[0,2m-1],将这些属于0到2m-1的IDn按照从大到小的顺序排列成一个圆圈,形成分布式结构化网络节点环;

第3、按照第2步方法将分布式结构化网络节点环构建出来之后,为实际加入分布式结构化网络节点环的每个节点存储一个后继结点即Successor的节点信息;每个节点维护的指针表通过计算后删除冗余信息,每个节点维护的指针表通过增加远端节点的链接来构建PRSD中的small-world网络,加入相应的远程索引;远端节点的链接信息存放在消除冗余后得到的多余指针表空间中;

第4、对于给定的目标,从对等点的候选集中按二分法查找网络中的某个所希望的对端点,把目标映射到该对等点。由于网络中的节点在任何时刻都有可能加入和退出,因此需要能够准确的查找到每个资源。这要借助于对等点保存的<IDk,Value>对,IDk就是要查找资源的hash值,Value是要查找资源实际存储的位置;

第5、针对要查找的目标,直接在本机的指针表中进行查询,经过指针表,可以直接跨越很多节点而到达目标节点或是离目标节点较近的节点,直到找到时为止或作相应的出错处理。

第3步中所述的远端节点的选取方法是通过概率P来进行判断该节点是否符合构建small-world的要求。在PRSD网络中,为了加入远程节点,需要构建两张指针表:近邻指针表和远程指针表,其中近邻指针表的构建采用PRSD算法的指针表构建方式,指针表的数据按照公式(n+2i)mod 2m,(0≤i≤m)来进行计算;构建远程指针表时,需要以概率P来选择远程节点,也就是说,那些不处于临近指针表的节点,将以概率P被选中作为某个节点的远程节点。

本发明的优点和积极效果:

本发明提供的基于P2P模式的PSRD普适服务资源发现方法能有效降低平均查询路径长度。降低查询路径长度原因主要有:1)增加了指针表后,节点在进行资源查找的时候,直接在本机的finger表中进行查询,所用的时间要比在单纯的没有finger表的分布式结构化网络节点环中进行查找要小的多。经过指针表,可以直接跨越很多节点而到达目标节点或是离目标节点较近的节点。2)我们改进了finger表,DHT算法中的finger表只能覆盖到全环的一半,改进后,finger表去掉了冗余,增加了以前没有覆盖的那一半环上的节点信息。在查询时,本节点的计算量大了,但查询时间却缩短了。

本发明利用删除冗余的指针表项后,向空出来的指针表项添加远端节点的方法来使网络具备small-world效应。在添加了额外指针表的改进算法中,远端节点的选取方法是通过概率P来进行判断该节点是否符合构建small-world的要求,本发明考虑到选用这种方式所带来的一系列问题,提出了新的选取远端节点的策略。其优点是在进行服务发现时,基于P2P模式的PSRD普适服务资源发现方法所需节点跳转次数较原来的DHT算法都减少了。

【附图说明】:

图1是一个DHT方法的m=3的分布式结构化网络节点环。此环允许的最大节点数为23=g个。

图2是DHT方法的基本流程图。

图3是DHT方法中节点8查找IDK=45的过程。

图4是一个基于P2P模式的PSRD方法所涉及的m=3的分布式结构化网络节点环。

图5是PSRD方法中新节点加入流程图。

图6是PSRD方法中的查找流程图。

图7是PSRD方法所包含的查找过程。

图8是PSRD方法中节点8维护的指针表。

图9是优化的PSRD方法中新节点加入的流程图。

图10是优化的PSRD方法中节点8维护的指针表。

图11是优化的PSRD方法所包含的查找过程。

【具体实施方式】:

实施例1:

本发明的具体技术方案如下:

第1、通过哈希函数对目标即节点信息或资源信息进行运算

DHT算法是基于DHT(分布式哈希表)的查找算法。在DHT算法中进行网络构建、节点添加和资源查找时,都要用到哈希函数对节点和资源信息进行加工、运算。通过哈希函数,可将目标(节点信息、资源信息)变换成固定长度的输出。

哈希函数H(x)具备以下性质:

1)H(x)可以作用于一个任意长度的数据。

2)H(x)能产生一个固定长度的输出,如160位。

3)易实现性:对任何给定的x,H(x)计算相对容易,无论是用硬件或者软件都能实现。

4)单向性:对任何给定的码h,不可能找到x满足H(x)=h。

5)弱抗冲突(weak collision resistance):对任何给定的数据块,寻找不等于x的y,使得H(y)=H(x)在计算上是不可行的。

6)强抗冲突(strong collision resistance):寻找任何的(x,y)对满足H(x)=H(y)在计算上是不可行的。

基于以上的性质我们可以知道,哈希函数H(x)可以保证数据的唯一性。因此用于Hash节点信息和资源时,可以避免重复值,保证查询结果的正确性。

我们对资源的名称或描述、节点的IP地址进行Hash后,分别记为:IDk=Hash(资源名称或描述),IDn=Hash(IP)。

DHT算法是MIT提出的一个分布式资源发现服务的协议。它的资源查询思想是:给定一个将要查找的资源关键字,PRSD从对等点的候选集中按二分法查找网络中的某个所希望的对端点,把关键字映射到该对等点。该对等点保存了<IDk,Value>对,IDk就是要查找资源的hash值,Value是要查找资源实际存储的位置。

第2、将每个加入PRSD网络中的节点及资源按照第1步的方法进行哈希运算,哈希运算结果是一个m位的二进制标识符ID。为了保证两个节点或关键字哈希值相同的概率小到可以忽略不计,m必须足够长,一般取100~200位。节点ID(用IDn表示)一般使用节点的IP地址哈希运算得出,关键字ID(用IDk表示)通过哈希资源名称运算。这样,IDn的取值范围为[0,2m-1]。将这些属于0到2m-1的IDn按照从大到小的顺序排列成一个圆圈,形成分布式结构化网络节点环。

图1是一个DHT方法的m=3的分布式结构化网络节点环。此环允许的最大节点数为23=8个。

构造过程为:首先,加入网络的所有的节点按照该节点哈希后得到的关键字IDn按从小到大顺时针排列起来,这样就构成了一个地址空间为0-23-1的一个环。环中实心点表示有具体的节点对应。在图1中,加入该网络的节点为0、1、3,资源的关键字为1、2、4、5。资源的关键字值IDk被指定到环中等于IDk的节点或顺时针方向第一个遇到的具体节点,这个节点被称为IDk的后继结点,可表示为Successor(K)。也就是说,Successor(K)就是在地址空间为0-23-1的环上从IDn等于或小于IDk的节点出发,沿着顺时针方向排在该节点后的第一个节点。如图1所示,资源1、2、4、5的信息放在它的后继结点Successor上。资源1的信息放在节点Successor(1)=1上,资源2的信息放在节点Successor(2)=3上,资源4和5的信息放在Successor(4)=Successor(5)=0上。

第3、按照上文的方法将分布式结构化网络节点环构建出来之后,为实际加入分布式结构化网络节点环的每个节点存储一个后继结点(Successor)的节点信息。如图3中,m=6,所以该PRSD网络的规模是26=64,实际加入该网络的节点是10个,分别为图中标出的0,8,14......。这些节点都持有各自的后继节点的信息,如节点8持有其后继14的信息,节点14持有其后继21的信息,以此类推。

在分布式结构化网络节点环构建完成以及节点信息更新完成后,查找过程沿着各自节点及其后继节点进行。DHT基本的算法流程图如图2所示:

根据流程图,用语言表述DHT方法的资源发现具体过程为:

当节点n收到查询某个资源IDk的请求后,先在本节点上查看IDk是否等于本节点的IDn值或属于(IDn,successor(n)),如果属于则返回信息给发起查询的节点,否则将查询消息转发给successor(n),重复执行此过程直到查找成功或查询消息又发回给发起查询的节点(查找失败)。

图3中,显示了节点8查找IDk=45的过程。

当节点8想要查找一个Hash(资源)=45的资源时,首先看45是否属于(8,Successor(8))=(8,14),不属于则将查询消息发送给Successor(8)=14,节点14进行同样的查找步骤,直到发现45属于(42,48)时,可以确定资源45的信息存储在节点48上,并将查找结果返回给节点8,至此查找成功并结束。

可见,节点8想要查找IDk=45的资源时,采用一步一步逼近successor(45)的方法,这个过程中,节点8到successor(45)之间有多少个节点,就要经过多少跳,在图3-3中,查找跳数是5,效率很低。

上面的查找算法是原始PRSD的简单查找算法,这种查找算法效率不高,要经过很多次跳跃,才能找到目标节点,最差情况下是n-1次。研究者们对原始的DHT算法进行修改后,提出了现在广泛运用的经典的PRSD发现算法,该算法为每个参与PRSD网络的节点增加了一张一定长度的finger表用于路由,减少查询跳数。

在对DHT算法中的指针表进行分析后,我们发现指针表存在冗余问题,也就是说,消除冗余后得到的多余指针表空间可以利用起来,以提高查询效率。我们将通过在多余的指针表空间中增加远端节点的链接来构建PRSD中的small-world网络,这样既可以提高查询效率,又不用增加额外的指针表。

同时,DHT发现算法中,每个节点维护的指针表存储的是临近节点的节点信息。本发明为了构建Small-World模型,提出了添加远程节点信息的思想,每个节点维护的指针表通过计算后删除冗余信息,加入相应的远程索引。与一些已经提出的采用随机选取远程连接节点的算法不同,将通过本地节点的计算来选取远程节点,保证加入远程连接节点后既能使服务发现的范围覆盖整个网络,又不会增加指针表的长度,并简化了指针表的计算和维护工作。

首先给出PRSD算法中用到的相关术语:

①IDk:资源信息的hash值;

IDn:节点信息(IP、端口)的hash值;

②<IDk,Value>:IDk是m位的资源Hash值,Value是要查找资源的实际存储位置(IP地址);

③successor(IDk):资源IDk的后继节点,IDn大于或等于关键字IDk的第一个节点;

④finger Table:指针表。是指存储在每个节点之上的用于维护m条节点信息的指针表,详细内容在表1中进行介绍;

⑤Successor(IDk)(后继节点);

⑥Predecessor(IDk)(前驱节点):是指这个值的后继节点在分布式结构化网络节点环中逆时针方向上的第一个节点,用于节点加入网络时指针表的更新;

鉴于原始DHT算法在服务发现过程中效率较低的问题,我们提出了每个节点维护一个定长finger表的PRSD算法。在这种算法中,每个节点要维护一个m项的finger表。m为资源和节点标识的位数,第i个表项的内容为Successor((n+2i-1)mod2m)(n为节点标识符),0<=i<m,我们用finger[i]表示。

该指针表包含的内容如表1所示:

表1指针表

以一个基于P2P模式的PSRD方法所涉及的m=3的分布式结构化网络节点环为例。如图4所示,因为m=3,所以各个节点的指针表维护的表项数为3。已经与网络连接的节点为0、1、3。节点0的指针表的表项分别指向标识符(0+20)mod23=1,(0+21)mod 23=2,(0+22)mod23=4。假设节点3要查找关键字为1的服务。由于1属于弦环区间[7,3),它属于n3.Finger[3].interval,此弦环区间所在的指针表项存储的后继结点信息为节点0,因此节点3将要求0去寻找关键字1的后继节点。以此类推,节点0将查找它的指针表并发现1的后继节点是1本身,于是节点0将告诉节点3,1是它要找的节点。

第4、对于给定的目标,从对等点的候选集中按二分法查找网络中的某个所希望的对端点,把目标映射到该对等点。由于网络中的节点在任何时刻都有可能加入和退出,因此需要能够准确的查找到每个资源。这要借助于对等点保存的<IDk,Value>对,IDk就是要查找资源的hash值,Value是要查找资源实际存储的位置。

节点加入分布式结构化网络节点环时需要一个加入算法来设置每个节点保存的指针表。P2P网络具有高度的动态性,节点在任何时刻都有可能加入和退出,在这种高度变化的网络环境中,仍然需要能够准确的查找到每个资源。这除了要求PRSD网络中每个节点的后继始终是正确的,而且要求节点successor(IDk)中维护的信息始终是与IDk相关的。

所以,当某个节点加入PRSD网络时,PRSD网络必须完成以下3个任务:

1)对新加入的节点n的Predecessor和finger Table进行初始化。

2)更新网络其他节点的Predecessor和finger Table。

3)告诉节点n的后继节点,将应该由n负责的IDk索引信息发送给n。

PRSD节点n加入网络的这3个步骤的算法流程如图5所示:

若某个节点n想要加入PRSD网络,首先通过广播探测网络中是否已经存在引导节点n’,如果n’存在,则借用n’来初始化自己的指针表等信息,这个时候需要调用init_finger_table(n’)函数,至此完成了上述3个任务的任务1);在对自己的指针表进行初始化完成后,调用update_others()函数更新网络中其它节点的指针表,至此完成了上述3个任务的任务2);最后联系n的后继节点successor(n),将successor(n)中应该由n负责的关键字资源交由n负责维护,至此完成上述3个任务的任务3)。

如果n是第一个加入网络的节点,那么它只需要将自己的指针表中的后继(Successor)信息和前驱(predecessor)设置为自身即可。

图5中涉及到的初始化n的指针表算法,通过函数init_finger_table()完成,算法如下所示:

finger[1].succ=n’.find_successor(finger[1].start);//请求n’调用find_successor()函数找到finger[1]的后继

predecessor=successor.predecessor;//设置n的前驱

successor.predecessor=n;//更新n和n’的前驱

for i=1to m-1//更新n的剩余指针表表项

if(finger[i+1].start∈[n,finger[i].succ))

finger[i+1].succ=finger[i].succ;

else

finger[i+1].succ=n’.find_successor(finger[i+1].start)

在函数init_finger_table()中,节点n首先请求节点n’调用find_successor()函数,为其查找finger[1]维护的后继节点,并更新自己的predecessor和n’的predecessor。然后重复地调用find_successor()函数更新指针表的第2条到最后一条。

图5中涉及的更新剩余节点的指针表算法,通过函数update_other()完成。在对其它节点(如节点p)进行指针表更新时,只需更新由于n的加入而受到影响的节点,也即节点n是否会成为节点p的指针表中的第i项。判断节点p的指针表的第i项是否用n替换的依据是:1)节点p位于节点n之前至少2i-1,也就是说节点p应该是节点(n-2i-1)的前驱;2)节点p的指针表中,第i项的信息在n之后。满足这两个条件的节点p通过调用函数update_finger_table(n,i)来更新自身指针表中第i条的信息。update_other()算法如下所示:

for i to m

p=find_predecessor(n-2i-1);//节点P在节点n之前至少2i-1

p.update_finger_table(n,i);

节点P调用update_finger_table(n,i)是一个递归的过程,它必须在PRSD上逆时针的对各个需要更新finger表的节点运行,也就是说,如果节点p更新了它的finger表第i项,那么p的predecessor也需要更新。update_finger_table(n,i)的算法如下所示:

p.update_finger_table(n,i)//如果n是节点p的指针表第i项,用n更新p的finger表

if(n∈[p,finger[i].succ))

finger[i].succ=n,

p=predecessor;

p.update_finger_table(n,i);

带有finger表的PRSD查找算法如下所示:

n.find_successor(IDk)//节点查找与IDk匹配的后继节点

n’=find_predecessor(IDk);

return n’.successor;

该函数需要调用find_predecessor(IDk)查找关键字IDk的前驱n,然后获得节点n’的后继,也就得到了IDk的后继。

n.find_predecessor(IDk)//节点查找与IDK匹配的前驱节点

n’=n;

while(IDk∈[n’,n’.successor])

n’=closest.preceding_finger(IDk);

return n’;

该函数通过调用closest.preceding_finger()函数,在分布式结构化网络节点环上越来越逼近IDn=IDk的节点,最终可以得到IDk的前驱节点predecessor(IDk)

n.closest.preceding_finger(IDk)//返回指针表中与IDk最接近的节点

for i=m down to 1

if(finger[i].node∈(n,IDk])

return finger[i].node;

retum n;

函数closest.preceding_finger()在资源查找过程中被多次调用。在节点自己的指针表中,从第m-1项指针表开始往前找,直到找到predecessor(IDk)而且与IDk最近的节点,返回给调用它的find_predecessor(IDk)函数。

第5、针对要查找的目标,直接在本机的指针表中进行查询,经过指针表,可以直接跨越很多节点而到达目标节点或是离目标节点较近的节点,直到找到时为止或作相应的出错处理。

通过以上3个主要函数,PRSD算法所包含的查找过程如图6所示:

如图7是对图3添加了指针表后的分布式结构化网络节点环。

节点8收到查询资源IDk=45的请求后,先在自己的指针表中进行查询,找到与45最接近的节点是42,将查询信息转发给节点42;同样的过程,节点42在其指针表中进行查找,节点42发现目标45属于该指针表中的弦环区间[44,46),该条指针表的succ.信息为节点48;由此可以断定<45,Value>存储在节点48上。表示查找成功,并发送请求给节点48。

在图3中的原始PRSD网络中查找IDk=45时,需要经过节点14、21、32、42,最终共需要5跳才能找到<45,Value>存储的实际位置,在一个只有10个节点的网络中,这样的查找时延证明了查找算法性能的低下。而在图7中带finger表的PRSD中查找45,只需要经过节点8、42就可以得到结果。显然,PRSD算法比DHT算法在查询路径和速度上提升了很多。

PRSD算法的特点是:

1)PRSD网络中的每个节点的指针表保存着网络中部分其他节点的信息,这些节点多是邻近节点;

2)每个节点的指针表长度为m(m可用来度量网络的规模),所以一个节点通常没有足够的信息表项来存储所有网络的节点信息,导致经常不能直接在本地节点找到资源<IDk,Value>对。

根据PRSD算法中finger表的构造,finger表中存放<IDk,Value>的原则是以公式:successor((n+2k-1)mod 2m)来计算的,所以每一次节点进行查询时,发出查询请求信息所需跳转的节点距离基于2i,由于finger表的长度为m,所以节点维护的finger表只覆盖了整个分布式结构化网络节点环的一半。如果目标节点落在所持finger表的另外一半,则必须通过某个或多个中间节点才能找到。

由于finger table中记录的是successor((n+2k-1)mod 2m),IDk是以1,2,4,8,16递增的,刚开始时增幅较小,它们的后继通常是同一个节点。图8给出了在图7中节点8维护的指针表。

节点8递增1、2、4后,它们的后继都是节点14,使得表中有大量的表项浪费。产生这种指针表项冗余的原因是:节点的IDn是经过相容散列函数计算以后得到的,在地址空间中基本是均匀分布的。地址空间是m位的二进制,如果网络中的实际节点有2n个,地址空间就会被分成2n段,所以每两个相邻的节点的IDk之间相差2m/2n=2m-n,即大约前m-n个表项都有相同的后继。也就是说,整个指针表的重复率将大于(m-n)/m。由于为了避免在对节点或资源进行哈希时产生碰撞,m的值通常比较大,那么,重复率(m-n)/m就会比较大。比如一个m=32,n=20的分布式结构化网络节点环中各节点的指针表重复率大概为0.625。如果实际加入网络的节点数量少的话,重复率会更大。

所以我们可以考虑将重复的信息去掉,而添加一些有用的信息。这些有用信息的选定灵感,来源于small-world理论。

在PRSD中,节点的指针表维护的范围最大达到半个分布式结构化网络节点环,指针表中维护的节点被看做近邻节点。如果我们能从指针表没有维护到的另一半分布式结构化网络节点环中选择适当的节点添加到指针表中,PRSD网络将呈现small-world特性,从而降低搜索跳数。

假设任意节点u与最近两个节点存在连接,并与节点v存在一个远程连接,u、v之间的最短距离为D(u,v)。u与v之间建立连接的概率等于则存在搜索算法使得搜索路径的平均长度为O(log2N)。

对于一个K维网络,节点u以正比于[D(u,v)]-r的概率与节点v建立连接(其中,v为任意非u节点;D(u,v)为u、v的距离;r是一个常数)。当且仅当r=k时,存在一种P2P搜索算法,使搜索路径长度等于logN的多项式规模。因为PRSD网络是一个一维的网络,故u、v之间建立连接的概率为D(u,v)-1时,搜索路径长度的期望值为logN的多项式规模。

目前构造small-world网络的方式主要是采取以概率P选择远程节点连接的方式。例如在PRSD网络中,为了加入远程节点,需要构建两张指针表:近邻指针表和远程指针表。其中近邻指针表的构建采用PRSD算法的指针表构建方式,指针表各项数据依然以表1的公式来进行计算。构建远程指针表时,需要以概率P来选择远程节点,也就是说,那些不处于临近指针表的节点,将以概率P被选中作为某个节点的远程节点。

关于第3步中所述的远端节点的选取方法这里做一阐明。

如果以概率P来选择远程节点的话,我们必须解决以下问题:

1)P=?。我们知道,P是介于0到1之间的值,当P=0时,网络是一个具有规则拓扑的结构化网络,而当P=1时,网络呈现为完全的无规则状态。那么,在0~1之间的这些取值中,我们选取哪一个将最适合构建small-world网络?

2)P是一个固定值吗?如果我们解决了问题1),即找到了一个P值,以该值选取远程节点后,使得当前PRSD网络成为一个small-world网络。但是众所周知,P2P网络具有高度动态性的特点,节点在频繁的加入和退出网络,那么此时的最优P值并不能保证是下一刻的最优P值。

3)如果我们能得到一个计算公式,如采用上面提到的Kleinberg模型中提到的随着节点的加入和退出来计算最优P值,也就是说P值是不断变化的。那么可想而知,在这种情况下,指针表的维护是复杂的。节点的计算任务将增加很多。指针表的更新也显得比原来复杂。

鉴于上面提到的P值选择带来的问题,我们决定不再使用传统的通过P值来选取远程节点去构建small-world的方法,而是在对指针表进行分析后,消除指针表冗余,依然利用指针表构建公式在表尾添加远程节点。

通过对finger表的观察可以发现,前几项的节点的跳转跨度不大,这样就造成了冗余区间的存在,因此重复的表项几乎都在finger表的前几项中。我们考虑去掉重复的冗余表项,在finger表的尾部填加新的表项。

消去冗余的表项后,我们从finger表未覆盖的另一半区域通过计算选取相应表项添加到原finger表的尾部,这样finger表便可以覆盖整个分布式结构化网络节点环,提高了finger表的利用率,进而提高搜索速度。而且从另一半区域选取的节点,可以使网络具有small-world特性。

而为了消除指针表的冗余和构建small-world网络,当新节点n加入时PRSD要完成一个新的任务,就是检查指针表项的冗余项并删除,然后添加远程节点信息,添加时选择策略如下:

1)由于重复信息只会出现在指针表的前几项,所以第一步是合并前几项后继节点相同的指针表项为一条;

2)按照表1的计算方法来添加表项,i重新计数,添加的表项中,finger[i].start等于原指针表中最后一项的Succ。如:图7中,节点8维护的指针表在删除冗余后,只剩下4条指针表项,则需要对其添加第5条和第6条指针表项作为远程链接信息,按照添加策略,第5条指针表项内容为:finger[5].start=42,finger[5+1].start=42+24=58,所以Int.=[42,58)。

总之,优化后的PSRD方法的流程如图9所示:

新的节点加入网络时,PRSD网络将完成以下5个任务:

1)对新加入的节点n的Predecessor和Finger Table进行初始化。

2)更新网络其他节点的Predecessor和Finger Table。

3)告诉节点n的后继节点,将应该由n负责的IDk索引信息发送给n。

4)消除本节点中冗余的指针表项

5)在指针表末端添加m-log n条远程链接

其中前三个任务与PRSD中节点加入网络的方式一样,消除冗余和添加远程链接通过调用dele_Redundancy()和add_LF()完成。算法如下所示:

dele_Redundancy(n)//检查并删除冗余表项

for(i=0to i=m-log n)

{

if(finger[i].Succ.=finger[i+1].Succ.)

finger[i].Int=[finger[i].start,finger[i+2].start)

}

add_LF(n)//添加远程节点信息

for(i=m-logn to m)

init_finger_table(n’);

经过该策略进行指针表重新构建后,图8中指针表的冗余信息将被消除,并添加了相应数量的远程节点信息,通过优化后的算法得到的节点8的指针表如图10所示:

优化后的PRSD信息如图11所示:

节点8收到查询IDk=45的请求,节点8在其finger表中直接找到了Successor(IDk45)=48,因此断定45的存储信息存储在节点48上。查找成功。该查找过程在本机就完成了,可见查找效率较PRSD有所提高。

本发明提高了基于P2P模式的普适服务资源发现过程中的发现效率和发现覆盖率问题,有效地支持了基于P2P模式的多种移动应用,促进了普适计算技术的发展及应用。

具体应用

基于P2P模式的PRSD普适服务资源发现方法以P2P方式运行。本发明正在与中国移动、中国联通等单位进行推广应用。

该方法集成在移动通信应用系统中,可支持基于P2P模式的多种移动服务,可快速高效地发现位于House、Office、Coffee house、Park、StadiumAirport等不同场景下的处于固定状态的PC、可携带任意移动的PDA、笔记本电脑laptop等设备群之间的服务资源,并以C/S、B/S、P2P等方式无缝主动地迁移移动应用任务。

例如,

1)多媒体任务无缝迁移。用户的多媒体任务可以透明地随时随地在不同设备间进行无缝迁移,典型的应用包括:移动办公(E-working)、移动学习(E-learning)、移动工作(E-working)、移动商务(E-bussiness)、移动政务(E-Office)、股票交易(E-Exchanging)、智能指挥(E-commanding)等。基于P2P模式的PSRD普适服务资源发现方法实施场景示例如:House、Office、Coffee house、Park、Stadium Airport等各个对等点间以P2P模式相互迁移。

2)交互式流媒体访问。用户在任何需要的时候可以以各种可用设备选择访问网上的流媒体数据并与之交互,典型的应用包括:视频点播、网络游戏、视觉安全监控。这是用户与系统之间的交互式应用。等等。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号