网络爬虫中性能监测系统设计与实现

 2022-03-11 20:59:33

论文总字数:19422字

摘 要

在大型的分布式系统和集群系统中,监控都是必不可少的。随着互联网的发展,互联网上的信息越来越多,网络爬虫系统的规模也愈发庞大,对监控系统的需求和依赖也随之增加,好的监控系统不仅能帮助管理员掌握整个系统的性能,及时发现和解决系统的故障,还能帮助系统提高自身的性能。

基于现在互联网发展的要求,我们需要一个自动、高效、实时的监控系统。本文主要研究以Ganglia等分布式监控系统为范例的监控技术,并设计一个较为简单的监控系统,主要完成以下目标:

  1. 监控整个集群系统中的所有的节点,能为用户显示全部或者指定结点的状态和性能参数;
  2. 为用户提供友好的界面,能生成监控日志,自动发现异常并生成报告;
  3. 对集群中节点的操作接口,包括系统节点的增加、删、节点用途和状态的调整以及对节点负载的人工干预。

对于网络爬虫系统的监控,主要监控爬虫进程所占用的节点主机的系统资源,如CPU使用率、内存使用情况、网络使用情况等等。因此,网络爬虫的监控系统也主要监控节点主机的系统性能数值的变化。

关键词:监控系统、网络爬虫、CPU使用率、内存使用

Abstract

In the large-scale distributed system and cluster system, monitoring is essential. With the development of the Internet, the information on it has become a greater amount than before. The scale of the web crawler system is also increasingly large, and the demand for monitoring and control system will also increase. Good monitoring system can not only help the administrator to master the performance of the whole system, timely discover and solve the fault of system, can also help improve their performance.

Based on the demands of the development of the Internet, now we need an automatic, efficient and real-time monitoring system. This paper mainly studies monitoring technology of distributed monitoring system, using Ganglia as an example, and design a relatively simple monitoring system, mainly to complete the following goals:

  1. monitoring of all nodes in the cluster system, for users to display all or the specified node status and performance parameters;
  2. to provide users with a friendly interface, can generated monitor log, automatically discover abnormal and generate reports about them;
  3. provide interface to the operation of the cluster nodes, including add, delete, adjustment of system node use and state as well as the human intervention of the node load.

For web crawler system monitoring, we mainly monitor system resources of nodes host which crawler process occupies, such as CPU usage, memory usage, network usage, and so on. Therefore, the monitoring system of web crawler also mainly monitor the numerical changes of the performance of the system of the main host monitoring node.

Keywords: Monitoring and control system, web crawler, CPU usage, memory usage

目录

摘 要 2

Abstract 3

第一章 绪论 5

1.1 研究背景 5

1.2 研究现状 5

1.3研究意义 6

1.4 本文的章节安排 6

第二章 相关工作 7

2.1 分布式系统与集群监控 7

2.2 节点的节能部署算法 8

2.3 爬虫特性 9

2.4 开源集群监视系统ganglia 9

第三章 网络爬虫监控系统的设计 10

3.1 需求分析 10

3.2 框架设计 11

3.3 整体设计 12

3.4 各功能设计 12

3.4.1 CPU负载 12

3.4.2 内存使用 13

3.4.3 网络状态 13

3.4.4 进程监控 13

3.4.5 可视化窗口界面设计 13

第四章 实验结果分析 14

4.1 功能分析 14

4.1.1 CPU负载情况和内存情况 14

4.1.2 网络状态 15

4.1.3 进程监控 15

4.2 性能分析 17

第五章 工作总结和展望 17

5.1 工作总结 17

5.2 展望 17

致 谢 18

绪论

1.1 研究背景

