您的位置:首页 > 其它

基于JMS的分布式爬虫系统的设计与实现

2019-07-18 22:30 253 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_38438768/article/details/96470672

摘要

随着互联网技术的飞速发展,网络信息以指数型趋势高速增长。对于一个要对数据进行统计分析的系统而言,搜集数据的过程是冗长枯燥的。基于这一现实,分布式爬虫系统获得了发展的契机。系统通过多台服务器的协调运行,成倍地提高了爬虫的效率。当然,分布式系统在获得效率提升的同时也大大增加了系统的复杂程度,开发人员需要考虑多方面因素以确保系统的正常运转。

本文对分布式爬虫系统的架构做了深入的讨论,给出了选择该架构的原因。项目使用了JMS消息队列技术在节点之间异步传递消息,起到应用解耦的效果。使用apache出品的activeMQ作为JMS服务器,能够跨语言跨平台传递消息,而且具有延迟接受的特性,一定程度上降低了网络延迟对系统性能的阻碍。中心节点的任务分配采用线程池技术,缓解了由于任务积累产生的效率瓶颈。

本文先介绍了项目研究背景,然后介绍了分布式爬虫相关知识和本项目所用技术,最后展示了项目的需求分析和体系结构。最终实现的分布式爬虫系统能够做到中心节点分配爬虫任务,任务节点执行爬虫程序并存储数据。同时系统针对一些分布式系统常用的性能需求做了设计,提高了系统的可扩展性和可靠性。

关键词:分布式系统,爬虫,JMS

ABSTRACT

With the rapidly development of Internettechnology, network information has grown at an exponential rate. For a system thatrequires statistical analysis of data, the process of collecting data istedious. Based on this reality, the distributed crawler system has gained anopportunity for development. The system multiplies the efficiency of crawler bycoordinating within several servers. However, the distributed system increasesthe complexity of the system while gaining efficiency. Developers need toconsider various factors to ensure the normal operation of the system.

This article makes an in-depth discussion of thearchitecture of the distributed crawler system and gives the reasons forchoosing certain architecture. The project uses JMS technology to delivermessages asynchronously between nodes, which has the effect of applyingdecoupling. The project also uses activeMQ from apache as the JMS server, whichhas the feature of cross-language and cross-platform messages delivery. Inaddition, activeMQ has the characteristics of delay acceptance. To some extent,it reduces the network delay on the performance of the system. The taskallocation of the central node adopts the thread pool technology, whichrelieves the efficiency bottleneck caused by task accumulation.

In this article, first I introduced the projectresearch background. Then I introduced the distributed crawler knowledge and technologyused in this project. Finally I demonstrated the project’s requirement analysisand architecture. The distributed crawler system this article implemented candistribute tasks by central node, and execute crawler programs and store databy task nodes. At the same time, the system is designed for the commonperformance requirements of distributed systems, which improves the system’sscalability and reliability.

KEY WORDS: distributedsystem, crawler, JMS

第一章 引言

1.1 研究背景

1.1.1 SourceForge.net

SourceForge.net是一个开源软件平台,用户不仅可以在网站上搜索到很多实用的软件,还能够给软件评分,向软件的开发者提需求建议等等。这些项目都有各自的适用领域、特征以及优缺点,用户可以通过搜索关键词,查看分类目录或者根据网站的推荐来找到自己的目标软件。

1.1.2 需求复用

对于一款产品,明确其需求是最关键的一步,可是客户的需求往往空乏而且充满不确定性,这给需求分析带来的巨大的挑战。不仅如此,客户与开发人员之间的沟通也存在隔阂。对于一项新的需求,开发人员需要从头开始调研、分析、建模,这会耗费很多精力。如果能够复用其他类似项目的需求,以他们开发人员的需求分析作为参考,就能在减少需求分析所需时间的同时还提高精确度。

常见的需求复用的原型有以下三种[1]:

