WebMagic之前具有基本的分布式功能,可以将一个Spider部署到多台机器上,并通过Redis来管理URL,达到多机合作抓取的目标。
我在WebMagic-Avalon里计划完成一个管理后台,通过这个后台可以新建、管理和监控爬虫,具体的产品形态,见草图http://my.oschina.net/flashsword/blog/202889。
这个系统涉及到一个Spider的动态创建和管理的问题。之前WebMagic是一个Java应用内部框架,并不具有动态创建的能力,也没有外部管理的能力。于是,在WebMagic-Avalon里,需要一个新的分布式方案。
总体架构:
这个系统共有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。
- Admin可以直接发布爬虫需求,使用forger在客户端解析配置,并产生新爬虫。