随着互联网的发展和普及,搜索引擎已经成为大多数人上网浏览、寻找信息的首选途径。而伴随着搜索引擎一起被人们了解的还有网络爬虫。而随着现金互联网上信息的爆炸式增长,一个搜索引擎的好坏越来越依赖于它所拥有的爬虫所爬取的内容的数量和质量。除了爬虫自身的性能之外,随着网络越来越庞大,部署在网络中的爬虫数量也随之而急剧增加,大量的爬虫在提供数量可观的信息的同时,也需要一个有效、快捷、方便的系统去管理和监控。

网络爬虫,是种能够按照一定的预先设定好的规则,自动自发地从互联网中爬取所需信息的程序或是脚本,它们没日没夜地工作在互联网的每一个角落中,其所必须的消耗、所花费的代价以及整个爬虫系统的性能、工作状态都急需一个监控系统来实时地监测,同时,它还需要这个监控系统能将其性能直观、可视化地展现出来,为整个系统的调度、管理提供参考和依据。

最开始的网络爬虫只是为了整理网络信息,只能完成一些初步的抓取和整理工作,基本仅能提供简单的网页下载功能,然而随着信息时代的到来,在“Web2.0”技术的愈发成熟并被广泛运用的今天,互联网早已今非昔比,这种简单的抓取功能自然也早已无法满足人们的需求。网页更新速度越来越快,不同于以往的静态网页,动态网页技术使得网页的开发者、运营商能不断地,甚至是实时地更新网页内容,这就意味着爬虫对一个网页的爬取频率很可能会增加,它不得不经常性地去光顾这些动态网页才能保证网页库中的内容能跟上网页的更新,而不至于成为过时的。而这种更新不仅在网页表面的内容,很有可能还在网页的功能,此外,Web2.0技术之下,内容为王的时代已经一去不复返,如今人们更关心的是数据。大量数据的不断更新,对爬虫来说都是极大的挑战,要求爬虫必须具备优良的爬取策略来更为集中地获取有用的数据。以往的静态网页技术之下,网页内容大部分为静态文本,内容较为单一,现今的网页则综合了各项多媒体技术,如音频、视频、图片等等,这种内容的多样化也使得爬虫越来越困难,若非特意爬取多媒体资源,一股脑地将这些内容也下载下来将会占用极大的存储空间,显然是不合理的。

为了满足大规模数据采集的需求,不仅爬虫自身性能需要得到提高,更高效的部署以及调度也将被需要。一个不可避免的问题是,随着互联网的爆炸式增长,爬虫系统的规模也随着不断增大,爬虫数量的急剧扩大,使得管理和监控的难度也随之上升,若大型的网络爬虫缺少一个高效、自主的监控系统,一方面我们很难获得整个系统的运行状态,另一方面,若其中某个爬虫死掉,由于对单个爬虫我们缺少监控,在庞大的爬虫数量之中要去寻找这个损坏的分子无异于大海捞针。因此,监控是必不可少的。

1.2 研究现状

随着互联网上的信息的急剧增长,传统的通用型搜索引擎,如雅虎、谷歌等,局限性和不足也已经在逐渐显现。它们的目标大多数是尽可能地去覆盖整个网络,但在如今,有限的服务器资源和无限的互联网资源的矛盾已经无法回避,随着信息指数级的增长,为了满足人们越来越个性化的需求,在网络爬虫技术上几种新的研究方向也越来越受关注。

聚焦爬虫是一种面向主题的爬虫,或也可以称为主题爬虫,它是一种只选择性地爬行与主题相关的网页数据的爬虫,可以弥补甚至于解决通用爬虫在无法满足用户针对主题和领域的搜索需求上的不足,如今也已是爬虫技术研究的热点之一。传统的通用爬虫从最开始的网页的URL开始,在抓取网页的过程中,不断从当前爬取的页面中抽取新的URL放入等待爬取的队列,直到满足系统要求停止爬虫。在使用这种爬虫的基础上,很难去很好地满足不同领域、不同背景的用户的个性化需求和他们不同的检索目的,却往往会返回给用户许多用户不关心的网页和内容,极大地影响了用户的体验。聚焦爬虫是一种定向抓取网页资源的爬虫,是一个能自动下载网页的程序,根据已经规定的抓取目标,有选择地去访问网站和相关链接,其会在抓取过程中根据设计好的网页分析算法去过滤与主题无关的链接而选择有用的链接放入等待队列。然后再根据一定的策略从其中选择下一步该抓取哪个网页,之后在新的网页抓取过程中重复以上过程。相比于传统的通用爬虫,它的爬取范围更为集中,主要围绕主题进行爬取,因此还能节省一定的硬件资源和网络带宽,并能更快地更新数据,不仅能满足用户更加个性化的需求,还能一定程度上提高系统的性能和效率。