旧的经验,没有任何文字记录,采用口耳相传的方法。

已有的需求规格书,重用已经有的文档和规格。

领域模型。

1.1.3 实验项目

本合作实验就是在对SourceForge.net做需求复用的基础上展开的,现阶段有两个目标:

根据网站上开源项目的描述、特征、所在目录和用户需求对项目精准定位。

采用领域工程的方法,对各个类别下的开源软件进行领域分析,建立特征模型。最终实现让软件开发人员直接根据需求和特征模型就能找到合适的开源软件进行需求复用。

我个人的项目是这个实验整体的第一步:获取数据。

1.1.4 爬虫简介

在如今信息爆炸的时代,获取有用信息对于互联网的使用者来说成为了越来越复杂的一件事。它们分布在不同的网页中,那么从这些网页上爬取信息就成为了一个重要的议题。网络爬虫是一项从网页中获取信息的技术。早期的爬虫程序运行在单台计算机上,爬虫程序设置url队列,先将要爬取的url加入队列,然后从队列中依次取出url,爬取相应网站的内容[2]。但是随着信息量的剧增和需要分析的数据的范围持续扩大,在单一计算机上运行的爬虫程序已经无法满足客户的需要,这时将爬虫程序与分布式系统结合以处理大量数据的思路就应运而生。

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。它的目标是利用软件使多台普通的机器链接在一起,协同解决大量数据的处理和检索问题[2]。其思想是是把需要大量计算的,单个计算机无法完成的任务分配给若干个较小的模块,让多台计算机分别处理,统一储存运算结果以便接下来分析数据。分布式系统关注系统的可扩展性、可用性、可靠性、负载均衡、一致性等。

对于分布式爬虫,简单来说就是让每台服务器各自爬取一部分数据,最后将结果汇总起来。它关注任务的分配和调度,要求在提高整个系统爬虫效率的同时保证系统的可扩展性、可靠性和负载均衡。当然,由于可以使用不同的分布式架构,不同的分布式爬虫系统之间也千差万别。

1.2 国内外研究现状

1.2.1 java爬虫框架

Nutch:专为搜索引擎设计,以ApacheHadoop数据结构为基础。它提供了可扩展的功能接口,使得其对各种网页内容的解析,各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展[3]。

Heritrix:可配置参数多,可定制性强,但是使用起来比较复杂。

1.2.2 python爬虫框架

scrapy:使用python开发的最流行的爬虫框架,使用布隆过滤器对url去重,底层使用异步框架twisted,支持高并发,很好地契合了搜索引擎的要求。

pyspider:与scrapy相比较轻量级,能够基于web查看运行状态,支持抓取javascript的页面。

1.3 本文的主要研究内容

在网络上可以找到一些开源的分布式爬虫框架,但是这些项目项目实现复杂,很多功能对于本项目来说是冗余的,所以我选择独立实现一个分布式爬虫系统。本文主要阐述了分布式爬虫系统不同维度下的分类、本项目采用的技术、需求分析、体系结构以及项目的背景与展望。该系统具有内部逻辑清晰、实现修改简单、使用过程友好等特点。

1.4 论文的主要工作和组织结构

论文主要分为六个章节,分别为:引言、分布式爬虫综述、技术基础、需求分析与概要设计、模块详细设计与实现、总结与展望。

第一章:引言。介绍项目的背景和研究内容。

第二章:分布式爬虫综述。介绍分布式爬虫系统的不同架构。

第三章:技术基础。介绍本项目所涉及的各项技术原理。

第四章:需求分析与概要设计。介绍项目的功能需求和性能需求,描述系统的结构、运行流程以及针对性能需求做出的设计。

第五章:模块详细设计与实现。介绍系统主要模块的类结构,展示关键代码和系统运行截图。

第六章:总结与展望。对项目进行总结,以及对项目未来的设想与展望。

源码下载地址:https://www.write-bug.com/article/1821.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