一种分布式爬虫集群中的节点和系统的制作方法

文档序号:6397577阅读:351来源:国知局
专利名称:一种分布式爬虫集群中的节点和系统的制作方法
技术领域
本发明涉及计算机数据挖掘领域,具体涉及ー种分布式爬虫集群方法。
背景技术
爬虫作为搜索引擎数据采集的最重要的工具,在如今信息爆炸的时代,传统的客户端(C)/服务器(S)模式下的爬虫已经很难抓取到网络中的全部数据;而且,如果增加爬虫的数量则服务器将承受更大的负载而导致系统无法提升服务性能。在这样的背景下,分布式爬虫集群的方法渐渐进入人们的视野。当前对分布式爬虫集群的研究主要集中在主从模式下的分布式爬虫系统,即会存在部分核心的管理节点负责任务管理、统ー资源定位符url去重及负载均衡等问题,这样的主从模式依然无法解决性能瓶颈和大規模拓展的难题。另ー种分布式爬虫模式为结构化对等网络p2p,即每个运行网络爬虫节点的主机都可以自由通信,没有控制节点,就不存在系统瓶颈,可以进行大規模拓展,但由于缺少管理,节点间的协作、url去重和网络负载均衡成为难以解决的问题。

发明内容
本发明的目的在于提出一种能够进ー步改进系统可拓展性和容错性的节点和系统。为此,在第一方面,本发明实施例提供一种基于结构化p2p的分布式爬虫集群中的节点,所述节点包括底层覆盖网,基于p2p组织方式,执行节点间分发url和接收url的协议;爬行模块,基于被分发的url,负责从互联网抓取对应的资源;控制中心,执行分发url和接收url的功能。 在第二方面,本发明实施例还提供ー种分布式爬虫集群系统,包括如第一方面所述的节点。本发明实施例中,每个节点地位平等且功能一致,依靠节点内部机制实现爬虫协作,所以单节点加入网络无需系统外的额外操作,整个网络可以随意拓展爬虫节点数量,实现大規模分布式爬虫集群。


图1是本发明实施例的爬虫节点内部的结构图。图2是爬虫节点分发url的工作流程图。图3是爬虫节点接收url的工作流程图。图4是爬虫节点进行负载均衡方法的工作流程图。图5是爬虫节点处理节点加入和退出的工作流程图。
具体实施方式
下面结合附图对本发明的具体实施例做进ー步详细的说明。本发明实施例通过利用结构化p2p算法kademlia搭建底层覆盖网,建立起节点间的通信机制;在每个节点上独立运行ー套完整的爬行模块,负责网页抓取,数据解析和链接抽取等工作;同吋,每个节点上配置一个控制中心,负责接收和分发url,负载均衡及处理url历史记录的转移。由于姆个节点地位平等且功能一致,依靠节点内部机制实现爬虫协作,所以单节点加入网络无需系统外的额外操作,整个网络可以随意拓展爬虫节点数量,实现大規模分布式爬虫集群。图1是本发明实施例的爬虫节点内部的结构图。如图1所示,基于结构化p2p的分布式爬虫集群方法中的单节点包括底层覆盖网,爬行模块和控制中心三部分。底层覆盖网是每个节点进行路由通信的基础部件,基于例如结构化p2p算法kademlia而实现的p2p组织方式,可实现数据定位和路由查找的功能。根据本发明实施例,増加了以下通信协议节点间分发url和接收url的协议。爬行模块是爬虫节点进行基本爬虫工作的基础,根据上层应用的需求,负责从互联网抓取对应的资源。具体来说,爬虫模块从接收队列中获取url,下载对应的网页数据,解析网页内容获取目标内容,根据实际应用进行相应的处理,再解析网页内容获取目标链接,根据url历史记录进行去重操作,将剩余的有效链接添加到发送队列。此工作可由多个线程并行爬取来实现,可以大大提高网页数据的下载速度。控制中心是爬虫节点行为的核心控制者,是连接爬行模块和底层覆盖网的枢纽,是爬虫节点间协作机制的实现。控制中心实现的功能包括分发url和接收url。具体地说,控制中心包括分发url模块,对待分发的url进行哈希,获得关键字;底层覆盖网基于关键字查 询目标节点的信息。优选地,分发url模块对待分发的url进行ニ次哈希,获得关键字;底层覆盖网基于关键字查询备份节点的信息。优选地,分发url模块接收目标节点和/或备份节点的回复。另外,控制中心可以包括接收url模块,接收其它节点分发的url。在一个例子中,底层覆盖网还增加以下通信协议因节点动态加入和退出引起的url历史记录转移的协议;控制中心还增加url历史记录转移的功能。具体地说,控制中心可以包括节点加入模块,查找接近节点的目标,并且请求属于自己部分的url历史记录。控制中心可以包括url历史记录转移模块,检测本地的url历史记录,找出属于请求节点的部分,转移给该请求节点。控制中心还可以包括节点退出模块,查找接近节点的目标节点,将本地的ur I历史记录转移给目标节点。在又一个例子中,底层覆盖网还增加以下通信协议因负载不均衡引起的url任务转移的协议。同时修改了 kadmelia中原有的路由通信协议,在节点更新路由表的通信消息中携带节点的负载等级信息,并在路由表保存的每个节点信息中増加了节点负载等级,以此来实现负载均衡时的节点等级的获取。控制中心增加负载均衡的功能。具体地说,控制中心可以包括负载均衡模块,基于邻居节点的节点负载等级信息,确定任务转移。节点的任务队列可以包括工作区和超载块两部分,负载均衡模块可以根据当前超载块的数量,以及当前工作区可容纳的超载块数量确定自己的负载等级。负载均衡模块可以根据路由表的邻居节点距离信息划分节点区域,从节点区域中选择ー个距离近的节点。下文将分别介绍分发url和接收url,负载均衡及url历史记录转移的实现过程以及相关细节。图2是爬虫节点分发url的工作流程图。參考图2可知,爬虫节点分发url时,先从发送队列中取出等待分发的url,对该url进行一次哈希,得到对应的关键字key值,再根据key值在底层覆盖网中查询对应的目标节点的信息。在一个例子中,对该url进行一次哈希和二次哈希,得到对应的关键字key值,再根据key值在底层覆盖网中查询对应的备份节点的信息。得到目标节点的信息后,将url发送给目标节点进行下载和解析,同时,可以将url发送给备份节点进行url历史记录的保存。当收到目标节点和备份节点的回复时,分发结束,将url添加到本地的url历史记录中,通知备份节点添加url到其url历史记录。当收到目标节点的回复但没收到备份节点的回复时,重新选择新的备份节点进行url历史记录的保存请求。