传统的爬虫在针对动态网页的爬取方面也有极大的不足,例如bbs系统和聊天室系统等,这些动态网页很难被搜索得到,还有一些页面则需要我们注册为会员才能得以看到网页内容,这些都使得传统的爬虫越来越难。针对现今发展迅速的动态网页技术,智能爬虫应运而生。这是一种具有一定的人工智能技术的爬虫,能够自动监测网页是否需要注册登录,并能够自动登录以抓取网页内容。并且这种爬虫在论坛、聊天室等系统中还能随时检查各类信息并从中过滤提取敏感信息,结合路由器和嗅探器还能直接定位出这些敏感信息的来源,这一技术可帮助建立网络舆情监控系统,防范不法分子利用网络来策划、组织犯罪。

在搜索引擎之中,抓取是消耗较大的部分,又是极为重要的部分,因此,爬虫抓取的效率、质量以及特性也显得尤为重要,而在提升爬虫自身特性的同时,一个有效的监控系统也显得尤为必要。通过实时地得到各个结点的CPU负载、内存情况、网络状态、进程信息等,能帮助故障检测系统及时发现故障并进行排除和隔离,还能帮助发现系统的性能瓶颈所在进而对整个系统加以优化,利用负载平衡策略等方法能有效地消除这些瓶颈。可以说,实时的监控对提高整个系统的性能、可靠性和可用性都是极为重要和必要的。

现有的监控技术和开源的监控工具也很多,监控技术从方向等不同的角度出发,也有很多不同的侧重方向,这里介绍三种关于其结构上的分类,分别为主动式、被动式和分布式监控,它们的不同主要是工作方式和整体系统框架结构上的区别,顾名思义,主动式采取的是监控代理端主动发送信息给监控主机,被动式则由监控主机来下达查询命令,分布式介于二者之间,它新增加了集群内部的一个组的概念,用局部代理主机来管理组,然后再上传至顶端的监控主机,这些方法会在下文的分布式系统和集群系统的监控中详细提及。

现有的大型企业级开源监控系统也有很多,如Nagios、Zabbix和Ganglia等,就开源中国上提供的开源监控系统就多达355款,涵盖多类系统,运用多种编程语言,其中跨平台的监控系统有127款,而大多数监控系统也选择用Web端作为监控管理终端,可见,远端操作也成为了一种共识和趋势,特别是对于一些全球性的大型系统来说。不仅如此,利用Web操作还能减少服务器端的限制,使得管理员在任何地方都能方便地进行管理和监控,这将是极大的便利。

1.3 研究意义

其实无论是哪种系统,监控和管理都是必不可少的。抛去爬虫系统不说,包括智能移动网络结点的部署等,都需要监控系统。一方面,监控系统最主要的自然是监控结点、服务器或主机等的工作状态等,但同时,其所提供的监测数据还能为系统的优化提供极大的帮助。拿智能移动网络中传感器的部署来说,为了关注结点在该区域部署的利益,相应的监测机制是必须的,不均匀的节点拓扑结构可能导致系统寿命短。每个节点有一个有限的能量来源。最小化平均移动距离和减少节点间剩余能量的差异对于延长系统寿命是至关重要的。由于部署的动态和分布式的特性,在注意区域的完全覆盖和相对公平地利用每个节点的能量会是一个具有挑战性的任务。

