1. 程式人生 > >開發一款開源爬蟲框架系列(二):設計爬蟲架構

開發一款開源爬蟲框架系列(二):設計爬蟲架構

  既然是構建分散式爬蟲架構,分散式說明爬蟲能在多臺機器同時執行,所以一定是多客戶端的,客戶端主要用於下載網頁,內容會放入佇列,多客戶端就有可能執行在不同的作業系統不同的語言環境,所以我們讓它暫時支援java和scala兩種依賴jvm的語言,不用區分平臺。提到客戶端也一定意味著有服務端的存在,服務端主要用於解析網頁,提取url,輸出內容到相應的儲存器,服務端和客戶端使用netty進行通訊,這是C/S模式。還有一種cluster模式,將爬蟲部署到叢集機器上,之間相互通訊協調,完成下載、分析、儲存等功能,這種模式下效能和擴充套件性都能得到提升。那麼問題來了,我們怎麼保活呢?很顯然是用心跳管理能完成這個功能。那麼我們怎麼保證可靠性呢?很顯然是用tcp通訊協議。那麼怎麼設計spider的客戶端呢?首先明確客戶端的功能邊界,客戶端首先必須接受服務端的指令,服務端讓爬哪些url就爬哪些url,所以url由服務端統一管理,服務端會從url佇列(以域名區分維護不同的url佇列)中取出url並封裝後傳輸給客戶端,客戶端接受到物件和會插入到佇列中,然後客戶端從佇列中取出url爬取網頁並解析(相當於scrapy中downloader和spider的功能集合),解析出的資訊封裝到物件中傳給服務端,服務端接收到這個物件後會傳入storechannel(可能是hadoop-hdfs,hbase,elasticsearch)。傳過來的url會經過驗證和去重後儲存到記憶體資料庫中,並將url根據host塞入佇列。