1 引言
传统的信息检索技术已经无法容纳Internet上以指数形式增长的海量信息,P2P(Peer-to-Peer,对等网)应用程序采用了新的技术来检索Internet上的文件和信息。JXTA是一个用来解决P2P计算的开放式网络平台[1~4],JXTA 内容管理服务(Content Management Service,CMS)采用了一种实时化的方法来搜索自己想要的资源,以便对等节点(Peer)共享和下载内容。目前,基于JXTA CMS搜索方面的研究仍较少见于文献,本文介绍CMS的简单搜索、基于Metadata的搜索和分布式搜索。
2 CMS简单搜索
任何需要被共享的数据称为内容(Content)。每一份共享内容都有一个独一无二的内容ID和内容广告。内容ID利用内容本身的二进制数据所产生的唯一的128位MD5校验和。通过MD5校验和,可以很容易分辨出有两个不同的对等点(Peer)所共享的两个文件是否相同。内容广告以XML格式存储,用来描述内容的元信息,包括内容名称、长度、MIME类型,内容标志符以及内容描述信息。对于简单搜索来说,CMS的算法是向各个Peer发送一个查询字符串,Peer收到这个查询字符串后,将会获取共享内容的文件名和内容描述。如果Peer认为这个内容符合要求,会将这个内容的广告返回给发出搜索请求的Peer。需要注意的是,进行简单搜索只是去访问对方的CMS,搜索本地符合要求的内容,并不需要请求Peer启动CMS服务。
JXTA CMS简单搜索程序最重要的类是ListContentRequest[5]。ListContentRequest类的主要功能是向远程Peer发送查询字符串,然后监听管道以获得返回的结果。结果返回时,JXTA调用ListContentRequest类中的notifyMoreResults方法。结果返回后,调用ListContentRequest类里的getResults方法可获得所有满足条件的内容广告。
3 基于Metadata的搜索
为了让用户迅速地搜索出需要的内容,可以在共享文件中加入Metadata信息。引入Metadata的目的,是让用户可以根据Metadata信息搜索,而不是根据文件名和文件描述的子串来进行搜索。Metadata搜索实际上是在本地的搜索,其搜索返回的结果实际上只是内容的广告,而非内容本身,因此即使有很多条结果,其实际流量还是很小的。其次,由于返回的结果集将缓存到本地,因此下次搜索时将大大提高速度。
目前JXTA的ListContentRequest类还不支持Metadata搜索,因此用户要搜索Metadata,首先要通过采用子串匹配算法的ListContentRequest获得所有初步符合条件的广告,然后等ListContentRequest返回结果集后再用Metadata的搜索来筛选。工作原理如下:①向远程Peer发送查询字符串。②远程Peer将初步符合查询要求的内容的广告送到请求Peer。收到广告之后,Peer1启动Metadata搜索,搜索的是Metadata信息,筛选出与用户指定的查询字符串匹配的内容。搜索原理如图1所示。
4 CMS分布式搜索技术
4.1 CMS分布式搜索的工作原理
分布式搜索是CMS的发展目标之一[6~7]。在分布式搜索模型中,没有专门的服务器,各个Peer在功能上是相似的,依靠P2P网络环境定位其他的Peer。
在这个模型中,Peer将被配置在一个网格中,搜索请求在这些Peer中传播。实际上,CMS已经支持为实现上述目标所需要的大部分功能,这是因为每一条LIST_REQ和GET_REQ消息中包含了为发送响应消息的输入管道的广告,这样就使得Peer可以转发其他Peer的请求,因为包含的管道ID将会被解析为最初发出请求的Peer的管道。如果要实现上述模型的话,还得加入TTL机制或类似机制来设置一个搜索请求能被转发的节点数的最大值。
Peer搜索网络上与之相邻的Peer,发出LIST_REQ请求消息,其他Peer在接收到此消息后,查询本地是否有符合搜索要求的内容,如果有,则沿请求消息的发送路径发送LIST_RES响应消息,返回包含查询到的所有内容的广告。无论本地是否存在符合查询请求的文件内容,其他Peer都会将该查询请求消息通过扩散方式继续在网络中传递,直至TTL字段值减为0时停止继续转发。
一旦定位了响应它查询内容的对等机之后,就与响应的Peer建立连接,下载自己查询的内容,即先发送GET_REQ消息来请求下载内容数据,响应的Peer在发送包括数据在内的GET_RES响应消息。JXTA使用管道技术,使得在建立连接和传输数据时无需考虑协议的问题。分布式搜索的原理见图2。
4.2 CMS分布式搜索的优势与不足
分布式搜索可达到传统CMS搜索无可比拟的深度[6],能很好满足Internet用户的要求。利用扩散机制,网络上的节点不仅具有本地搜索功能,还具备消息的自动传播功能。这样,转发消息的节点通过消息发送与其它节点直接连接,原始请求端间接地与大量结节点建立了联系,搜索范围可以在几秒钟内以几何级数增长,几分钟内就可搜遍几百万台PC上的信息资源。理论上分布式搜索可得到网络上的所有开放的信息资源,网络范围越广阔,可用资源就越多,分布式搜索就越能体现其优势。
此外,利用CMS分布式搜索技术,任何网络用户能够扫描活动节点并搜索需要的信息,然后直接从这个节点上下载信息,网络的多个节点间的信息复制提高了信息的可得性,使之为更多的用户提供服务,网络因此能够很快积累相当丰富的信息。信息资源的分散与冗余使得网络不会产生“单点失效”问题,同时,针对单个服务器的“访问拒绝攻击”不再有效。由此可见,分散式的网络提高了网络的容错和鲁棒性。
然而CMS分布式搜索技术也存在不足,网络中对等点的查找和定位是通过扩散来实现的,随着网络规模的扩大,通过扩散方式定位对等点的方法将造成网络流量急剧增加,如同其它P2P网络模型面临的问题一样,易遭受恶意攻击,如攻击者发送垃圾查询信息,造成网络拥塞。
4 结束语
作者用JAVA语言编写的基于CMS的分布式搜索程序,已在模拟环境下初步测试通过。今后的研究方向是进一步完善CMS的分布式搜索模型和算法,并探讨相关安全机制。由于CMS诞生不久,处于早期探索阶段,在特定的应用环境下,CMS的分布式搜索还会面临很多特殊的问题,这方面的研究和突破值得期待。