监控的意义和目标主要在两方面,一为管理,二为优化。首先,第一个要达到的目的就是能够监控系统的各项指标数据,从而来达到管理的目的,这一方面是能够实时地了解系统各节点的工作状态,从而对整个系统都能有把握,另一方面这种监控能帮助管理员及时发现系统的故障,从而能在故障发生的最短的时间内做出反应以减少对系统造成的损失。在此基础上,日常的监控数据被收集,通过这些数据我们能寻找系统运行的规律、系统性能的瓶颈所在,通过预测算法我们甚至能估计下一时刻系统的运行状态,从而能更好地规划、分配现有资源以及改变节点的部署策略、升级造成性能局限的部分来提升系统的性能。

越是庞大、精密的系统,其需要的维护和监管越加昂贵,监控不仅要考虑如何监控,监控系统本身也需要不断优化,以减少对被监控系统工作可能造成的影响,同时,一个好的监控系统还应是易操作的、人性化的,这又要求它能拥有图形化、可视化的能力。随着互联网的普及,远端操作越来越成为一个基础的需求,因此,我们的监控系统也被希望能在远端操作,虽然C/S的结构也能满足这一需求,但基于Web的显示和操作将会更为便捷和受欢迎。

1.4 本文的章节安排

本文共分为五章,各章节主要内容如下:

第一章为绪论,首先主要介绍了有关的研究背景,主要是现金互联网普及之下,搜索引擎的普及以及爬虫的热门。其次也简单介绍了如今的爬虫技术热点以及现在的一些问题。再次主要介绍了在帮助优化爬虫系统上,监控系统的必要性。

第二章为相关工作,主要介绍了现今的一些技术。首先介绍的分布式系统和集群系统的监控,分布式系统在时下的热门和在大数据背景下的运用以及普及。同时介绍了几种有关结点的节能部署算法。最后介绍了一种现在较为热门的开源监控系统Ganglia,其主要针对的是集群系统。

第三章为网络爬虫监控系统的设计。首先是需求分析和相应的框架设计。其次争对各个功能逐一进行设计和实现。

第四章为实验结果分析。首先为功能分析,根据各个子功能单独进行测试和分析,主要分为三至四个部分进行。然后是性能分析,性能分析主要注重分析CPU负载和内存。

第五章为工作总结和展望。工作总结主要争对该次设计实验中所学进行反思思考,以及回顾整个设计过程和思考所遇到的问题,然后在此基础上,来进一步展望有关工作。

相关工作

2.1 分布式系统与集群监控

设计和部署基础网络已经在过去的二十年成熟,在这类网络中,移动用户通过固定的基站接入网络。策划和部署这些网络是基于无线电传播和地形模型实现的,目标是无线电覆盖范围的最大化。

分布式系统的一大特征是计算和存储的分离。“大数据”一词现在已是越来越流行,而在大数据和大并发的情况之下,传统的集中式和单机系统中计算和存储的捆绑会带来极大的性能问题,而分布式的计算和存储虽说在实现上较为复杂,但为整个系统在性能等发面提供了不小的提升空间。分布式系统是一种建立于网络之上的软件系统,它能利用网络的特点,但由于软件的特性,它和网络又是截然不同的。

集群对我们来说相对陌生,它是近几年新兴起的一项技术,主要方向是高性能计算。在集群系统中,一组相互独立的计算机会通过高速网络相互连接从而组成一个单一的并行计算系统,该系统可以以单一系统的模式来管理。但由于集群系统中结点和其他一些部件的数目太过庞大,对系统中各个结点的监控和管理自然也是必不可少的。由于集群计算机系统内部的运算量极为庞大,在长时间的运行之下,数据传输中断和计算机故障等问题无法避免地会出现,这极大地影响了整个集群系统的效率,特别是一些重要的集群系统,如高铁运行指挥系统等,这种故障可说是灾难性的,所以集群系统的监控成了不得不面对的问题,我们需要监控集群之中的每一台计算机、每一个节点的状态,及时地发现问题,尽可能地减少故障发生的可能性,在故障发生之时也能第一时间寻找故障发生点并做出反应以降低其所带来的损失。

