以前托管服務器或者租用的服務器一般都是100M共享的帶寬,很少出現機器帶寬被占滿的情況,去年開始采用阿裡雲平台後,帶寬就是一個不得不考慮的成本因素,我們一般都是每台ECS購買的10M左右帶寬,每年費用已經不少了,而投入使用後很輕易就會被占滿,關鍵是網站的流量并沒有特别提升,廣告收入沒有增加,成本卻在大幅提高,還導緻正常用戶訪問變慢、困難。
同事在Linux服務器上安裝了一個iftop來查看帶寬占用情況,很容易就發現了是搜索引擎的爬蟲抓取sitemap.xml這樣的網址占用了很大帶寬,我們網站系列多、頁面多、還有多語言或者手機版,網站地圖就特别的多,如果爬蟲來得過于頻繁就給我們不小困擾。
但爬蟲這種抓取活動還不宜直接屏蔽以免影響收錄,所以考慮限制抓取速度的辦法,安裝了apache的mod_bw模塊,還沒有調試好,不過在網上搜索到文章說可以用PHP編程來實現控制下載速度,這個對我啟發還比較大,因為我們正好修改過Drupal的xmlsitemap模塊xmlsitemap.pages.inc文件來改變網站地圖中的内容和格式,隻要再把輸出方式改一點、增加一點sleep循環就可以,代碼如下:
//print $content; $rate_limit = 1024*100;//100kb/s $all_length = strlen($content); $loop_number = ceil($all_length / $rate_limit); for ($loop_count=0;$loop_count<$loop_number;$loop_count++) { $content_1_loop = substr($content,$loop_count*$rate_limit,$rate_limit); print $content_1_loop; sleep(1); }
這樣每輸出100K字節就延時1秒,把下載速度控制為100kb/s,實際測試可以達到目的,也不影響其内容,僅限制速度。
评论