網絡爬蟲架構在Nutch+Hadoop之上,是一個典型的分佈式離線批量處理架構,有很是優異的吞吐量和抓取性能並提供了大量的配置定製選項。因爲網絡爬蟲只負責網絡資源的抓取,因此,須要一個分佈式搜索引擎,用來對網絡爬蟲抓取到的網絡資源進行實時的索引和搜索。數據庫
搜 索引擎架構在ElasticSearch之上,是一個典型的分佈式在線實時交互查詢架構,無單點故障,高伸縮、高可用。對大量信息的索引與搜索均可以在近 乎實時的狀況下完成,可以快速實時搜索數十億的文件以及PB級的數據,同時提供了全方面的選項,能夠對該引擎的幾乎每一個方面進行定製。支持RESTful 的API,可使用JSON經過HTTP調用它的各類功能,包括搜索、分析與監控。此外,還爲Java、PHP、Perl、Python以及Ruby等各 種語言提供了原生的客戶端類庫。網絡
網絡爬蟲經過將抓取到的數據進行結構化提取以後提交給搜索引擎進行索引,以供查詢分析使用。因爲搜索引擎的設計目標在於近乎實時的複雜的交互式查詢,因此搜索引擎並不保存索引網頁的原始內容,所以,須要一個近乎實時的分佈式數據庫來存儲網頁的原始內容。架構
分佈式數據庫架構在Hbase+Hadoop之上,是一個典型的分佈式在線實時隨機讀寫架構。極強的水平伸縮性,支持數十億的行和數百萬的列,可以對網絡爬蟲提交的數據進行實時寫入,並能配合搜索引擎,根據搜索結果實時獲取數據。分佈式
網 絡爬蟲、分佈式數據庫、搜索引擎均運行在普通商業硬件構成的集羣上。集羣採用分佈式架構,能擴展到成千上萬臺機器,具備容錯機制,部分機器節點發生故障不 會形成數據丟失也不會致使計算任務失敗。不但高可用,當節點發生故障時能迅速進行故障轉移,並且高伸縮,只須要簡單地增長機器就能水平線性伸縮、提高數據 存儲容量和計算速度。oop
網絡爬蟲、分佈式數據庫、搜索引擎之間的關係:性能
一、網絡爬蟲將抓取到的HTML頁面解析完成以後,把解析出的數據加入緩衝區隊列,由其餘兩個線程負責處理數據,一個線程負責將數據保存到分佈式數據庫,一個線程負責將數據提交到搜索引擎進行索引。搜索引擎
二、搜索引擎處理用戶的搜索條件,並將搜索結果返回給用戶,若是用戶查看網頁快照,則從分佈式數據庫中獲取網頁的原始內容。spa
總體架構以下圖所示:線程
爬蟲集羣、分佈式數據庫集羣、搜索引擎集羣在物理部署上,能夠部署到同一個硬件集羣上,也能夠分開部署,造成1-3個硬件集羣。設計
網絡爬蟲集羣有一個專門的網絡爬蟲配置管理系統來負責爬蟲的配置和管理,以下圖所示:
搜 索引擎經過分片(shard)和副本(replica)實現了高性能、高伸縮和高可用。分片技術爲大規模並行索引和搜索提供了支持,極大地提升了索引和搜 索的性能,極大地提升了水平擴展能力;副本技術爲數據提供冗餘,部分機器故障不影響系統的正常使用,保證了系統的持續高可用。
有2個分片和3份副本的索引結構以下所示:
一個完整的索引被切分爲0和1兩個獨立部分,每一部分都有2個副本,即下面的灰色部分。
在 生產環境中,隨着數據規模的增大,只需簡單地增長硬件機器節點便可,搜索引擎會自動地調整分片數以適應硬件的增長,當部分節點退役的時候,搜索引擎也會自 動調整分片數以適應硬件的減小,同時能夠根據硬件的可靠性水平及存儲容量的變化隨時更改副本數,這一切都是動態的,不須要重啓集羣,這也是高可用的重要保 障。