传统的网络管理技术产生在面向对象技术之前,因此,其中没有“对象”这个概念,其所面对的网络资源也远没有“对象”来的那么复杂。这种被管对象虽然有着大量的信息,但是却无法动作,它们的存在更类似于一种数据结构的概念,然而这一概念一步步发展之后逐渐为现在的分布式管理对象所吸收和运用。

监控从方向上来分,主要分为系统级别的监控和应用逻辑层监控,其中的应用逻辑监控因所监控的应用不同而不同,需要预留接口。从功能上来看,监控主要分为报警监控和性能监控,这里我们选择性能监控,主要观察变化趋势。监控的选择一般需要看服务器和节点的分布形式,对于分布式的系统,节点较多,对集中监控和处理的要求较高,所面临的最大的问题还是集中管理和可靠性。

对于节点数量较小的系统,可以通过人工查询的方式来监控,即由管理员在监控主机上输入命令来查询系统中各节点的运行状态。随着系统规模的扩大,检查的难度将急剧增加,这种方法也不得不被舍弃,我们需要能够高效、自动、实时的监控技术。

主动监控技术需要在每一个节点上部署一个监控代理,这个监控代理会主动地将节点的状态指标实时地发送给监控主机,再由监控主机接受这些指标并对其进行分析。这种监控方式适用于集群内节点数不多的情况,优点在于简便而易于部署,各节点直接向监控主机发送信息,使得状态信息较为完整,但是这种发送不受主机控制,一旦系统内节点数过多,很可能会造成监控主机的通信开销激增,甚至通信通道阻塞等情况。

被动式监控由两部分组成,分别为监控主控软件和监控守护软件,其中守护软件被安装在被监控的节点上,自动收集节点的状态信息而暂时不上传,在接收到监控主机的命令之后才开始上传,这样的方式能帮助监控主机很好地控制通信开销。

但是无论主动式的监控还是被动式的,在面对一个极大的系统时,它们的效率都会急剧下降,很不幸地,像网络爬虫这一类的,正是这种庞大的系统,此时,应当考虑分布式监控。分布式集群监控,先将集群内的计算机再分组,并为每组设置一个局部的监控代理,收集汇总组内计算机的信息后再上传给监控主机。这种监控技术的优势在于分组监控能将庞大的集群分解,从而能满足大型分布式集群系统的监控需求,但也因此,它的结构较为复杂,部署也较为困难,同时,由于监控主机和各个计算机直接并非直接通信而是还隔着个局部监控主机,监控响应的时间也会增加。

这些监控技术各有各的优势,但缺点也无法避免,选择之时重要的是明白系统的特性和需求,从而来选择最优的技术。

2.2 节点的节能部署算法

如前文所说,监控系统除了能帮助管理员及时发现和处理故障,还能帮助发现系统性能瓶颈所在和提升系统性能。对于大型的分布式系统,提升系统性能的方法很多,除了升级相应的硬件设备,通过调整节点的部署也能达到不错的效果。节点的部署过程中,重要的一项指标便是其覆盖率,以下列举几种部署算法,以求在保证覆盖率的同时尽可能地减少能耗。

  1. 分布式自传播算法(DSSA)

被称为DSSA的点对点算法是受分子平衡的启发,这种平衡最大限度地减少了分子电子能源和核间的排斥。每个粒子以分布式的方式决定自己的最低能量点,其和其他粒子间产生的间距基本相等。如果节点彼此太接近,来自额外增加的传感器的覆盖率并不高。相反的,如果传感器相隔太远,覆盖区域可能不重叠且可能导致网络分区。这两种情况类似于核间的斥力和分子间的吸引力。寻找在感应范围内的节点间的最佳距离类似于分子的平衡过程。

  1. 智能部署和聚类算法(IDCA)