当收到备份节点的回复但没收到目标节点的回复时,根据备份节点回复的url是否已经出现过,如果已经出现过,则将url添加到本地的url历史记录,如果未出现过,则选择新的目标节点进行url分发的请求,直到收到目标节点的回复,则通知备份节点将url添加到其url历史记录。当都没收到目标节点和备份节点的回复时,重新选择新的目标节点和备份节点进行处理。此处,为了増加系统的可靠性,可増加目标节点数或者是备份节点数,但因此也带来更多的通信量。图3是爬虫节点接收url的工作流程图。參考图3可知,爬虫节点在接收url吋,先判断该分发请求是否是url历史记录备份请求,如果是的话,再判断是url历史记录的查询请求,还是保存请求,如果是查询请求,则查询本地的url历史记录,如果未出现过,则添加到本地的url历史记录进行保存,否则,回复出现过该url,如果是保存请求,则把url添加到本地url历史记录。如果不是备份请求,则是分发url的请求,先根据url历史记录进行去重操作,然后把有效的url添加到接收队列,并添加url到历史记录中,最后回复成功添加该url。图4是爬虫节点进行负载均衡方法的工作流程图。负载均衡是指节点引入负载等级的概念,根据负载等级进行负载均衡的方法。节点将url接收队列分为工作区和超载块两部分,其中工作区大小由节点自身根据节点性能来确定,超载块大小统ー设定成固定值,超载块数量可根据需要进行动态创建。节点接收url的时候,将优先将url添加到工作区,当工作区已满,则将url添加到超载块。节点负载等级的判断就依据节点拥有的超载块数目,如果节点没有超载块,则根据工作区可容纳多少超载块来确定其轻载等级,即为负数的负载等级。由于修改了节点路由通信协议,増加了节点负载等级的信息,每个节点可以定时地更新路由表中邻居节点的负载情况,作为负载转移的依据。当节点路由表更新后,节点判断自身的负载等级,如果负载等级大于零,则节点为重载节点,根据负载均衡算法进行超载块的转移,如果负载等级小于零,则节点为轻载节点,不做处理。其中,负载均衡算法为先根据路由表的邻居节点距离信息划分节点区域,以新任务的加入不会导致该区域变成重载为依据,选择一个距离最近的节点区域;并以新任务的加入不会导致节点变成重载为依据,从该区域中选择ー个最近的轻载节点。參考图4可知,爬虫节点在更新路由表中的邻居节点的信息时,通过增加了节点负载等级信息,爬虫节点获知了邻居节点的负载情況。节点在更新完邻居节点的负载等级情况后,通过当前超载块的数量确定节点的重载等级。如果超载块为0,则不需要进行负载转移。如果当前超载块数量大于0,则计算当前工作区能容纳的超载块的数目,将超载块转移到当前工作区里进行处理,此时,如果剩余的超载块数量为0,则不需要进行负载转移,如果剩余的超载块数量大于0,则节点属于重载节点,将从邻居表中选择ー个轻载节点进行负载转移。选择轻载节点进行负载转移的方法如下依次选择距离从近到远的k桶,计算重载节点的加入是否会导致该k桶内的负载等级之和超过预设值,如果会则查找下个k桶。当查找到第i个k桶,i超过了设定的k桶等级level时,将停止查找,直接选择最近的轻载节点作为转移节点,转移超载块;当没查到设定的k桶等级level时,就在选中的k桶中找寻ー个轻载节点,使得轻载节点能与节点的重载等级匹配,即,两者的负载等级之和不超过预设值。其中,超载块的大小统ー设定成固定值,数量可根据需要动态创建,而工作区由节点根据自身的性能设定,一般设置成超载块大小的整数倍。图5是爬虫节点处理节点加入和退出的工作流程图。url历史记录的转移是指节点动态变化时,节点存储的url历史记录将转移给当前负责该url的节点。其中,当新节点加入覆盖网并完成路由表的更新时,新节点找到ー个离自身最接近的目标节点,向目标节点请求属于它的url历史记录。目标节点将自身存储的url历史记录中离新节点近的部分转移给新节点。当有节点正常退出覆盖网时,节点将查询到ー个离它最接近的目标节点,将自身的所有url历史记录全部转移给目标节点。

