一种网络爬虫的域名解析缓冲方法技术

技术编号:32579416 阅读:12 留言:0更新日期:2022-03-09 17:09
本发明专利技术提供一种网络爬虫的域名解析缓冲方法,属于数据处理技术领域,本发明专利技术在深入分析操作系统和JVM的域名解析工作机制基础上,结合分布式爬虫的并行化与任务多节点均匀化等特点,采用正向和负向双缓存方式,为2个缓存分别设计采用了特定的数据结构和过期策略。实验表明,该方法可以有效提升域名解析性能,同时降低各爬虫节点的内存占用和域名解析请求对网络带宽的影响,提升了分布式爬虫的整体性能。能。能。

【技术实现步骤摘要】
一种网络爬虫的域名解析缓冲方法


[0001]本专利技术涉及数据处理
,尤其涉及一种网络爬虫的域名解析缓冲方法。

技术介绍

[0002]搜索引擎是目前从互联网获取信息的最有效方式。分布式爬虫作为搜索引擎的基础,得到了广泛的研究与应用,其通常由URL分析器、DNS缓存、速率控制等多个组件构成。爬虫在抓取网页时,需要使用DNS(DomainNameService)将目标主机的域名转换为IP地址。研究表明,这一环节是爬虫的主要性能瓶颈之一。
[0003]国内外对单机爬虫的策略、性能等各方面已进行了深入研究,对分布式爬虫的研究主要集中在任务调度、资源分配等爬虫策略方面,对分布式爬虫性能问题的研究尚不多见。
[0004]JVM的域名缓存方法
[0005]1缓存策略
[0006]编写网络应用程序时,通常使用InetAddress类来完成此功能,此时,DNS缓存由JVM的缓存策略控制,当使用InetAddress类第1次成功解析某个域名(如www.google.com)后,JVM就会将这个域名和它从DNS上获得的信息(IP地址和TTL等)都保存在缓存中,当下一次InetAddress类再解析这个域名时,就直接从缓存里获得所需的信息,而无需再访问DNS服务器;对解析错误的域名,InetAddress提供了负向缓存(NegativeCache)机制,但默认为不缓存。使用InetAddress域名解析后,操作系统也会将此记录进行缓存,JVM下次调用域名解析时,会利用操作系统的缓存。操作系统的缓存时间会参考DNS服务器响应的TTL值,但是不完全等于TTL值,Windows系统可以通过注册表设置DNS缓存条目TTL最大值,默认为1d,域名解析的全过程如图一所示。但这种方式有2个问题,首先,分布式爬虫为了避免IP被封的问题,会尽量将对同一域名的抓取任务均匀分布在多个爬虫节点,这就使得即使是相同的域名,由于JVM和操作系统的缓存不能跨节点共享,每个爬虫节点都至少需要一次向网络DNS服务器请求解析;其次,为了避免大站积压问题,分布式爬虫调度器通常会以一级或二级域名为单位对抓取任务做公平调度,这就使得大站的抓取需要较长的时间,而DNS服务器响应的域名TTL值通常则较小,从而导致操作系统和JVM的域名缓存过期后删除,爬虫则需多次请求DNS服务器。
[0007]2缓存的数据结构
[0008]JVM的InetAddress内部使用LinkedHashMap<String,CacheEntry>作为正向(Positive)和负向(Negative)缓存的数据结构,其中键为字符串类型的域名,值对象CacheEntry中主要包括IP地址和TTL。这种数据结构有2个问题,首先,空间效率较低,分布式爬虫需要处理大量的域名,如果使用ⅣM的缓存数据结构来存储这些一级域名,仅TLD的冗余存储就需要5
×3×
109=1.5GB;考虑到一个网站通常有多个子域名,此时,TLD的冗余则需要更多的空间(假设每个网站平均有3个子域名,则TLD冗余需要接近4.5GB的内存空间)。其次,该结构数据只在同一个JVM内共享,不符合分布式爬虫多节点共享和分布式并行
的应用特点,且该数据结构的同时访问需要采用同步锁阻塞的方式,不能很好地支持高并发,也会影响爬虫性能。

技术实现思路