网络场景中,采用聚类来利用本地信息和减少能源消耗。通过在部署过程中引入本地集群,可以改善传感器节点的耗能特性。每个节点根据它自身所处的环境来决定是选择集群模式还是点对点模式,例如局部密度以及在分布式和自适应方式下的剩余能量水平。我们称之为IDCA算法。

  1. 基于维诺图的部署算法(VDDA)

许多研究人员已经证明维诺图在各个领域的重要性和实用性,如数学、计算几何、生物学、化学、地理、通信、和编码理论等。在注意区域内给定一定数目的点作为生成器和网站,它们对应的维诺图按照最近邻原则换分这个区域。每个给定的点(网站或发电机)和由区域内最接近它的点组成的子区域关联。如果这些点(发电机或网站)假设为节点位置,由对应的维诺图定义的子区域被传感器覆盖,有一个可能的方案可以解决部署问题。

2.3 爬虫特性

网络爬虫的工作基本始于初始的种子URL,这是一部分通过算法精挑细选而出的URL,将这些URL放入待爬取队列后,从中按照预先设定的一定策略抓取URL,解析DNS从而获得主机IP地址,并将对应的网页内容下载下来存入库中,同时将这个URL放入已抓取队列之中。之后再对这个已抓取队列中的URL重新分析,找出其中的其他URL并重新放入待抓取队列之中。由此形成循环,这就是网络爬虫的基本工作原理。

一个优秀的爬虫首先要考虑的是其性能。这里的性能主要是指爬虫下载网页的抓取速度,常以爬虫每秒能够下载的网页数量作为性能指标来评估该爬虫的性能,单位时间内能够下载的网页数量越多,则爬虫的性能越高。要提高爬虫的性能,主要通过在设计爬虫时改进程序访问磁盘的操作方法及具体实现的数据结构等方法。比如对于待抓取URL队列和已抓取URL队列,因为URL数量非常大,不同实现方式性能表现迥异,所以高效的数据结构对于爬虫影响很大。

互联网上的网页数量十分庞大,爬虫要抓取的对象也是极其巨大,即便单个爬虫的性能再怎么优化,也无法将所有网页爬取下来,为了能够尽可能地缩短整个爬虫系统的爬取周期,爬虫系统应当具备很好的可扩展性,即能够便捷地增加抓取服务器和爬虫,从而减少总的爬取周期。目前实用的大型网络爬虫系统绝大部分是分布式运行的,通过增加多台服务器、为每台服务器部署多个爬虫以及让每个爬虫多线程进行等多种方式来增加并发性。

爬虫访问的网页不仅数量巨大,而且种类也极其繁多,同时还可能遇到各种各样非正常的情况,比如网页的编码不规范、被抓取服务器突然的死机甚至是陷阱等,如果爬虫不能对这些异常情况进行正确的处理,很可能会不定期地停止工作。从另一个角度来看,如果某个爬虫程序在抓取过程中死掉,爬虫系统应当能够再次启动爬虫,并恢复之前抓取的内容和数据结构,而不必让这个爬虫还要从头开始重新工作,这也是爬虫系统健壮性的一种体现。

综上所述,优秀的爬虫系统必须具备以上三点:高性能、可扩展性、健壮性。除此之外,我们在评估爬虫时,不能忽略的还有其对服务器所造成的负担。因此监控时,除了关注爬虫本身的采集信息外,还需监控服务器本身系统资源的变化,观察爬虫对服务器负载的影响。

