网络爬虫***的负载均衡调节方法
技术领域
本发明涉及一种负载均衡调节方法,更具体的说,尤其涉及一种网络爬虫***的负载均衡调节方法。
背景技术
大数据时代的来临,网络上所承载的信息愈加丰富,其中既有指导行业发展走向的政策类网站,也有介绍相关领域最新科技动态及竞争对手产品信息的新闻类网站,还有反应用户对产品评价的博客、论坛、微博等社交网站。外网数据的有效接入和应用对政府、企事业单位等各级各类组织辅助决策、制定计划、管理成本、销售运营、服务售后等提供信息支持,为组织更好知己知彼掌控行业信息打开了一扇窗口。网络爬虫起始于种子链接穿行于Internet,将访问到的页面下载至本地,为网络数据采集提供技术支撑,为组织深度挖掘和分析网络数据奠定良好开端。
根据网络爬虫所部署的地理位置和网络拓扑结构不同,可以将网络爬虫分为部署于同一局域网的单一域网络爬虫(Single-domain Distributed crawler,又称局域网爬虫)和分散部署于广域网的多域网络爬虫(Multi-domain Distribute Crawler,又称广域网爬虫)。无论是单一域网爬虫还是广域网爬虫最基本的功能均是网页数据抓取,而其灵魂则是调度策略,调度策略不同则抓取方法不同。调度策略主要包括种子链接分配策略、负载均衡策略、网页查重策略等。
目前负载均衡策略主要分为静态负载均衡和动态负载均衡,其中静态负载均衡主要有轮询方式、比率方式、优先权方式等;而动态负载均衡在抓取过程中收集各爬虫服务器负载信息,根据负载情况迁移节点任务。无论何种均衡策略其任务迁移的对象均是网络链接,将高负荷爬虫的网络链接分配给低负荷爬虫,以均衡整个***的负载,爬取节点负载的均衡有利于网络数据的高效采集。
发明内容
不同于当前负载均衡策略,本发明提供了一种网络爬虫***的负载均衡调节方法。
本发明的网络爬虫***的负载均衡调节方法,网络爬虫***包括部署于同一组织局域网内的爬取设置客户端、爬取主控节点、多个爬取节点、URL索引服务器、数据中心和用户;组织局域网通过路由器接入运营商的方式访问Internet,以便爬取节点抓取目标数据源服务器中的数据;其特征在于:负载均衡调节方法通过以下步骤来实现:
a).确定数据采集方法,对于信息更新频率和数量较低的新闻类网站,采用爬虫直接抓取目标源数据,再使用关键词进行数据过滤;对于信息更新频率和数量极高的社交媒体类网站,利用目标数据源的站内检索结合关键词获取有效信息,再使用爬虫抓取检索结果;
b).分配任务,对于新闻类网站,爬取主控节点将同一域名的新闻类网站分配给一个爬取节点采集目标源数据;对于社交媒体类网站,将同一域名的社交媒体类网站分配到全部爬取节点,并为每个爬取节点分配互不相同的关键词;
设爬取节点数为N
cl,不同域名的新闻类网站数为N
web,不同域名的社交媒体类网站数为N
soc,社交媒体类网站的关键词数为N
kw;则为每个爬取节点平均分配
个不同域名的新闻类网站,将域名不同的社交媒体类网站分配到所有爬取节点,并为每个爬取节点平均分配
个不同的关键词;
c).数据采集和存储,爬取主控节点为每个爬取节点分配新闻类网站采集入口URL地址、社交媒体类采集入口URL地址以及关键词后,爬取节点利用网络爬虫访问新闻类网站和社交媒体类网站,各爬取节点采集目标数据源列表的网页数据,并将采集到的数据发送至数据中心;
d).获取采集时间表,各爬取节点在完成一轮采集后将所记录的新闻类网站的采集时间表和社交媒体类网站的采集时间表发送至爬取主控节点,爬取主控节点将其存储至本地的信息采集汇总时间表中;新闻类网站的采集时间表由各新闻类网站及采集网站所花费的时间cost、采集网站的完成时间round组成;社交媒体类网站的采集时间表由关键词、采集关键词所花费的时间以及采集关键词完成时间组成;
e).计算平均访问时间和权重,爬取主控节点以天为单位,在一天结束时分析当天的信息采集汇总时间表,按新闻类网站汇总当天多轮采集时间,计算当天每个新闻类网站的一轮抓取所需平均访问时间,按社交媒体类网站关键词汇总当天多轮采集时间,计算当天每个社交媒体类网站的每个关键词抓取所需平均访问时间;按照公式(1)计算各新闻类网站的权重;按照公式(2)计算各社交媒体类网站的各关键词的权重;
爬取主控节点维护着爬取节点任务分配表和爬取节点心跳表,新闻类网站的任务分配表中记录各个爬取节点所分配到的网站及各个网站的权重,新闻类网站
的权重
的计算公式为:
其中,
为抓取新闻类网站
所花费的时间,i∈[1,N
web],j∈[1,N
web];初始采集各新闻类网站花费时间未知时,认为所有新闻类网站采集时间相同,则各新闻类网站的初始权重为
社交媒体类网站的任务分配表中记录各个爬取节点在每个社交媒体类网站中所分配到的关键词以及不同社交媒体类网站不同关键词的权重,社交媒体类网站soc
i中关键词kw
j的权重
的计算公式为:
其中,
为在社交媒体类网站soc
i中采集关键词kw
k相关的信息所所花费的时间,i∈[1,N
soc],j、k∈[1,N
kw];初始在各社交媒体类网站中采集不同关键词相关信息花费时间未知时,认为各关键词相关信息的采集时间相同,则各关键词的初始权重为
各爬取节点的社交媒体类网站的关键词负载均衡调节通过步骤f)至步骤m)来实现;
f).判断耗时时间差,爬取主控节点计算出各爬取节点完成某社交媒体类网站的关键词一轮抓取所需平均访问时间,找出耗时最长和最短的爬取节点,计算两者耗时时间差,若两者时间差不大于用户预设调节时间差阈值,则维持当前社交媒体类网站关键词的分配状态,均衡负载结束;若两者时间差大于用户预设调节时间差阈值,则执行步骤g);
g).关键词排序,爬取主控节点按照权重降序排列该社交媒体类网站的关键词,执行步骤h);
h).重新分配关键词,爬取主控节点从排好序的关键词中,依次取出第1至第Ncl个关键词顺序分配给spider1、spider2、…、spiderNcl,然后依次取出第Ncl+1至第2Ncl个关键词逆序分配给spider1、spider2、…、spiderNcl,迭代该过程,直至分完该社交新闻类网站的所有关键词,将此关键词的分配记录为初始状态KW_Init_Assignment,spideri代表第i个爬取节点,i≤Ncl;执行步骤i);
i).迭代次数清零,抽取KW_Init_Assignment状态中所有爬取节点中所有关键词的权重,并计算爬取节点所分配关键词权重的方差Variance_Init,并将迭代次数Iteration清零,令Iteration=0;
j).迭代次数加1,令Iteration=Iteration+1,然后判断迭代次数Iteration是否小于指定迭代次数iteration_threshold,若是,则令本次迭代的方差Variance_MinIteration等于初始状态方差,Variance_MinIteration=Variance_Init,执行步骤k);否则,执行步骤m);
k).交换关键词,随机选择两个爬取节点,并在所选择的爬取节点中随机选择两个关键词进行交换,然后重新抽取所有爬取节点中所有关键词的权重,计算权重方差Variance_Random;执行步骤l);
l).比较权重方差的大小,比较Variance_Random与Variance_MinIteration的大小;
如果Variance_Random<Variance_MinIteration,则保持两个关键词的交换,将Variance_Random赋值给Variance_MinIteration,令Variance_MinIteration=Variance_Random,并将交换失败计数counter清零,令counter=0;Variance_MinIteration为所记录关键词权重方差的最小值,执行步骤k);
如果Variance_Random≥Variance_MinIteration,则撤销两个关键词的交换,并使交换失败计数counter加1,即令counter=counter+1;若交换失败计数counter的值小于累计次数阈值counter_threshold,转入步骤k);若counter≥counter_threshold,将此关键词的分配记录为第Iteration次迭代状态KW_IntermedIteration_Assignment,转入步骤j);
m).选取最优状态进行分配,比较多个KW_IntermedIteration_Assignment中的关键词权重方差Variance_MinIteration的值,将Variance_MinIteration值最小的KW_IntermedIteration_Assignment记录为关键词分配最终状态KW_Final_Assignment,按照此最终状态更新爬取节点任务分配表,并按此表重新为各个爬取节点分配任务。
本发明的网络爬虫***的负载均衡调节方法,各爬取节点的新闻类网站的负载均衡调节采用与步骤f)至步骤m)相同的方法,只需将步骤f)至步骤m)中社交媒体类网站的关键词替换为新闻类网站即可。
本发明的网络爬虫***的负载均衡调节方法,通过增加iteration_threshold和counter_threshold的大小可找出多个局部最优值,以尽可能获取全局最优值;理论上当iteration_threshold和counter_threshold趋于无穷时,方案可以收敛到全局最优值,在实际应用中可根据经验设置合理的阈值。
本发明的有益效果是:本发明的网络爬虫***的负载均衡调节方法,首先计算出新闻类网站和社交媒体类网站关键词的权重,然后通过比较访问时间耗时最长和最短的时间差,来判断是否需要进行负载均衡调节;当需要调节负载时,首先将按照权重排序的新闻类网站或社交媒体网站的关键词分配给各爬取节点,然后在权重方差减小的情况下交换所选取的任意两个爬取节点的新闻类网站或关键词,并记录交换后的状态,直至达到设定的交换次数;最后从记录的状态中选取具有最小权重方差的状态作为新闻类网站或社交媒体网站的关键词的最终分配状态,以实现爬取节点负载均衡调节的目的。
附图说明
图1为本发明中网络爬虫***的部署结构图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
如图1所示,给出了为本发明网络爬虫***的部署结构图,本发明的分布式网络爬虫部署于组织局域网内,通过路由器接入运营商的方式访问Internet。分布式网络爬虫***由爬取设置客户端、爬取主控节点、爬取节点、URL索引服务器、数据中心以及最终用户组成。
爬取设置客户端用于配置数据源、关键词、爬取策略等;爬取主控节点根据爬取设置客户端的配置为多个爬取节点分配任务,负责爬取节点的调度并均衡各爬取节点的负载;爬取节点中部署着网络爬虫***,爬取节点利用分布式爬虫访问Internet中的目标数据源服务器;URL索引服务器记录已爬取过的URL及爬取时间;数据中心用于存储抓取的网页数据;用户是网络数据的使用者,可通过多种方式与数据中心交互。
分布式网络爬虫***中的各设备均为逻辑划分,并非每个设备均需一个物理设备与其对应。其中爬取设置客户端可以是任意具有爬取设置权限的用户;在设备性能富有余地的情况下,URL索引服务器也可合并到数据中心,由数据中心承担已爬取URL的记录功能。
本发明的网络爬虫***的负载均衡调节方法通过以下步骤来实现:
a).确定数据采集方法,对于信息更新频率和数量较低的新闻类网站,采用爬虫直接抓取目标源数据,再使用关键词进行数据过滤;对于信息更新频率和数量极高的社交媒体类网站,利用目标数据源的站内检索结合关键词获取有效信息,再使用爬虫抓取检索结果;
组织关注的数据源既有指导行业发展走向的政策类网站,也有介绍相关领域最新科技动态及竞争对手产品信息的新闻类网站,以及反映用户对产品评价的博客、论坛、微博等社交网站。其中政策类网站和新闻类网站的信息一般是由网站编辑工作人员撰写录入,单个网站信息更新频率和数量较低,其日更新量一般不超过千条。而论坛、微博等社交媒体平台的信息由活跃于互联网和移动网的网民自由撰写发表,单个媒体平台信息更新频率和数量极高,日更新量超过亿条,任何第三方爬虫***都难以应对如此量级的数据采集。所幸组织所关注的重点是业务领域相关信息,这些信息只是各类数据源提供数据的子集。组织通常可采用构建本体知识库的方式,描述业务领域过滤无效信息。为保证业务领域描述的完整性,构建的本体知识库一般包含几百个概念和实例(关键词)。在明确目标数据源和关键词的基础上,组织获取有效信息的方法有两种。其一,使用爬虫直接抓取目标源数据,再使用关键词进行数据过滤;其二,利用目标数据源的站内检索结合关键词获取有效信息,再使用爬虫抓取检索结果。
假设本体知识库中的关键词数为Nkw,目标数据源中单位时间内信息的更新量为Nd,受限于新闻类网站页面承载的信息量,Nd将分布于新闻类网站的多个页面,一个页面承载的信息数为C。在新闻类网站信息总更新量Nd中,与组织业务领域相关的有效信息量为Ni。两种采集方法与服务器的交互次数可分成两部分,分别是为得到有效信息所在的位置访问页面的次数(访问目录页次数)和抓取信息的次数(访问内容页次数)。
若N
i均匀的分布于N
d中,则采用第一种方法获取全部N
i条有效信息需访问目标数据源
次,采用第二种方法获取全部N
i条有效信息需访问目标数据源
次。面对日信息更新量过亿的社交媒体类网站平台,则N
d>>C,N
d>>N
i且N
d>>N
kw,采用第一种方法访问目标数据源的次数远大于第二种方法,显然对于信息更新频率极高的社交媒体类网站平台更适合于采用第二种方法而非第一种方法。而面对日信息更新量少于千条的新闻类网站数据N
d并不会比N
i大一个数量级,且若新闻类网站是组织挑选的行业内新闻类网站则N
d≈N
i,此时影响两种方法访问服务器次数的关键在于N
kw。显然对于信息更新频率较低的新闻类网站,采用第一种方法采集数据,而后在本地使用关键词过滤信息的方式,可有效减少与服务器的交互次数,增强IP地址利用率。因此本发明采用第一种方法采集新闻类网站数据,而采用第二种方法采集社交媒体类网站数据。
b).分配任务,对于新闻类网站,爬取主控节点将同一域名的新闻类网站分配给一个爬取节点采集目标源数据;对于社交媒体类网站,将同一域名的社交媒体类网站分配到全部爬取节点,并为每个爬取节点分配互不相同的关键词;
设爬取节点数为N
cl,不同域名的新闻类网站数为N
web,不同域名的社交媒体类网站数为N
soc,社交媒体类网站的关键词数为N
kw;则为每个爬取节点平均分配
个不同域名的新闻类网站,将域名不同的社交媒体类网站分配到所有爬取节点,并为每个爬取节点平均分配
个不同的关键词;
由于爬取节点的分配策略一般是以域名(主机)为单位,将同一域名的数据交由一个爬取节点采集。本发明也采用此种策略采集新闻类网站数据,将同一域名的新闻类网站分配给一个爬取节点采集。如前所述采集社交媒体类网站平台,访问目标服务器的
次中,N
kw次访问并未采集信息,而是关键词检索引起的开销。受同一IP地址访问总量限制以及关键词的演进和变化,若仍将同一域名的社交媒体类网站也交由一个爬取节点采集,关键词的检索会造成极大的浪费有限的访问总量。针对社交媒体类网站数据采集,本发明将同一域名的社交媒体类网站分配到全部爬取节点,并为每个爬取节点分配互不相同的关键词。
如表1所示,给出了新闻类网站爬取任务分配表:
表1
表2给出了社交媒体类网站爬取任务分配表:
表2
表2的右续表:
c).数据采集和存储,爬取主控节点为每个爬取节点分配新闻类网站采集入口URL地址、社交媒体类采集入口URL地址以及关键词后,爬取节点利用网络爬虫访问新闻类网站和社交媒体类网站,各爬取节点采集目标数据源列表的网页数据,并将采集到的数据发送至数据中心;
表3
crawler |
state |
Spider1 |
*** |
Spider2 |
*** |
Spider3 |
*** |
…… |
…… |
SpiderN<sub>cl</sub> |
*** |
如表3所示,给出了爬取节点心跳表,爬取主控节点定时接收各个爬取节点的心跳状态,并记录在爬取节点心跳表中,从而了解爬取节点是否宕机以及是否有新的爬取节点加入,心跳表中的state记录着各个爬取节点向爬取主控节点最后返回心跳时间。当有节点宕机或新节点加入时,根据各个新闻类网站爬取时间、各个社交媒体类网站不同关键词相关信息爬取所花费的时间,以及所拥有的爬取节点数依据负载均衡原则重新分配任务。
爬取节点中部署着网络爬虫***,在接到爬取主控节点分配的采集任务后,利用网络爬虫访问Internet中新闻类网站和社交媒体类网站。
d).获取采集时间表,各爬取节点在完成一轮采集后将所记录的新闻类网站的采集时间表和社交媒体类网站的采集时间表发送至爬取主控节点,爬取主控节点将其存储至本地的信息采集汇总时间表中;新闻类网站的采集时间表由各新闻类网站及采集网站所花费的时间cost、采集网站的完成时间round组成;社交媒体类网站的采集时间表由关键词、采集关键词所花费的时间以及采集关键词完成时间组成;
新闻类网站采集时间和社交媒体类网站各关键词相关信息采集时间,记录到爬取节点采集时间表,其逻辑结构如表4和表5所示:
表4
表5
soc |
keyword |
cost |
round |
soc1 |
KW<sub>s1k1</sub> |
*** |
*** |
soc1 |
KW<sub>s1k2</sub> |
*** |
*** |
…… |
…… |
…… |
…… |
soc1 |
KW<sub>s1ka</sub> |
*** |
*** |
soc2 |
KW<sub>s1kb</sub> |
*** |
*** |
soc2 |
KW<sub>s1kb+1</sub> |
*** |
*** |
…… |
…… |
…… |
…… |
socN<sub>soc</sub> |
KW<sub>s1kc</sub> |
*** |
*** |
…… |
…… |
…… |
…… |
socN<sub>soc</sub> |
KW<sub>s1kd</sub> |
*** |
*** |
socN<sub>soc</sub> |
KW<sub>s1kd+1</sub> |
*** |
*** |
…… |
…… |
…… |
…… |
socN<sub>soc</sub> |
KW<sub>s1kNkw</sub> |
*** |
*** |
表4给出了爬取节点记录的新闻类网站的采集时间表,表5给出了所记录的社交媒体类网站的采集时间表,其中cost记录各新闻类网站和社交媒体类网站的各关键词采集所花费的时间,round记录本轮采集完成时间。
e).计算平均访问时间和权重,爬取主控节点以天为单位,在一天结束时分析当天的信息采集汇总时间表,按新闻类网站汇总当天多轮采集时间,计算当天每个新闻类网站的一轮抓取所需平均访问时间,按社交媒体类网站关键词汇总当天多轮采集时间,计算当天每个社交媒体类网站的每个关键词抓取所需平均访问时间;按照公式(1)计算各新闻类网站的权重;按照公式(2)计算各社交媒体类网站的各关键词的权重;
爬取主控节点维护着爬取节点任务分配表和爬取节点心跳表,新闻类网站的任务分配表中记录各个爬取节点所分配到的网站及各个网站的权重,新闻类网站web
i的权重
的计算公式为:
其中,
为抓取新闻类网站web
j所花费的时间,i∈[1,N
web],j∈[1,N
web];初始采集各新闻类网站花费时间未知时,认为所有新闻类网站采集时间相同,则各新闻类网站的初始权重为
社交媒体类网站的任务分配表中记录各个爬取节点在每个社交媒体类网站中所分配到的关键词以及不同社交媒体类网站不同关键词的权重,社交媒体类网站soc
i中关键词kw
j的权重
的计算公式为:
其中,
为在社交媒体类网站soc
i中采集关键词kw
k相关的信息所所花费的时间,i∈[1,N
soc],j、k∈[1,N
kw];初始在各社交媒体类网站中采集不同关键词相关信息花费时间未知时,认为各关键词相关信息的采集时间相同,则各关键词的初始权重为
各爬取节点的社交媒体类网站的关键词负载均衡调节通过步骤f)至步骤m)来实现;
f).判断耗时时间差,爬取主控节点计算出各爬取节点完成某社交媒体类网站的关键词一轮抓取所需平均访问时间,找出耗时最长和最短的爬取节点,计算两者耗时时间差,若两者时间差不大于用户预设调节时间差阈值,则维持当前社交媒体类网站关键词的分配状态,均衡负载结束;若两者时间差大于用户预设调节时间差阈值,则执行步骤g);
当爬取节点只应用于信息采集时,服务器负载即为两类数据源的采集工作。此时,当采集任务均衡时,可认为各节点的负载也较为均衡。步骤i-2)所计算的新闻类网站和社交媒体类网站关键词权重描述了采集任务的繁重程度,因此通过均匀地分配新闻类网站和社交媒体类网站关键词,从而使得各爬取节点的权重和相似,即可达到均衡爬取节点负载的目的。
g).关键词排序,爬取主控节点按照权重降序排列该社交媒体类网站的关键词,执行步骤h);
h).重新分配关键词,爬取主控节点从排好序的关键词中,依次取出第1至第Ncl个关键词顺序分配给spider1、spider2、…、spiderNcl,然后依次取出第Ncl+1至第2Ncl个关键词逆序分配给spider1、spider2、…、spiderNcl,迭代该过程,直至分完该社交新闻类网站的所有关键词,将此关键词的分配记录为初始状态KW_Init_Assignment,spideri代表第i个爬取节点,i≤Ncl;执行步骤i);
i).迭代次数清零,抽取KW_Init_Assignment状态中所有爬取节点中所有关键词的权重,并计算爬取节点所分配关键词权重的方差Variance_Init,并将迭代次数Iteration清零,令Iteration=0;
j).迭代次数加1,令Iteration=Iteration+1,然后判断迭代次数Iteration是否小于指定迭代次数iteration_threshold,若是,则令本次迭代的方差Variance_MinIteration等于初始状态方差,Variance_MinIteration=Variance_Init,执行步骤k);否则,执行步骤m);
k).交换关键词,随机选择两个爬取节点,并在所选择的爬取节点中随机选择两个关键词进行交换,然后重新抽取所有爬取节点中所有关键词的权重,计算权重方差Variance_Random;执行步骤l);
l).比较权重方差的大小,比较Variance_Random与Variance_MinIteration的大小;
如果Variance_Random<Variance_MinIteration,则保持两个关键词的交换,将Variance_Random赋值给Variance_MinIteration,令Variance_MinIteration=Variance_Random,并将交换失败计数counter清零,令counter=0;Variance_MinIteration为所记录关键词权重方差的最小值,执行步骤k);
如果Variance_Random≥Variance_MinIteration,则撤销两个关键词的交换,并使交换失败计数counter加1,即令counter=counter+1;若交换失败计数counter的值小于累计次数阈值counter_threshold,转入步骤k);若counter≥counter_threshold,将此关键词的分配记录为第Iteration次迭代状态KW_IntermedIteration_Assignment,转入步骤j);
m).选取最优状态进行分配,比较多个KW_IntermedIteration_Assignment中的关键词权重方差Variance_MinIteration的值,将Variance_MinIteration值最小的KW_IntermedIteration_Assignment记录为关键词分配最终状态KW_Final_Assignment,按照此最终状态更新爬取节点任务分配表,并按此表重新为各个爬取节点分配任务。
各爬取节点的新闻类网站的负载均衡调节采用与步骤f)至步骤m)相同的方法,只需将步骤f)至步骤m)中社交媒体类网站的关键词替换为新闻类网站即可。
通过增加iteration_threshold和counter_threshold的大小可找出多个局部最优值,以尽可能获取全局最优值;理论上当iteration_threshold和counter_threshold趋于无穷时,方案可以收敛到全局最优值,在实际应用中可根据经验设置合理的阈值。