WebMagic-Avalon之分布式实现方案

WebMagic以前具备基本的分布式功能,能够将一个Spider部署到多台机器上,并经过Redis来管理URL,达到多机合做抓取的目标。git

我在WebMagic-Avalon里计划完成一个管理后台,经过这个后台能够新建、管理和监控爬虫,具体的产品形态,见草图http://my.oschina.net/flashsword/blog/202889github

这个系统涉及到一个Spider的动态建立和管理的问题。以前WebMagic是一个Java应用内部框架,并不具备动态建立的能力,也没有外部管理的能力。因而,在WebMagic-Avalon里,须要一个新的分布式方案。sql

整体架构:

WebMagic-distributed-architecture

这个系统共有4个角色:数据库

Scheduler:

Scheduler是WebMagic的基本角色,它对须要抓取的URL进行管理,并进行去重等工做。Scheduler是集中式的,使用Redis来实现Scheduler是比较好的选择。多线程

Spider:

Spider是WebMagic的基本角色,即对某一个站点的爬虫,它包括下载、解析以及持久化的工做。它会从Scheduler中拉到URL来处理,并添加新的URL到Scheduler。Spider是多线程的,单机的多个Spider可能会共用一个线程池。架构

Worker:

Worker对应一台机器,它包含多个Spider,提供Http方式的API,供外部系统进行控制,从而在本地建立、管理Spider。Worker是无状态的,很是容易水平扩展。框架

Admin:

Admin对应一台机器,它知道全部Worker的地址,提供Web页面,开发者能够在Admin的页面操做,操做后Admin发送Http请求到Worker来发布任务。分布式

其余技术选型:

1. 容器:

  • Worker和Admin都是war包,能够部署到Web容器中,同时也内置Jetty,支持直接启动。
  • 考虑到维护性问题,Web框架仍是使用较为主流的Spring MVC。

2. 存储:

  • 系统内部的信息存储使用Mysql,可能后期会提供一个本地化的数据库如H2,以作到开箱即用。
  • URL管理基于Redis,虽然数据规模小的时候,Mysql也能胜任,可是Redis仍然最理想的选择。
  • 抓取结果的存储由用户自定义,默认支持Mysql和文件。

3. 通信:

  • Admin和Worker直接经过Http API通信,数据交换格式为JSON。ide

  • Admin能够直接发布爬虫需求,使用forger在客户端解析配置,并产生新爬虫。.net

相关文章
相关标签/搜索