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

相關文章
相關標籤/搜索