本文测试监控的是一种基于Scrapy框架的爬虫,scrapy是目前非常热门的一种爬虫框架,是一个基于Python实现的开源协作网络爬虫框架。它使用快速、简单却易扩展的方式抽取网页中人们想要的数据。它把整个爬虫过程分为了多个独立的模块,并提供了多个基类可以供我们去自由扩展,让爬虫编写变得简单而有逻辑性。并且scrapy自带的多线程、异常处理、以及强大的自定义Settings也让整个数据抓取过程变得高效而稳定。在此基础上,整个爬虫使用Python编写,采用mongdb存储非结构化、文本数据。作为老牌的开源项目,scrapy的优点不仅仅是把内容结构化,还在于在能够较为全面地处理各个细节。Scrapy能从meta中自动提取涉及到的编码,智能编码技术能够保证极大的正确性,此外它还有灵活的pipeline以管道方式处理item,使用强大的xpath作为解析工具,有良好的可读性,能让维护成本成倍降低,还能处理http的各种细节。它使用twisted异步网络库来处理网络通讯,通过zope.interface来支持接口的开发方式,无论是使用者还是开发者,都能根据自身的实际需求自由开发spider模块以及各类中间件来实现定制化爬取等功能,这为二次开发提供了便利,也是其能长期受欢迎的原因之一。

网络爬虫在爬取的过程中会对服务器产生影响,一些智能搜索引擎的爬虫的爬取频率较为合理,对服务器造成的压力也较小,但一些糟糕的爬虫由于其对网页的爬取能力很差,经常并发很多个请求重复抓取,对服务器造成的压力十分巨大,一些小型网站的服务器的CPU负载在爬虫抓取前后会出现激增的现象。也是由于这点,我们选择监控爬虫爬取服务器的系统性能指标来作为爬虫的指标数据,一方面可以观察到爬虫进程本身所占的资源,也能观察到其对服务器造成的负载压力,另一方面这也是评估网络爬虫的一项标准。这属于整个集群系统的资源监控管理,而针对网络爬虫的工作特性,则需要针对采集目标的监控管理,在开发爬虫时,由于要对很多网站和链接进行抓取,并对抓取下来的网站进行内容的抽取,按照策略选择和抽取新的有用的URL。大量的链接下载和内容抽取如果没有监控,很难发现问题。特别是对于主题爬虫,需要抽取页面的具体内容,如果网站改版务必要能尽快的发现并修正。这是针对的网络爬虫的采集工作的监控。

所以针对网络爬虫的特性,我们的监控应当分为两大部分,一个为网络爬虫集群系统的系统资源监控管理模块,主要关注系统资源,如CPU负载、内存使用情况、磁盘使用情况等等;另一个为针对爬虫的采集任务监控管理模块,主要监控的是爬虫的采集信息,如采集时间、更新时间等等。本文主要选择前一部分集群系统的资源监控管理模块进行研究。

2.4 开源集群监视系统ganglia

由加州大学发起的Ganglia项目是一个针对高性能分布式系统,例如集群、网格、云计算等所设计的分布式监控系统。Ganglia 是 UC Berkeley 发起的一个开源监视项目,可跨平台,可扩展,通过Web界面来展示每个节点的状态,同时还有日志存储功能。Ganglia主要由C语言和PHP编写形成,但其允许使用者二次开发,通过安装其他语言的扩展包等途径,我们也能自己对其进行例如python等语言的扩展,除此之外,功能上的扩展也自然是支持的。

Ganglia作为一个分布式的监控工具,被设计来实现对数以千计的节点进行监测。其主要的核心代码有三部分,分别为gmond守护进程、gmetad节点程序和PHP Web前端。除此之外,还使用RRDtool作为存储和处理数据的主要工具。Ganglia采用的是一种层次结构,数据的精简表单在这个层次结构中传递,这一结构设计使得它可以实现良好的扩展。并且,gmond守护进程在获取计算机系统指标数据时带来的系统负载很少,它几乎可以等同于节点上的一段代码,尽可能减小对性能的影响。

