《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > Scribe最佳节点查找速度优化算法

Scribe最佳节点查找速度优化算法

2008-07-31
作者:于潜江, 黄永峰

  摘 要: Scribe提供了一种有效的算法可以较小的计算量查找到最佳节点。然而,该算法在查找的过程中,需要不断地进行网络临近性测量来比较、判断、查找最佳节点,耽误时间。特别是在中国电信和中国网通" title="网通">网通互联互通问题比较严重的网络环境下,情况会进一步恶化。为了更快地查找到最佳节点,减少最终用户的等待时间" title="等待时间">等待时间,解决应用层组播" title="组播">组播技术在中国应用的具体问题,充分利用了Scribe节点运行过程中的历史数据和已知的IP地址数据库,优化了Scribe最佳节点查找算法。模拟实验显示,该算法将最佳节点查找速度提高了5%左右。
  关键词: 对等网络(P2P); 应用层组播" title="应用层组播">应用层组播; 终端系统组播(Scribe); 流媒体

 

  最近几年,流媒体直播越来越受到广泛的关注。IP组播是支持流媒体直播的最有效技术。然而,相关技术研究虽然经历了十多年的发展,并未能得到广泛应用。于是近年来不少学者提出了应用层组播技术。
  应用层组播系统大多是建立在P2P技术基础上的。目前P2P最流行的算法就是DHT算法。但在大多数DHT算法中,节点标识符是随机选择的,而邻居关系只是基于这些标识符来建立。如何合理地将节点的地理位置考虑进去,优化DHT算法,使该算法在保留原有优点的基础上更快地找到最佳节点,对于应用层组播的推广应用有着非常重要的理论意义。在2005年,中国利用应用层组播技术建立的商业公司如雨后春笋般地涌现出来,如UUSEE、PPLIVE、PPSTREAM等,但都面临着中国电信与中国网通网络互联互通问题。如何优化DHT算法,对于在中国互联网上提供应用层组播服务也有着更积极的现实意义。
  Scribe是在Pastry基础上开发的一个可扩展的应用层组播体系结构。Scribe充分利用了Pastry的可靠性、自组织性和网络位置属性。本文在Scribe最佳节点选择算法的基础上,充分利用了Scribe节点历史数据和已知的IP地址库,有效地提高了Scribe查找最佳节点的速度。
1 算法设计
1.1 最佳节点的定义

  应用层组播算法的一个特点是:它的设计是针对某种应用进行优化,所以哪一个点是新加入组播树的节点的最佳节点并没有准确地定义。本文根据自身的理解和实际工作的经验,从实际应用的角度做了如下定义:
  (1)距离新加入节点延时最小的节点
  应用层组播的首要任务是要给用户提供稳定的、高质量的音视频流。与组播节点延时最小的上层节点,通常都是网络位置较近的、网络环境相对比较稳定的点。所以,延时最小应该是最佳节点的第一判断标准。
  (2)距离组播树的根路径最短的节点
由于应用层组播多用于音视频直播,组播树最底层的节点与根节点之间的延时是需要考虑的问题。如果直播内容的延时过大,对于用户体验来说就相对较差,特别是对一些体育比赛的直播。因此,把距离组播树的根路径最短列为最佳节点第二重要的判断标准。
  (3)处理能力空余多的点
  为了整个系统的稳定性以及避免过热点的存在,应用层组播应该尽量控制节点的度,防止组播树的某些点过热。节点的空余处理能力是选择最佳节点的第三标准。