[0009]为了解决以上技术问题,本专利技术提供了一种网络爬虫的域名解析缓冲方法。提升域名解析性能,同时降低各爬虫节点的内存占用和域名解析请求对网络带宽的影响。
[0010]本专利技术的技术方案是:
[0011]一种网络爬虫的域名解析缓冲方法,
[0012]在深入分析操作系统和JVM的域名解析工作机制基础上,结合分布式爬虫的并行化与任务多节点均匀化的特点,采用正向和负向双缓存方式,为2个缓存分别设计采用了数据结构和过期策略。
[0013]进一步的,
[0014]正向缓存采用紧凑的二进制键值元组BCTuple(BinaryCompactTuple)来存储成功解析的域名。负向缓存采用数据结构来存储未成功解析的域名。
[0015]再进一步的,
[0016]正向缓存采用数据结构BCTuple(BinaryCompactTuple){Hash一12(TLD)+Murmur3—32((SLD)+Murmur332(全域名一SLD.TLD)),IP,1TrL}来存储解析成功的域名,其中,IP使用整数形式存储,IPV4地址为32位,IPV6地址为128位;rITllL以分钟为单位,采用16位的短整数形式存储。
[0017]Hash一12函数预先将所有TLD按顺序编码为12位的二进制值(支持212=4096个TLD)并保存到全局的哈希表中,之后每次从该哈希表中获取对应的二进制值;使用Murmur3—32Hash算法对一级域名计算哈希值。使用Murmur3—32Hash算法对域名的除TLD和一级域名之外的其他部分计算哈希值,值为32位。
[0018]为了解决DNS服务器响应的域名TTL值较小导致的重复DNS请求问题,采取如下方法:设定一个最小TTL阈值,在首次将一域名加入缓存时,首先比较DNS服务器响应的TTL,如果低于阈值,则使用阈值作为该域名的TTL,否则,使用服务器响应的TTL值。
[0019]再进一步的,
[0020]负向缓存的数据结构由一个二进制向量和随机映射函数构成,可以用于检索一个元素是否在一个集合中,根据设定的统一失效时间TTL,直接清空缓存,避免数据结构无法删除元素的问题,也降低网络和域名服务器故障导致的域名解析失败对后续抓取的影响;与正向缓存相结合。
[0021]本专利技术的有益效果是
[0022]本方法可以有效提升域名解析性能,同时降低各爬虫节点的内存占用和域名解析请求对网络带宽的影响,从而提升了分布式爬虫的整体性能。
附图说明
[0023]图1是本专利技术的域名解析的过程示意图;
[0024]图2是紧凑型键值的结构示意图。
具体实施方式
[0025]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例,基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0026]本专利技术在深入分析操作系统和JVM的DNS工作机制基础上,针对分布式爬虫的并行化与任务多节点均匀化等特点,设计实现了高效的DNS缓存机制DQCache(DistributedQuickCache),采用正向和负向双缓存方式,正向缓存采用紧凑的二进制键值元组BCTuple(BinaryCompactTuple)来存储成功解析的域名,负向缓存采用一种新的数据结构来存储未成功解析的域名,并针对爬虫特性,对这2个缓存分别给出了过期策略。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种网络爬虫的域名解析缓冲方法,其特征在于,在深入分析操作系统和JVM的域名解析工作机制基础上,结合分布式爬虫的并行化与任务多节点均匀化的特点,采用正向和负向双缓存方式,为2个缓存分别设计采用了数据结构和过期策略。2.根据权利要求1所述的方法,其特征在于,正向缓存采用紧凑的二进制键值元组BCTuple(BinaryCompactTuple)来存储成功解析的域名。3.根据权利要求1所述的方法,其特征在于,负向缓存采用数据结构来存储未成功解析的域名。4.根据权利要求2所述的方法,其特征在于,正向缓存采用数据结构BCTuple(BinaryCompactTuple){Hash一12(TLD)+Murmur3—32((SLD)+Murmur332(全域名一SLD.TLD)),IP,1TrL}来存储解析成功的域名,其中,IP使用整数形式存储,IPV4地址为32位,IPV6地址为128位;rITllL以分钟为单位,采用16位的短整数形式存储。5.根据权利要求4所述的方法,其特征在于,Hash一12函数预先将所有...

【专利技术属性】
技术研发人员:李涛孙思清孙兴艳
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1