Gmond是一个主要负责收集数据的守护进程,它被安装在每一个需要监测的主机上,在内部采用模块化设计,采用基于C语言编写的插件进行监控。同时,它还与同一集群内的其他主机共享数据,如果集群内某个gmond出错了,它也会知道。集群内的每个gmond已知同一集群内其他主机所收集的数据,采用多播的方式并默认向任意连接gmond端口的客户端提供整个集群状态的XML文件。modules目录下实现了一些监控模块和扩展支持模块。监控模块由cpu、disk、memory、 network、status、system等。扩展支持模块主要实现对扩展模块的支持,可以实现对由其他语言编写的监控模块的支持,可支持的扩展模块有perl、python、php。在编译阶段,可以通过对./configure的参数添加决定是否支持python、perl、php等扩展功能。

Ganglia运用的是集中式的轮询机制,前面已经说到,gmond会向任意连接其端口的客户端提供信息,那么真正对gmond进行轮询并将数据保存处理的是哪一部分呢?答案就是gmated。它被安装在负责收集信息的主节点上,当gmond采用多播的模式时,能从任意一个gmond处获得当前整个集群内的节点指标数据。对每一个簇,gmated都会新增一个进程来处理,当它从gmond处获得xml文件后,它会通过自身的data thread模块来解析xml文件,获取所有的节点指标数据,再重新生成新的xml文件返回上一级。在此过程中,gmated向RRDtool插入代码的地方共三处,分别为:解析节点主机数据的时候,将所获得指标插入RRD中;在解析完成后,向RRD插入簇的summary;在主进程中向RRD插入整个网格的summary。

Ganglia采用PHP编写的Web前端,命名为gweb。通过gmond和gmated收集到指标数据之后,ganglia再通过gweb来处理这些指标,使其以图形的形式展现,来达到更直观地展现整个系统的性能来方便管理员进行管理和评估系统性能。同时,为了满足远端监控的需要,这种可视化采用的是Web端的形式展现。它通过与轮询器创建的RRD数据库交互,无需用户设置、定义便可快捷迅速地访问任一主机的任意一种指标数据,并将这些集群指标图表组合成统一的图像,直接展现整个系统的性能,当然,它也为详细地展开某个指标做好了准备。

Ganglia是被设计来监控大型集群系统的,从它面世以来也获得了很多好评。纵观整个Ganglia,gmated独特和灵活的轮询机制使得这个系统的访问都是灵活多变的,而gmond能尽可能减少对节点的影响。对于整个系统来说,最限制Ganglia发挥的可能就是主节点了,用PC机来获取200个节点的数据这是根本就无法实现的事,所以我们必须使用不错的服务器来降低系统性能局限性。

网络爬虫监控系统的设计

3.1 需求分析

对于网络爬虫系统的监控,主要监控爬虫进程所占用的节点主机的系统资源,如CPU使用率、内存使用情况、网络使用情况等等。因此,网络爬虫的监控系统也主要监控节点主机的系统性能数值的变化。

从功能方面考虑,集群监控的目的是向用户反应集群系统的实时状态,为用户对集群的管理服务,其需求主要体现在工程应用方面,总结如下:

  1. 监控整个集群系统中的所有的节点,能为用户显示全部或者指定结点的状态和性能参数;
  2. 为用户提供友好的界面,能生成监控日志,自动发现异常并生成报告;
  3. 对集群中节点的操作接口,包括系统节点的增加、删、节点用途和状态的调整以及对节点负载的人工干预。

3.2 框架设计

考虑爬虫监控系统的要求,其模块结构如下图:

图3-1.爬虫监控管理模块结构图

其中,对集群系统的资源监控管理为主要目标,主要监控节点的系统资源,例如CPU占用、内存使用情况等,甚而是进程情况。预设指标阙值,可以做成报警系统,若超出指标阙值,发出警告,警告可选择邮件、短信等方式,若不超出则继续监控。此外监控管理运行节点人工干预,如增删节点以及调整节点功能等。

剩余内容已隐藏,请支付后下载全文,论文总字数:19422字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;