通常情况下,最佳节点的选择,要根据三个条件统一考虑。本文只限于讨论第一个标准:在一个新节点加入组播树时,花费多长时间才能找到相对它的最佳节点(延时最小的节点),如何缩短这个时间以减少用户的等待时间。
1.2 Scribe节点加入机制
  Scribe是在Pastry基础上开发的一个可扩展的应用层组播体系结构。Pastry是目前业界比较活跃的开放的P2P研究项目,2007年2月刚刚发布了2.0的版本。Pastry也是业界考虑节点网络位置的DHT算法中的一个。
  Scribe使用Pastry来管理组的创建、组的加入和基于每个组的组播树的建立。Pastry和Scribe是全分布式的:所有的决定都基于本地信息;每个节点都有同样的能力;每个节点都可以是组播源、组播树的根、组成员、组播树上的一个节点或者是上述任何角色的混合。Scribe给应用层提供了简单的API接口。Scribe的完整表述和评估见参考文献[1]。
  Scribe建立一个组播树,并以汇合点(rendez-vous)为根,向组内成员发送信息。组播树是以类似逆向路径转发方案建立起来的,是由组成员到汇合点的路由组成的。组的加入操作是以一种分布式的方法进行的,可以支持大型的、动态的成员关系。
  组播树中的Scribe节点被称作该组的转发器(forwarders),它们可能是也可能不是组的成员。每一个转发器都有一个子表,它包含该点在组播树中所有的孩子节点(包括IP地址和nodeId)。
  当一个Scribe节点要加入一个组时,它要求Pastry路由一条以groupId为关键字的JOIN信息。这条信息被转送到组的汇合点。在这条路由的每个节点上,Pastry检查自己的所属组列表,看是否已经是该组的forwarder。如果这个节点还不是该组的forwarder,它就创建一个组的入口,并把源点加到与该组相关的子表中。然后,它通过沿着加入节点到汇合点的路由的下一个点发送一条JOIN消息成为该组的forwarder。如果是,它就接收这个点作为自己的孩子,并把它加到自己的子表中。原来从源节点发出的信息则被终止。
  图1为Scribe的组加入机制。圆圈代表节点,有一些节点显示了nodeId。为简单起见,设pastry的配置参数b=1,所以每次前缀只匹配1个bit。假设有一个groupId为1100的组,它的汇合点的nodeId和groupId相同,nodeId是0111的节点正在加入这个组。在这个例子中,Pastry路由一个JOIN消息到node1001;然后这个消息又从1001路由到1101;最后,从1101来的消息到达1100。这个路由在图1中用实线表示。

 


  假设节点1001和1101还不是group1100的转发器。那么节点0111的加入将使得这个路由上的两个节点成为该组的forwarder,并且把该点加入到它们的子表中。假设节点0100决定加入这个组,JOIN消息的路由在图1中以点实线箭头表示。由于1001点已经是一个转发器,它把0100节点加到自己的子表中,JOIN消息就被中断了。
1.3 寻找最佳节点
  从上面Scribe的节点加入机制可以看出,Scribe最佳节点的选择主要决定于Pastry将其JOIN消息路由到的第一个节点。而这一个点的选择是依靠Pastry的路由表" title="路由表">路由表决定的。所以,为Scribe寻找最佳节点的工作,其实就是在Pastry节点加入Pastry网络时对节点路由表和叶子节点集合进行的初始化上。
  在Pastry中,一个新节点X若加入Pastry网络,必须知道一个在网络上相近的节点A.X向A发出一个关键字为自己的路由请求,这条信息将会一直转发到在nodeId空间里离X最近的节点。X将接收路由过程中所有节点的路由表,经过整理后得到自己的路由表和叶子节点集合。
  而一个新加入的点如何发现网络上相近的Pastry节点,一种方法是使用一种叫“expanding ring”的IP组播方式,但这需要网络支持组播。Pastry使用了一种有效的算法,它可以通过位于任何位置的Pastry节点找到离自己最近的节点。图2的流程图表示了Pastry的最佳节点发现算法。这个算法使用了这样一个属性:种子(seed)节点的叶子节点集合的位置应该在网络上均匀地分布。在叶子节点中找到较近节点后,路由表的距离属性被用来成指数倍地减少靠近新加入的节点。这是通过在路由表中反复递归查找最近点实现的。Pastry最近节点查找方法的详细说明可参见参考文献[2]。

 


  从Pastry的节点加入算法可以看出,Pastry保留了网络邻近性不变。然而,在比较最近节点时是需要进行实际测量的,因此需要较长的等待时间。下面,将介绍如何缩短等待时间。
1.4 优化算法
1.4.1 历史数据

  任何一个Pastry节点在加入Pastry网络之前,对Pastry网络的状况都是一无所知的。但在加入这个网络并平稳运行一段时间之后,它会了解到对于它自己而言,相对稳定且临近的Pastry节点和Scribe上层节点。因此在它退出之后,再重新加入这个组播组时,这些历史信息对它本身而言还是相对有效的。但由于组成员是动态的,原来网络连接质量好的节点,可能已经离开了组播组。如果它仍然在组播组中,将会极大提高该节点寻找到最佳节点的速度。
  Pastry使用定时(每20分钟)运行的路由表管理任务来保证路由表中的每一入口都是nodeId满足条件的节点当中的最靠近自己的节点。当发现比当前节点更靠近自己的节点时,Pastry替换成更近的节点,并把原节点保留在一个备份列表中,以便当最近节点失效时,可以马上替换回来。Pastry为每个入口最多保留10个备份节点,这些历史数据对于该节点是非常宝贵的,但是Pastry和Scribe只把这些数据保存在内存中,节点退出之后,这些数据就被释放掉了。而本算法则将这些数据定期保存到硬盘上,这样当该节点再次进入Pastry网络时,可以充分利用这些历史数据。
  在后面的测试数据中可以看出,在组播组的人数达到一定规模的稳态时,该算法能够有效提高最佳节点查找的速度。但是这个算法对于第一次加入的节点没有任何作用。
