结构化P2P系统的拓扑匹配方法 【技术领域】
本发明涉及计算机网络技术领域,特别是一种结构化P2P系统的拓扑匹配方法。
背景技术
P2P(Peer-to-Peer,表示一种对等关系)系统改变了传统文件和服务共享的客户机/服务器模式。在P2P系统中,文件存储于各节点(这些节点在系统中的地位是对等的),文件直接在节点间进行传输,系统中的每一个节点既可以给其他节点提供服务,又可以接受其他节点提供的服务。在文件传输之前,需要对文件所处的位置进行定位,由于定位方法或定位思想的不同,P2P系统在实现的时候采用了不同的技术。
P2P系统是建立在应用层上的一个覆盖网络,在建立覆盖网络时并没有考虑底层物理网络的拓扑结构。这就可能造成覆盖网络与物理网络的不匹配(Mismatch),从而对资源定位的响应时间造成不良影响,这里的响应时间定义为路由跳数和逻辑链路延迟的乘积。目前主要有两种方法来解决结构化P2P系统的拓扑不匹配。第一种方法的思路是尽可能多的收集系统地全局信息,然后根据这种全局信息来寻找最优路径。界标簇(landmark binning)方法是基于这种思路的一种方法。在界标簇方法中,每个节点和全局已知的几个界标节点(landmark node)进行延时测量,然后把延时按照某种顺序(升序或降序)进行排列,具有相同界标顺序的节点被认为在物理上是相邻的。这种方法的最大不足在于:界标是粗粒度的,对落入同一个区间的节点不能进一步的区分,在最坏情况下,系统中所有的节点可能落入同一个区间中,这时方法不能带来任何好处。该方法的另外一个问题是:所有的调整和优化都在节点加入(bootstrap)阶段进行,而此后不再进行拓扑优化,即它们不适合于动态度较高的P2P系统。另外一种解决方法是在系统的各个局部(比如节点)上进行优化,通过局部的优化来达到全局的优化。SAT-match(Self-Adaptive TopologyMatch)是基于这种思路的一种方法。在SAT-match中,系统中的每个节点每隔一段时间进行TTL-k(Time to live-k)探测,以此来发现一定范围内距离最近的节点。TTL-k探测有可能把局部最小认为是全局最小,这就使得该方法可能永远都找不到系统中距离该节点最近的节点。同时随着时间的增加,该方法带来的开销是不断增长的。尽管该方法试图动态调整探测间隔来减少无谓的探测,但这种间隔不能太大,否则不能及时发现系统的变化。
【发明内容】
为了解决覆盖网络和物理网络的拓扑不匹配问题,本发明提出了一种结构化P2P系统事件驱动拓扑匹配方法。结合当前存在的拓扑匹配思想,以事件,节点的加入或离开,驱动匹配方法,从而在解决拓扑匹配的同时减小方法带来的额外开销。
该发明的基本思想是:在节点加入(bootstrap)时利用界标簇方法和RTT探测技术寻找距离最近(延时最小)的节点作为直接邻居节点;而当有节点加入或离开系统时,该节点的所有TTL-1邻居节点探测与它们落在同一个区间中的节点,从而找到系统拓扑改变后距离自己最近的节点。此时不可以简单的把找到的最近节点作为直接邻居节点,这是因为在结构化P2P系统中,节点连接到最近的节点的同时可能会连接到新的距离更远的节点。所以需要进行调整前的估算,只有满足条件时,才会把找到的最近节点作为直接邻居节点。
本发明可以解决P2P系统覆盖网络和底层物理网络的拓扑不匹配问题,同时尽量减少拓扑匹配方法带来的额外开销。该方法由节点加入方法和事件驱动方法两部分组成,分别负责节点加入时和节点加入后系统的拓扑优化。具体内容叙述如下:
1.节点加入方法
假设系统中有m个已知界标节点,那么就有m!(m个延迟作全排列)个标界区域。在CAN中,每个标界区域对应虚拟笛卡儿空间的一个区域。节点加入方法步骤如下:
S3.1,当节点A加入系统时,与m个界标节点进行RTT探测;
S3.2,将所得探测结果按某种顺序(升序或降序)进行排序,从而确定节点A所属的标界区域,记为bA;
S3.3,节点A继续对所有属于bA的节点进行RTT探测,将RTT最小的节点记作B;
S3.4,节点A从节点B所拥有的区域(记作ZB)中随机的选择一个点P作为初始加入点,P即为节点A在虚拟笛卡儿空间中的坐标,同时节点A把该信息发给节点B;
S3.5,B获得这个信息后,从ZB中划出一部分(通常是一半)区域ZA给节点A,其中点P在区域ZA中;
S3.6,节点A存储系统中与其相邻的节点的信息,这种信息称为路由信息,主要包括节点的地址标识和节点所拥有区域的信息;
S3.7,节点B以及节点A、B的所有邻居节点需要对保存的路由信息做适当的更新,以保持和当前系统一致,这样节点A就加入了P2P系统。
2.事件驱动方法
事件发生时,系统中的节点需要进行适当调整以适应系统的变化。下面以节点离开系统为例来说明事件驱动方法,节点加入系统与此过程相似。
由于节点A离开只影响A节点TTL-1的邻居节点,因此调整局限在这些邻居节点组成的集合S内。集合S内的每一节点X都需要按下面的步骤做调整:
事件驱动方法步骤如下:
S4.1,节点X对落入bX(bX为节点X所属的标界区域)的每一个节点进行RTT探测,将RTT最小的节点记作节点Y,同时记此时节点X的TTL-1邻居节点组成的集合为S1;
S4.2,计算此时的Ltavg(A∪B),记作Lt0avg(X∪Y);
S4.3,节点X随机地在节点Y所拥有的区域ZY中选择一个点P,节点Y把ZY等分为两块区域,点P所在的区域记作ZY1,另一块区域为ZY2;
S4.4,假想节点X离开了原来的位置,并把点P作为初始加入点重新加入了系统,计算此时的Ltavg(A∪B),记作Lt1avg(X∪Y),需要说明的是,这里只是假想X做了调整,而实际上X并未做任何的调整;
S4.5,如果Lt0avg(X∪Y)>Lt1avg(X∪Y),]]>转到步骤S4.7);
S4.6,如果点P在ZY1内,则在ZY2内随机选择一点作为P,跳转到步骤S4.4),如果点P在ZY2内,则跳转到步骤S4.8);
S4.7,节点X离开原来的区域,并且把点P作为加入点,重新加入CAN系统,记此时节点X的直接相邻节点组成的集合为S2,集合S1和S2内的节点对保存的路由信息做适当的更新,以保持和当前系统一致,同时把集合S1和S2中的元素加入到集合S中;
S4.8,清空S1和S2,从集合S中删除元素X,如果集合S为空,结束;否则重复以上步骤。
节点每次加入和离开都需要重复上面的步骤。这里假设落入bX的节点的信息存储在某个已知节点上。
3.方法优化
1)界标簇方法在最坏情况下会使系统中所有的节点可能落入同一个标界区域中,此时方法不能带来任何的收益。而事件驱动方法中节点X需要对落入bX(bX为节点X所属的标界区域)的所有节点做RTT探测,所以在最坏情况下方法复杂度为O(n2),这给方法的扩展性带了很大的问题。为了解决这个问题,做了如下的改进:
拓扑改变时,每个可能需要调整的节点探测的节点数p为
p=min(n,Cbx),n≤N]]>
这里p表示节点X需要探测的节点个数,n表示CAN系统中节点个数,Cbx表示落入bX(bX为节点X所属的标界区域)的节点个数,N表示底层物理网络的节点个数。
2)节点加入系统后,已经处在一个比较理想的位置,所以如果在没有节点离开系统之前就做探测、调整,就显得没有必要了。这里规定:在系统初启到有节点离开系统这段时间间隔内,节点的加入不触发事件驱动方法。这里强调节点的离开是因为节点的离开会比较大的影响该节点的TTL-1邻居节点。
3)当节点A加入或者离开系统时,它的所有TTL-1邻居节点都需要进行RTT探测。如果TTL-1邻居节点B满足条件,则B会跳到虚拟坐标中别的位置。此时节点B的所有TTL-1邻居节点也都需要进行RTT探测。如此一直重复下去。这就可能造成一个节点在刚刚进行过RTT探测后再次进行RTT探测,而第一次探测是没有作用的。为了解决这个问题,规定:一个节点在得知需要进行RTT探测后,不是立即去进行探测,而是等待一段时间T,如果在这段时间里需要进行多次探测,只做一次。
该发明不是只利用P2P系统的全局信息或者只利用P2P系统的局部信息,而是二者的结合,从而在完成拓扑匹配的同时减少了方法带来的开销。
【附图说明】
图1是两种方法的stretch比较图。
图2是两种方法的开销比较图。
图3是本发明的结构化P2P系统的拓扑匹配方法节点加入P2P系统时的流程图。
图4是本发明的结构化P2P系统的拓扑匹配方法事件驱动方法流程图。
【具体实施方式】
图1是两种方法的stretch比较,从图中可以看出,界标簇(landmarkbinning)方法和SAT-match方法的结合可以使系统stretch降低50%左右,而该发明提出的方法——事件驱动方法可以使系统的stretch降低65%左右,这里的stretch定义为平均逻辑链路延迟与平均物理链路延迟的比值。
图2是两种方法的开销比较,从图中可以看出界标簇(landmarkbinning)方法和SAT-match方法的结合给系统带来的额外开销远远大于事件驱动方法。也就是说,事件驱动方法可以在开销很小的情况下获得较高的收益。
图3是本发明方法中节点加入结构化P2P系统时的流程图。
节点加入方法步骤如下:
S3.1,节点A加入系统时,与m个界标节点进行RTT探测;
S3.2,将所得探测结果按某种顺序进行排序,从而确定节点A所属的标界区域,记为bA;
S3.3,节点A继续对所有属于bA的节点进行RTT探测,将RTT最小的节点记作B;
S3.4,节点A从节点B所拥有的区域中随机的选择一个点P作为初始加入点,P即为节点A在虚拟笛卡儿空间中的坐标,同时节点A把该信息发给节点B;
S3.5,B获得这个信息后,从ZB中划出一部分区域ZA给节点A,其中点P在区域ZA中;
S3.6,节点A存储系统中与其相邻的节点的信息,这种信息称为路由信息,主要包括节点的地址标识和节点所拥有区域的信息;
S3.7,节点B以及节点A、B的所有邻居节点需要对保存的路由信息做适当的更新,以保持和当前系统一致,这样节点A就加入了P2P系统。
图4是本发明方法中事件驱动方法的流程图。
事件驱动方法步骤如下:
S4.1,节点X对落入bX(bX为节点X所属的标界区域)的每一个节点进行RTT探测,将RTT最小的节点记作节点Y,同时记此时节点X的TTL-1邻居节点组成的集合为s1;
S4.2,计算此时的Ltavg(A∪B),记作Lt0avg(X∪Y);
S4.3,节点X随机地在节点Y所拥有的区域ZY中选择一个点P,节点Y把ZY等分为两块区域,点P所在的区域记作ZY1,另一块区域为ZY2;
S4.4,假想节点X离开了原来的位置,并把点P作为初始加入点重新加入了系统,计算此时的Ltavg(A∪B),记作Lt1avg(X∪Y),需要说明的是,这里只是假想X做了调整,而实际上X并未做任何的调整;
S4.5,如果Lt0avg(X∪Y)>Lt1avg(X∪Y),]]>转到步骤S4.7);
S4.6,如果点P在ZY1内,则在ZY2内随机选择一点作为P,跳转到步骤S4.4),如果点P在ZY2内,则跳转到步骤S4.8);
S4.7,节点X离开原来的区域,并且把点P作为加入点,重新加入CAN系统,记此时节点X的直接相邻节点组成的集合为S2,集合S2和S2内的节点对保存的路由信息做适当的更新,以保持和当前系统一致,同时把集合S1和S2中的元素加入到集合S中;
S4.8,清空S1和S2,从集合S中删除元素X,如果集合S为空,结束;否则重复以上步骤。