WebMagic以前具备基本的分布式功能,能够将一个Spider部署到多台机器上,并经过Redis来管理URL,达到多机合做抓取的目标。git
我在WebMagic-Avalon里计划完成一个管理后台,经过这个后台能够新建、管理和监控爬虫,具体的产品形态,见草图http://my.oschina.net/flashsword/blog/202889。github
这个系统涉及到一个Spider的动态建立和管理的问题。以前WebMagic是一个Java应用内部框架,并不具备动态建立的能力,也没有外部管理的能力。因而,在WebMagic-Avalon里,须要一个新的分布式方案。sql
这个系统共有4个角色:数据库
Scheduler是WebMagic的基本角色,它对须要抓取的URL进行管理,并进行去重等工做。Scheduler是集中式的,使用Redis来实现Scheduler是比较好的选择。多线程
Spider是WebMagic的基本角色,即对某一个站点的爬虫,它包括下载、解析以及持久化的工做。它会从Scheduler中拉到URL来处理,并添加新的URL到Scheduler。Spider是多线程的,单机的多个Spider可能会共用一个线程池。架构
Worker对应一台机器,它包含多个Spider,提供Http方式的API,供外部系统进行控制,从而在本地建立、管理Spider。Worker是无状态的,很是容易水平扩展。框架
Admin对应一台机器,它知道全部Worker的地址,提供Web页面,开发者能够在Admin的页面操做,操做后Admin发送Http请求到Worker来发布任务。分布式
Admin和Worker直接经过Http API通信,数据交换格式为JSON。ide
Admin能够直接发布爬虫需求,使用forger在客户端解析配置,并产生新爬虫。.net