WebMagic-Avalon之分布式实现方案

浪子不回头ぞ 提交于 2019-12-19 17:53:29

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

WebMagic之前具有基本的分布式功能,可以将一个Spider部署到多台机器上,并通过Redis来管理URL,达到多机合作抓取的目标。

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

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

总体架构:

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。

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!