參考图5可知,爬虫节点加入覆盖网时,首先按照kademlia算法进行路由表的初始化,然后查找最接近节点的目标节点,向目标节点请求属于自己部分的url历史记录,目标节点收到请求后,将检测本地的url历史记录,找出属于请求节点的部分,转移给该请求节点。节点收到目标节点转移来的url历史记录后,将添加到本地的url历史记录。爬虫节点离开覆盖网时,首先查找最接近节点的目标节点,将本地的url历史记录全部转移给目标节点,当收到目标节点成功接收的回复后,则顺利退出覆盖网。本领域技术人员应该还可以进ー步意识到,结合本文中所公开的实施例描述的各示例的単元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互換性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。另外,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。以上所述的具体实施方式
,对本发明的目的、技术方案和有益效果进行了进ー步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式
而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内 。
权利要求
1.ー种基于结构化对等网络p2p的分布式爬虫集群中的节点,所述节点包括底层覆盖网,基于p2p组织方式,执行节点间分发统ー资源定位符url和接收url的协议;爬行模块,基于被分发的url,负责从互联网抓取对应的资源;控制中心,执行分发url和接收url的功能;其中,所述控制中心包括负载均衡模块,基于邻居节点的节点负载等级信息,确定任务转移;节点加入模块,查找接近节点的目标,并且请求属于自己部分的url历史记录;节点退出模块,查找接近节点的目标节点,将本地的url历史记录转移给目标节点。
2.如权利要求1所述的节点,其中,控制中心包括分发url模块,对待分发的url进行哈希,获得关键字;底层覆盖网基于关键字查询目标节点的信息。
3.如权利要求2所述的节点,其中,分发url模块对待分发的url进行二次哈希,获得关键字;底层覆盖网基于关键字查询备份节点的信息。
4.如权利要求2或3所述的节点,其中,分发url模块接收目标节点和/或备份节点的回复。
5.如权利要求1所述的节点,其中,控制中心包括接收url模块,接收其它节点分发的ur_L0
6.如权利要求1所述的节点,其中,控制中心包括urI历史记录转移模块,检测本地的url历史记录,找出属于请求节点的部分,转移给该请求节点。
7.如权利要求1所述的节点,其中,节点的任务队列包括工作区和超载块两部分,负载均衡模块根据当前超载块的数量,以及当前工作区可容纳的超载块数量确定自己的负载等级。
8.如权利要求1所述的节点,其中,负载均衡模块根据路由表的邻居节点距离信息划分节点区域,从节点区域中选择ー个距离近的节点。
9.如权利要求1所述的节点,其中,控制中心和/或爬行模块包括去重模块,根据url历史记录进行去重操作。
10.ー种分布式爬虫集群系统,包括如权利要求1-9之ー的节点。
全文摘要
本发明公开了一种基于结构化p2p的去中心化分布式爬虫节点和系统。基于结构化p2p的分布式爬虫集群中的节点包括底层覆盖网,基于p2p组织方式,执行节点间分发url和接收url的协议;爬行模块,基于被分发的url,负责从互联网抓取对应的资源;控制中心,执行分发url和接收url的功能。本发明实施例利用结构化p2p算法kademlia的特点,巧妙地解决了分布式爬虫系统中的去重和负载均衡的问题,实现了系统良好的可拓展性和容错性,可以为大规模分布式的爬虫系统提供通用的设计方法。
文档编号G06F17/30GK103067521SQ20131000648
公开日2013年4月24日 申请日期2013年1月8日 优先权日2013年1月8日
发明者陈君, 黄志敏, 吴京洪, 王玲芳 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1