Crawlab-一个基于Golang的分布式爬虫管理平台

基于Golang的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP等多种编程语言以及多种爬虫框架。

安装

三种方式:

  1. Docker(推荐)
  2. 直接部署(了解内核)
  3. Kubernetes (多节点部署)

要求(Docker)

  • Docker 18.03+
  • Redis 5.x+
  • MongoDB 3.6+
  • Docker Compose 1.24+ (可选,但推荐)

要求(直接部署)

  • Go 1.12+
  • Node 8.12+
  • Redis 5.x+
  • MongoDB 3.6+

快速开始

请打开命令行并执行下列命令。请保证您已经提前安装了 docker-compose

git clone https://github.com/crawlab-team/crawlab
cd crawlab
docker-compose up -d

接下来,您可以看看 docker-compose.yml (包含详细配置参数),以及参考 文档 来查看更多信息。

运行

Docker

请用docker-compose来一键启动,甚至不用配置MongoDB和Redis数据库,当然我们推荐这样做。在当前目录中创建docker-compose.yml文件,输入以下内容。

version: '3.3'
services:
  master: 
    image: tikazyq/crawlab:latest
    container_name: master
    environment:
      CRAWLAB_SERVER_MASTER: "Y"
      CRAWLAB_MONGO_HOST: "mongo"
      CRAWLAB_REDIS_ADDRESS: "redis"
    ports:    
      - "8080:8080"
    depends_on:
      - mongo
      - redis
  mongo:
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
  redis:
    image: redis:latest
    restart: always
    ports:
      - "6379:6379"

然后执行以下命令,Crawlab主节点+MongoDB+Redis就启动了。打开http://localhost:8080就能看到界面。

docker-compose up

Docker部署的详情,请见相关文档

直接部署

请参考相关文档

爬虫文件编辑

任务日志

定时任务

语言安装

依赖安装

消息通知

架构

Crawlab的架构包括了一个主节点(Master Node)和多个工作节点(Worker Node),以及负责通信和数据储存的Redis和MongoDB数据库。

前端应用向主节点请求数据,主节点通过MongoDB和Redis来执行任务派发调度以及部署,工作节点收到任务之后,开始执行爬虫任务,并将任务结果储存到MongoDB。架构相对于v0.3.0之前的Celery版本有所精简,去除了不必要的节点监控模块Flower,节点监控主要由Redis完成。

主节点

主节点是整个Crawlab架构的核心,属于Crawlab的中控系统。

主节点主要负责以下功能:

  1. 爬虫任务调度
  2. 工作节点管理和通信
  3. 爬虫部署
  4. 前端以及API服务
  5. 执行任务(可以将主节点当成工作节点)

主节点负责与前端应用进行通信,并通过Redis将爬虫任务派发给工作节点。同时,主节点会同步(部署)爬虫给工作节点,通过Redis和MongoDB的GridFS。

工作节点

工作节点的主要功能是执行爬虫任务和储存抓取数据与日志,并且通过Redis的PubSub跟主节点通信。通过增加工作节点数量,Crawlab可以做到横向扩展,不同的爬虫任务可以分配到不同的节点上执行。

MongoDB

MongoDB是Crawlab的运行数据库,储存有节点、爬虫、任务、定时任务等数据,另外GridFS文件储存方式是主节点储存爬虫文件并同步到工作节点的中间媒介。

Redis

Redis是非常受欢迎的Key-Value数据库,在Crawlab中主要实现节点间数据通信的功能。例如,节点会将自己信息通过HSET储存在Redis的nodes哈希列表中,主节点根据哈希列表来判断在线节点。

前端

前端是一个基于Vue-Element-Admin的单页应用。其中重用了很多Element-UI的控件来支持相应的展示。


项目来源github,如有侵权,请联系博主,谢谢观看

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注