WebSpider的设计与实现(一)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

WebSpider的设计与实现(一)基于ProActive的分布式并行P-Spider1.0引言互联网信息量非常巨大并且不断快速增长,所以提高搜索引擎的WebSpider的数据采集和更新速度有着重要意义。在分布式并行计算方面,传统的基于MPI的技术具有程序可移植性差和配置复杂等不足。如果直接用java开发,在多线程和分布式java应用程序之间还存在很大的缝隙,而且为了在多线程应用程序上构建分布式应用程序而禁止了代码重用。编程人员增加了很大的负担。ProAcitiveProActive是一个由法国的INIRA的DenisCaromel教授带领的开发小组开发的适合并行、分布和并发计算,在统一框架具有的移动性和安全性的java开源开发包,是ObjectWebconsortium开源中间件的一部分。我们实验室的研究情况主动对象主动对象(ActiveObject,AO)是ProActive计算概念的核心。它包括一个远程对象和一个线程。这个线程控制主动对象的活动,以及和其他已经部署好的主动对象协同工作。主动对象是在标准对象的基础上增加了位置透明、活动透明和同步三种功能。主动对象的通讯默认是异步模式的。一个主动对象包括一个主要的对象、一个线程、待处理请求队列。异步调用ProActive对主动对象的异步调用是通过Future对象来实现的。Future对象是ProActive中为方法调用时自动产生表示调用的返回结果的对象。ProActive采用一种Wait-by-necessity方式来解决内部对象的同步,其思想如下:生成Future对象后可继续往下执行,除非是直接对Future对象的引用,才会自动停下等待,直到Future对象得到具体数值。Future对象的值变为可用时,会自动得到更新。TypeGroup所谓TypeGroup就是具有相同类型的主动对象的群,可以向普通对象一样调用其中的群方法。TypedGroup群通信是建立在ProActive异步远程方法调用基础之上的,可以实现一次调用多个AO操作。如果有返回值,结果也是一个群。节点的部署ProActive的部署文件是一个XML类型文件,它主要由三个部分构成:componentDefinition、deployment及infrastructure。用来提供虚拟节点(VirtualNode,简称VN)、Java虚拟机(JVM)及节点(Node)的映射关系信息。ProActive在程序运行时从部署文件获取结点部署信息。P-Spider的系统框架P-Spider系统框架SpiderWorkernInternetLocalNetworkSpiderWorker2SpiderCoordinatorSpiderWorker1协调器(SpiderCoordinator)由两个部分组成,这两个部分分别被设计成Spider和SpiderWorkload两个主动对象。Spider负责对系统进行部署和管理。SpiderWorkload负责维护URL队列。SpiderWorker•每个SpiderWorker也被设计成是一个主动对象。•每个计算节点上分派了多个SpiderWorker主动对象。•SpiderWorker根据读取到的URL下载页面,然后解析页面的HTML,提取出其中包含的URL。将提取出来的URL链接按照预先定义的统一的格式补充完整。•对URL进行过滤,如去除带“?”的搜索产生的URL等。最后,统计下载URL数量,报告新发现的URL。Spider类publicclassSpider{publicvoidinit(){proActiveDescriptor=ProActive.getProactiveDescriptor(file:+.//descriptors//spider.xml);//为ProActiveDescriptor指定具体的部署文件,spider.xml为部署文件名proActiveDescriptor.activateMappings();//根据部署文件,启动虚拟机,创建NodeProActive.turnActive(this);//将对象Spider变为主动对象spiderworkgroup=(SpiderWorker)ProActiveGroup.newGroup(SpiderWorker.class.getName(),params,nodes);//以数组params中的数据作为参数,生成SpiderWorker类的主动对象,主动对象个数等于params中的参数的组数。并且把这些主动对象部署到nodes中指定的各个节点上去。同时定义名为spiderworkgroup的TypeGroup。IntWrapperpageCount=spiderworkgroup.startwork();//调用spiderworkgroup中每个主动对象的startwork()方法。定义返回值为pageCount。ProActiveGroup.waitAll(pageCount);//阻塞线程,等待群pageCount全部成员返回。}}SpiderWorker类publicclassSpiderWorker{publicIntWrapperstartwork(){intcount=0;//统计下载的URL数while((curUrl=dequeue(urlQueue))!=null)par-do{//各个节点并行工作page=downloadPage(formatUrl(curUrl));//下载foundUrls=extractUrls(page);//发现页面包含的URLreportUrl(foundUrls);//报告发现的URLscount++;}returnnewIntWrapper(count);//ProActive异步调用条件,要求返回包装类型(wrapper)}}P-Spider的部署virtualNodesDefinitionvirtualNodename=spiderNodeproperty=multiple//virtualNodesDefinitionmapvirtualNode=spiderNodejvmSetvmNamevalue=Jvm1/vmNamevalue=Jvm2/……/jvmSet/mapjvmsjvmname=Jvm1creationprocessReferencerefid=localJVM//creation/jvmjvmname=Jvm2creationprocessReferencerefid=zhlc//creation/jvm……/jvmsprocessesprocessDefinitionid=localJVMjvmProcessclass=org.objectweb.proactive.core.process.JVMNodeProcess/jvmProcess/processDefinitionprocessDefinitionid=zhlcsshProcessclass=org.objectweb.proactive.core.process.ssh.SSHProcesshostname=192.168.32.125processReferencerefid=localJVM//sshProcess/processDefinition……/processes实验图2P-Spider运行时IC2D监视结果不足和将来的工作SpiderWorkload的url去重算法不能支持太大的规模,对此算法进行改进。当规模太大的时候,协调器节点容易成为系统瓶颈。对系统结构进行改进。心得体会当系统规模较大的时候,设计阶段详细周全的考虑十分重要。分布式程序和单机程序不同。及时总结夜深人静的时候是想家的时候,也是能够集中精力工作的时候。TheEndThankyou!

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功