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