1.4.2 IP地址库
  在我国,由于众所周知的原因,中国电信和中国网通两大电信运营商之间的网络互联非常差。而Pastry中nodeId的生成是不考虑实际网络位置的。在nodeId空间中,相邻两点在网络位置上相距很远的可能性非常大。也就是说,nodeId相邻的两个点很可能一个在网通,一个在电信。如果在这种条件下,仍然采用1.2节中的算法寻找最佳节点,就会耽误很多时间。
经过多年的测试和搜集,已经有人成功地搜集完中国电信、中国网通以及其他中国主要ISP的IP地址网段。如果在使用图2的寻找方案中,充分利用该IP地址库,则可以有效降低等待网络探测的时间,加快最佳节点的寻找速度。这一算法对提高新节点第一次加入组播组的速度会有一些帮助。但是,这个算法只对中国或互联网状况类似中国的网络才适用。
1.4.3  算法的实现
  实现过程:
   (1)在Scribe节点正常运行中,定期地将节点的路由表、叶子节点集合、Ping包延时表等相关数据保存到硬盘上。当节点退出后再进入时,首先载入这些历史数据和IP地址数据库,然后按照图3的流程进行处理。
  (2)图3显示了根据优化算法对Pastry节点加入网络初始化时的流程图。

 


  图3与图2比较可以发现,第2、3、5、7、9步为修改的地方。第2步,如果种子节点原来就在本机保存的最佳节点纪录中,直接返回最佳节点。第3步,如果种子节点的IP地址和本机不属于同一个电信运营商,重新抓取另一个种子(系统通常会提供多个种子),但不属于同一个ISP的两点在网络上相邻的可能性很小。第5、7、9步,在从某个集合中挑选最近节点时,都使用类似第2、3步的判断方法:首先查看该点是否是本机保存的最佳节点,如果是,就直接跳到第12步,结束搜索过程。如果不是,则比较该点IP地址是否和本机属于同一个ISP,如果不是,则跳过测试比较的步骤,节省搜索时间;如果是,则仍按照以前的步骤,进行测试比较。下面的实验表明,该算法可以有效提高Scribe最佳节点的选择速度。
2 性能分析和测试
2.1 试验环境和机制介绍

  Pastry提供的网络模拟器是基于包级别的、离散的网络模拟器。这个模拟器可以模拟物理链路上的传播延时,最多可以模拟10万个节点,但是不能模拟排队延时、包丢失。
  实验使用Pastry的配置为b=4, 叶子节点集合大小l=16。利用Pastry/Scribe提供的API及例子程序开发一个小程序。该程序设定所有的Pastry节点都运行Scribe,不运行其他的P2P应用。每个Scribe节点都加入同一个组播组,第一个节点既当信息发布源,又当组播树的根。其他的节点一旦加入Pastry就立刻加入组播组,并开始接收数据。把N个节点一个一个地加入,计算每个节点从加入开始到正常接收Scribe数据的时间,然后计算平均值。在不同的N值分别测试10次,以利用程序保存下来的历史数据。把模拟试验所使用的N×N的延时矩阵文件,人为分为两个部分,分别模拟两大运营商。并在程序中给出类似IP地址的区分判断。由于试验设备的限制,本次试验的N的最大值为4 000。
  以Pastry提供的网络模拟器测试经过优化过的Scribe程序。作为比较,把没有经过优化的Scribe程序也在相同的模拟器上运行。由于模拟器本身对时间参数作了优化,因此,时间的绝对值可能没有什么参考价值,但优化程序的加速比率却有一定的参考意义。
2.2 试验数据和结论
  测试的结果如图4所示。从图中可以看出,随着节点数的增加,节点选择最佳节点的时间也在增加。这主要是由于节点多时,节点加入需要交换的信息也越来越多所致。从两种算法的比较可以看出,优化的算法在节点数少时,没有任何优势。这主要是因为节点少,需要进行测试的时间也比较少,加速优势体现不明显。随着节点的增多,可以看出,经过优化的算法要比原算法有优势。原算法的最佳节点的平均寻找时间起伏比较大,而优化的算法则相对比较稳定。新算法的节点加入速度大约是原算法的95%左右。

 


  本文介绍了利用历史数据和IP地址库提高Scribe最佳节点查找速度的一种算法。模拟实验显示,该算法对于中国的互联网现状还是有一定效果的。下一步的工作,应当充分考虑最佳节点的其他标准,统一优化查找速度。事实上,该算法不仅可以用来提高Scribe最佳节点的查找速度,也同样适用于所有结构化P2P网络上的应用层组播系统。


参考文献
[1]  CASTRO M, DRUSCHEL P, KERMARREC A M, et al. SCRIBE: a large-scale and decentralized application-level  multicast infrastructure. IEEE Journal of Selected Areas in Communications, 2002,20(8).
[2]  CASTRO M, DRUSCHEL P, HU Y C, et al. Exploiting network proximity in peer-to-peer overlay networks. BertinoroItaly: International Workshop on Future Directions in Distributed Computing(FuDiCo), 2002.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。