爬虫平台Crawlab核心原理--分布式架构

Crawlab是一款分布式爬虫管理平台,针对大规模爬虫需求,提供节点注册、监控、通信等功能。整体架构包括主节点、工作节点、MongoDB、Redis和前端客户端。节点通信采用Redis的PubSub进行即时通信,使用任务队列进行延迟通信。文章介绍了Crawlab如何通过Redis心跳监控实现节点管理,并探讨了其优缺点及分布式实践案例。
摘要由CSDN通过智能技术生成

背景

Crawlab自第一版发布已经几个月了,其中经历了好几次迭代:版本从v0.1到了v0.3.0;后端语言从Python到了Golang;从最初使用Celery作为任务调度引擎,到自己开发分布式任务调度引擎;从只能运行自定义爬虫到可以运行可配置爬虫(虽然还没迁移到最新版本);从手动部署爬虫到自动部署爬虫;从自己搭建环境到Docker部署;从手动执行任务到定时任务;等等(详情见CHANGELOG)。在使用者们的反馈下,Crawlab爬虫平台也逐渐变得稳定和实用,能够真正帮助到有爬虫管理需求的用户。如今在Github上有近1k的star,相关社区(微信群、微信公众号)也建立起来,四分之一的用户表示已经将Crawlab应用于企业爬虫管理。可以看出,Crawlab是受开发者们关注和喜欢的。

Github: https://github.com/tikazyq/crawlab

为什么需要爬虫管理平台

对于一般的爬虫爱好者来说,写一个单机爬虫脚本已经足够,而且Scrapy这样的优秀爬虫框架能够让开发者轻松调试、编写一个简单的爬虫,需要定时任务就直接上Crontab,分分钟搞定。然而,一般的企业对爬虫的要求相对较高,其中主要涉及一个问题,也就是规模(Scale)。当然,这里的规模是指大型规模。爬虫的规模分为两种:一种是爬虫需要抓取大量的数据(Volume),例如全网抓取淘宝的商品;另一种是爬虫需要涵盖大量的网站(Coverage),例如搜索引擎。

不同的规模需要有不同的架构策略(如下图):

  1. 当网站数量只有一个,抓取结果不多时,只需要单机即可,并不需要分布式爬虫;
  2. 但当需要抓取结果量级提升时,例如全网抓取淘宝,就需要用分布式爬虫了,这是因为单个机器的带宽和计算资源不足以做到全网抓取,而且为了应对反爬虫技术,还需要大量的代理IP;
  3. 同理,当需要抓取网站的数量增多时,例如你需要创建一个新闻搜索引擎,你同样需要多台机器来获取足够的带宽和计算资源;
  4. 对于同时要求Volume和Coverage的应用,不是一般的小企业或个人能做的,对不管是人力和机器的资源都非常高。

而爬虫管理平台就是针对情况(2)、(3)、(4)而存在的分布式管理平台,能够让用户轻松管理多个爬虫或多机运行的爬虫。

Crawlab从诞生之初就解决了分布式爬虫问题,最早采用了Celery作为分布式任务调度引擎,以Redis作为消息队列,HTTP请求作为节点通信媒介,简单地实现了分布式管理。但随着用户不断使用Crawlab,发现这样的方式并不是很方便,用户需要指定节点的IP地址和API端口,而且还不能指定节点执行任务。因为各种问题,在最新版本v0.3.0用Golang重构后端的时候,就将Celery弃用了,转而自己开发分布式节点的监控和通信应用,这样更加灵活和高效。本文是核心原理介绍,下面将着重介绍Crawlab的分布式架构原理(Golang

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值