####
做分布式爬蟲和搜索引擎對於服務器配置有什么要求?
實驗室要做主題爬蟲,附帶簡單的搜索查詢功能,現在要租用10~20台服務器,不知道什么配置好。
我們之前使用了三台服務器(租用的阿里雲),用nutch1.7+hdfs爬取8000個URL(兩層深度)用了兩個多小時,第三層達到了40萬用了3天還沒完全爬完,感覺很慢。
服務器配置如下:
- 服務器A:主節點CPU 4核,內存32G,20Mbps(峰值)公網帶寬(按流量)
- 服務器B,C:CPU 1核,2G內存,1Mbps公網帶寬(固定帶寬)
其中服務器A既做主節點又做從節點,服務器B,C只做從節點。
我有幾點困惑:
1.制約爬取速度的,是帶寬還是cpu的處理能力?我看任務日志,在nutch流程中fetch(連接並下載網頁)這一步耗時最長,占據了絕大部分時間,是不是意味着帶寬是主要瓶頸?
2.關於一台2核4G1M的配置和2台1核2G1M的配置,哪個更好?為什么?(阿里雲的阿里雲推薦配置https://www.aliyun.com/easybuy)
3.如果租用10~20台服務器,配置如何選擇?使用標准配置還是加帶寬,帶寬如何選擇
####
首先,最重要的一點,你需要一點Money。大概多少呢?那你得先搞清楚Money是用來干啥的。一是用來租雲服務器;二是用來買代理。雲服務器的用途顯而易見;代理則是用來動態切換IP,避免被封。好,假設我們需要不間斷爬一周,帶寬1M,數據盤100G。阿里雲,1C1G實例來一個,ecs.t5-lc1m1.small,關了公網IP,¥24.36一周;(同配置t5一周18.48)IP代理,快代理私密代理均勻提取,3~5分鍾 * 2500個/天,¥120一周。然后稍稍改改代碼,關掉延時,扔上服務器跑唄。
#####
1. 買一個vps。通過web方式,給vps裝上操作系統,如ubuntu。這個供應商會有專門教程。2. 用ssh 登錄到vps上,然后把你的代碼放上去。然后運行“nohup python ./youcode.py &”,於是你的crawler就會持續運行下去。將轉到的數據存在文件里,這個是你代碼里寫的。3. 退出ssh。過了幾天幾個星期,ssh登錄上去看看抓了多少。然后scp回自己的電腦分析。
####
頁面爬取總數已經確定(30w±),接下來需要確定的是:頁面每天都需要爬一遍還是說每天只爬其中某一部分即可。這里我們以最大上限來假設,每天爬30w頁面(假設已經考慮了目標的反爬機制、代理池什么的都已經弄好),那么需要測算的就是單位時間單核多線程的正常工作效率是多少(能爬多少頁面)。也即:a.不限網速下,單位內存及CPU最高使用率下能夠爬多少個頁面,設為N。b.額定網速下,內存及CPU有閑置資源時能夠爬多少個頁面,設為M。若基於M/N的爬取速度,都能滿足每天爬30w的需求,就可以用b假設的網速,a假設的硬件配置。這里你可以選擇彈性雲,先用最小配置測試,若不滿足需求,逐漸增加配置。
###
記得選個可以換ip的雲主機,因為ip可能被封。地理位置選距離你的抓取對象物理距離近的。選小配置的,不夠用擴容就行。
###
https://zhuanlan.zhihu.com/p/89548664
###
需要一個單獨的redis服務器
安卓redis
啟動redis,
驗證一下redis是可以連接的,
###
redis 搭建完
接着我們來搭建數據庫的服務器
把 MongoDB 給裝上
先連接到數據庫的服務器上
下載 mongoDB
創建個 db 文件夾
開啟 mongodb
這里順便把 bind_ip 設置一下
這樣才能被遠程訪問
使用本地連接試試,驗證可以連接數據庫,
#####
接着我們需要在
爬蟲服務器安裝 Python3 環境
slave-02 和 slave-03 服務器
同上安裝 python3
ok
環境搭起來了
####
我們把它改成適用分布式的
將 Pipeline 中的數據庫地址配置成
我們創建的 mongodb 數據庫地址
接着在 setting 中配置
redis 調度和去重
再設置一下延遲訪問
設置delay有起碼兩個好處, 一個是對被爬對象表示禮貌, 另一個是爬的太快,很多服務器會封ip,或限制訪問。
搞完了之后
將虛擬環境中的庫打包一下,pip freeze > requirement.txt
接着把項目
都扔到爬蟲服務器上去
連接到爬蟲服務器
可以看到剛剛傳來的文件
把剛剛在虛擬環境中
生成的第三方庫列表
在服務器上一頓安裝
其它兩台爬蟲服務器
和上面一樣安裝所需要的庫
都安裝完之后
就終於可以都 TM 跑起來了
#####
4台機器開始一頓爬取
可以看到 mongodb 都監聽到了
這幾台服務器的連接了
我們連到 redis 看看
可以看到scrapy-redis生成的鍵
可以看到
redis 在調度着請求的消息隊列
以及過濾重復的請求
再連接到 mongodb 看看
統計一下爬取到的數據,發現數據都是增加的,
###
ok
以上就是分布式爬蟲的
搭建及部署的過程了
當然了
數據庫還可以搭建一下集群
數據庫之間的連接最好設置賬戶
進行安全訪問等
主要還是讓你了解這個過程中
分布式爬蟲的搭建和使用
以及體會它的可擴展性和高效性
###
######