基于Docker集群的分布式爬虫系统的设计与实现
发布时间:2022-01-13 12:15
如今的世界正处于互联网信息飞速增长的时代,常见的搜索渠道如百度等搜索引擎只能给我们提供一些杂乱无章的浅显信息,仅根据相关度等因子显示而未经过算法针对性的筛选。网络爬虫是网页信息抓取的一种常用手段,但常见的单机网络爬虫系统效率较低,虽然后续改进的利用VM做分布式系统的效率有所提升,但是离用户真正所期待的速度还有很大的差距。传统的爬虫系统对于URL去重和页面内容去重等功能需求不够友好,一些简易爬虫系统还会经常被网站的反爬虫系统限制。为了有针对性地快速获取有效信息,本文设计了一个基于Docker容器集群的分布式网络爬虫系统。此系统基于Scrapy-Redis框架,利用Redis存储爬取解析到的URL,利用MongoDB存储爬取解析到的网页内容,采用主从混合分布式系统部署。经实验证明,此系统能够有效地爬取用户需要的信息且速度较分布式VM系统有很大提升。本文所做的工作及创新点如下:(1)深入研究了BloomFilter去重算法,在原算法的基础上加以创新,提出了二阶段BloomFilter去重方案,使其具备更低的误判率。(2)改进了通用的爬虫框架,使其更好地支持分布式系统。增加了页面内容查重模块,...
【文章来源】:武汉邮电科学研究院湖北省
【文章页数】:69 页
【学位级别】:硕士
【部分图文】:
Docker总架构
武汉邮电科学研究院硕士学位论文13考虑整个系统的负载均衡的问题。不能让某个从节点压力过大,也不能让某个从节点一直空闲。主节点需要根据从节点反馈的任务执行情况来增减某一个从节点的负载压力,以发挥整个系统最大的效率。在各个从节点之间一般没有通信链路,各个从节点只会和主节点相互联系。因为后期URL的数量巨大,所以主节点的URL服务器对待爬取队列的维护和URL的分发将会承受极大压力。因此,主从分布式结构性能效率的提升关键在于主节点的URL服务器。主从分布式拓扑示意图如2-2所示。图2-2主从分布式2.2.2对等式架构在对等式架构中,各个节点之间不存在所谓的主从之分。每个节点都会有爬虫任务运行,各个节点各自维护自己的待爬取URL队列。因此这就存在数据同步的问题,多个节点可能会对同一网页多次爬取,这会大大的浪费节点的资源。既然各个节点不能各自为政,那么如何分工协作就是一个问题了。常见的有以下两种解决方式:哈希取模和一致性哈希。哈希取模是在爬取之前各节点会计算网站域名的哈希值,然后对节点个数取模,取模的结果就代表了该域名下应由哪个节点进行爬龋但该方法存在一些弊端,若有一个节点宕机了,取模数就会发生变化,以致于最终结果就会发生混乱。另外,不同网站的网页数据量也不一样,不同的节点爬取不同域名下的网站,这也可能会存在负载均衡的问题。一致性哈希算法直接将网站主域名进行哈希映射,结果范围是0-2^32之间的某个数。将该范围首尾相连成环,每个服务器就负责其中的一小段,如果某一个节点服务器宕机,就将该服务器的任务顺延至下一个节点服务器。对等式架构不存在独立的URL服务器,因此不会存在性能瓶颈的问题,但是整个InternetURL抓取服务器URL服务器抓取服务器抓取服务器URL
武汉邮电科学研究院硕士学位论文23(5)将该指纹对象与Redis中的set的指纹数据进行比对,若不重复,则存储Redis中的request队列中。(6)scheduler从Redis中的request队列中获取request,传给Scrapyengine。(7)Scrapyengine将request经过下载器中间件downloadmiddleware传至下载器downloader下载。(8)下载器downloader将下载的response对象返回给Scrapyengine。(9)Scrapyengine将response传给Spider。(10)然后再从第一步开始循环。详细框架及运行过程如图3-1所示。图3-1Scrapy-Redis架构图3.1.4分布式爬虫架构分布式爬虫系统采用主从结构,设置一个Master端和多个Slave端,Master端部署Redis数据库以存储和被调度待爬取请求,Slave端部署爬虫主程序爬取网页和解析提取数据,然后各个Slave端将解析的网页数据存储在同一个MongoDB数据库中。分布式爬虫架构如图3-2所示。
【参考文献】:
期刊论文
[1]基于Docker容器的Redis高可用实现方案[J]. 王佩剑. 信息通信. 2019(08)
[2]云服务下的最佳拍档——容器和微服务[J]. 金琦,邱元阳,刘宗凡,倪俊杰,杨磊. 中国信息技术教育. 2019(Z4)
[3]面向网络爬虫的高可用动态池系统设计与实现[J]. 王佳鹏,徐海蛟,许培宇,何佳蕾,林冠成. 福建电脑. 2019(06)
[4]基于Python的网络爬虫与反爬虫技术研究[J]. 李培. 计算机与数字工程. 2019(06)
[5]基于Spring Cloud和Docker的分布式微服务架构设计[J]. 黄强文,曾丹. 微型电脑应用. 2019(06)
[6]Docker技术在软件开发过程中的应用研究[J]. 庞宇. 信息技术. 2019(05)
[7]基于Python的新浪微博爬虫分析[J]. 杜晓旭,贾小云. 软件. 2019(04)
[8]一种基于Scrapy-Redis的分布式微博数据采集方案[J]. 邓万宇,刘光达,董莹莹. 信息技术. 2018(11)
[9]基于Docker Swarm集群的调度策略优化算法[J]. 刘梅,高岑,田月,王嵩,刘璐. 计算机系统应用. 2018(09)
[10]主动获取式的分布式网络爬虫集群方法研究[J]. 董禹龙,杨连贺,马欣. 计算机科学. 2018(S1)
硕士论文
[1]基于Scrapy框架的分布式爬虫系统设计与实现[D]. 汪兵.合肥工业大学 2019
[2]基于Kubernetes的调度方案研究与设计[D]. 李思达.东南大学 2018
[3]基于服务器集群的可伸缩架构设计与实现[D]. 缪海锋.浙江工业大学 2018
[4]基于Hadoop的分布式网络爬虫设计与实现[D]. 李优.西北大学 2018
[5]基于高实时分布式网络的爬虫软件设计与实现[D]. 张峰.浙江大学 2018
[6]面向模型的数据质量管理系统的设计与实现[D]. 勾德杰.大连理工大学 2018
[7]基于Hadoop的分布式网络爬虫研究[D]. 李松.电子科技大学 2016
本文编号:3586405
【文章来源】:武汉邮电科学研究院湖北省
【文章页数】:69 页
【学位级别】:硕士
【部分图文】:
Docker总架构
武汉邮电科学研究院硕士学位论文13考虑整个系统的负载均衡的问题。不能让某个从节点压力过大,也不能让某个从节点一直空闲。主节点需要根据从节点反馈的任务执行情况来增减某一个从节点的负载压力,以发挥整个系统最大的效率。在各个从节点之间一般没有通信链路,各个从节点只会和主节点相互联系。因为后期URL的数量巨大,所以主节点的URL服务器对待爬取队列的维护和URL的分发将会承受极大压力。因此,主从分布式结构性能效率的提升关键在于主节点的URL服务器。主从分布式拓扑示意图如2-2所示。图2-2主从分布式2.2.2对等式架构在对等式架构中,各个节点之间不存在所谓的主从之分。每个节点都会有爬虫任务运行,各个节点各自维护自己的待爬取URL队列。因此这就存在数据同步的问题,多个节点可能会对同一网页多次爬取,这会大大的浪费节点的资源。既然各个节点不能各自为政,那么如何分工协作就是一个问题了。常见的有以下两种解决方式:哈希取模和一致性哈希。哈希取模是在爬取之前各节点会计算网站域名的哈希值,然后对节点个数取模,取模的结果就代表了该域名下应由哪个节点进行爬龋但该方法存在一些弊端,若有一个节点宕机了,取模数就会发生变化,以致于最终结果就会发生混乱。另外,不同网站的网页数据量也不一样,不同的节点爬取不同域名下的网站,这也可能会存在负载均衡的问题。一致性哈希算法直接将网站主域名进行哈希映射,结果范围是0-2^32之间的某个数。将该范围首尾相连成环,每个服务器就负责其中的一小段,如果某一个节点服务器宕机,就将该服务器的任务顺延至下一个节点服务器。对等式架构不存在独立的URL服务器,因此不会存在性能瓶颈的问题,但是整个InternetURL抓取服务器URL服务器抓取服务器抓取服务器URL
武汉邮电科学研究院硕士学位论文23(5)将该指纹对象与Redis中的set的指纹数据进行比对,若不重复,则存储Redis中的request队列中。(6)scheduler从Redis中的request队列中获取request,传给Scrapyengine。(7)Scrapyengine将request经过下载器中间件downloadmiddleware传至下载器downloader下载。(8)下载器downloader将下载的response对象返回给Scrapyengine。(9)Scrapyengine将response传给Spider。(10)然后再从第一步开始循环。详细框架及运行过程如图3-1所示。图3-1Scrapy-Redis架构图3.1.4分布式爬虫架构分布式爬虫系统采用主从结构,设置一个Master端和多个Slave端,Master端部署Redis数据库以存储和被调度待爬取请求,Slave端部署爬虫主程序爬取网页和解析提取数据,然后各个Slave端将解析的网页数据存储在同一个MongoDB数据库中。分布式爬虫架构如图3-2所示。
【参考文献】:
期刊论文
[1]基于Docker容器的Redis高可用实现方案[J]. 王佩剑. 信息通信. 2019(08)
[2]云服务下的最佳拍档——容器和微服务[J]. 金琦,邱元阳,刘宗凡,倪俊杰,杨磊. 中国信息技术教育. 2019(Z4)
[3]面向网络爬虫的高可用动态池系统设计与实现[J]. 王佳鹏,徐海蛟,许培宇,何佳蕾,林冠成. 福建电脑. 2019(06)
[4]基于Python的网络爬虫与反爬虫技术研究[J]. 李培. 计算机与数字工程. 2019(06)
[5]基于Spring Cloud和Docker的分布式微服务架构设计[J]. 黄强文,曾丹. 微型电脑应用. 2019(06)
[6]Docker技术在软件开发过程中的应用研究[J]. 庞宇. 信息技术. 2019(05)
[7]基于Python的新浪微博爬虫分析[J]. 杜晓旭,贾小云. 软件. 2019(04)
[8]一种基于Scrapy-Redis的分布式微博数据采集方案[J]. 邓万宇,刘光达,董莹莹. 信息技术. 2018(11)
[9]基于Docker Swarm集群的调度策略优化算法[J]. 刘梅,高岑,田月,王嵩,刘璐. 计算机系统应用. 2018(09)
[10]主动获取式的分布式网络爬虫集群方法研究[J]. 董禹龙,杨连贺,马欣. 计算机科学. 2018(S1)
硕士论文
[1]基于Scrapy框架的分布式爬虫系统设计与实现[D]. 汪兵.合肥工业大学 2019
[2]基于Kubernetes的调度方案研究与设计[D]. 李思达.东南大学 2018
[3]基于服务器集群的可伸缩架构设计与实现[D]. 缪海锋.浙江工业大学 2018
[4]基于Hadoop的分布式网络爬虫设计与实现[D]. 李优.西北大学 2018
[5]基于高实时分布式网络的爬虫软件设计与实现[D]. 张峰.浙江大学 2018
[6]面向模型的数据质量管理系统的设计与实现[D]. 勾德杰.大连理工大学 2018
[7]基于Hadoop的分布式网络爬虫研究[D]. 李松.电子科技大学 2016
本文编号:3586405
本文链接:https://www.wllwen.com/guanlilunwen/ydhl/3586405.html