幾個觀察與想法:
1. 一台雙核的server,開兩個thread爬網頁,每個網址爬六十秒,快的網站可以抓回一千來頁。慢的網站可以抓回200頁,平均頻寬需求約2M/sec.
2. 一天可以爬幾個網站?如果每個網址爬一分鐘,一台server一天只能抓1440個網站。限制的是爬行時間,如果要抓回最多的網頁,則應在crawler的演算法,機器的規格上面做加強,以提升抓取速度,例如 1,000頁變成10,000頁。那麼,倘若有一百萬個對象,想在七天內爬完,則需1,000,000 / 7/ 1440 ~= 100台。需要100台機器以及約莫 100*2MB = 200MB/sec的頻寬
針對100萬個對象crawling所需設備之成本粗估:
- 伺服器 +網路設備 : 500萬
- 頻寬+機房(10 rack) + 200MB/sec = 60萬 /month => 一年 = 720萬
- 其他架構設備(高檔switch, storage, 備份…):這部分先不估計,但針對這樣的架構,可能需要考慮。
3. 假設要做一個台灣內容的搜尋引擎。雖然台灣有許多知名網頁不是.tw結尾,例如tw.bid.yahoo.com, www.hinet.net, wretch.cc….等。 先假設我們針對的是 .tw的網頁,估計一下有多少網址應列入對像。
另外,網址的定義是不同的uri. 例如 shopping.pchome.com.tw與 www.pchome.com.tw就是不同的了。

根據twnic的資料,台灣的 .tw網域申請情況如左圖,約莫有50萬個.tw網址被註冊申請了。

又,twnic的統計也顯示了,www server大概有十一萬台。
以上這兩個資訊給了個感覺,我們要爬的對象基本上不會低於100萬個,只會超過100萬個。
4. 在Google上打 site:.tw,他已經index的網頁有八億四千萬頁。
=> 假設對象是100萬個,平均每個對像抓了842頁。
=> 假設平均每頁存了1k的資料,需要842GB的空間儲存。
思考:
怎麼在最少的時間或者最少的crawler內抓到最多的網頁?(數量跟深度)
=> 正:提升資料的recency與abundancy; 減少crawler的資本支出。
=> 負:頻寬需求增加 => 因為變動成本增加,運行成本增加。
極端的scenario是:僅使用一台5萬元的server,加上1GB的網路頻寬,一天內爬完全台灣的網頁。
因此,兩種考量方式來設計crawler爬行策略:
1. 以爬的時間來考量:例- 每個對象只爬一分鐘,特定對象例外處理。 => 以crawler為主的限制條件。
2. 以單位時間內抓取的網頁kb數來考量:例- 每分鐘要從網路上抓回50GB的資料量,藉以安排排程(優先順序,分配抓取資料量,…)。 => 可以控制頻寬購買需求。
估計上述兩種方法,必然會在某個條件之後互相影響,最後影響成本最大的應該都還是頻寬,畢竟這是個變動成本。
Todo:
1. crawler最佳化
2. search logic