上一篇文章《社會化海量數據採集框架搭建》提到如何搭建一個社會化採集系統架構,講架構通常都比較虛,這一篇講一下如何實戰用低成本服務器作到日流水千萬級數據的分佈式採集系統。html
有這樣一個採集系統的需求,達成指標: 須要採集30萬關鍵詞的數據 、微博必須在一個小時採集到、覆蓋四大微博(新浪微博、騰訊微博、網易微博、搜狐微博)。爲了節約客戶成本,硬件爲普通服務器:E5200 雙核 2.5G cpu, 4 G DDR3 1333內存,硬盤 500G SATA 7200轉硬盤。數據庫爲mysql。在這樣的條件下咱們可否實現這個系統目標?固然若是有更好的硬件不是這個文章闡述的內容。現經過採集、存儲來講明一下如何實現:mysql
1、採集,目標是在一個小時內把30萬關鍵詞對應的數據從四大微博採集下來,可以使用的機器配置就是上面配置的普通服務器。採集服務器對硬盤沒有太多要求,屬於cpu密集型運算,需耗費一些內存。評估下來硬件資源不是瓶頸,看下獲取數據的接口有什麼問題?sql
一、經過各大微博的搜索api。就好比新浪微博API針對一個服務器IP的請求次數,普通權限限制是一個小時1w次,最高權限合做受權一個小時4w次。使用應用時還須要有足夠的用戶,單用戶每一個應用每小時訪問1000次,最高權限4w次須要40個用戶使用你的應用。達到30w關鍵詞,至少須要8個應用,若是每一個關鍵詞須要訪問3頁,總共須要24個合做權限的應用。實際操做咱們是不可能爲這個項目作到開發24個合做權限的應用,因此這個方式不是很合適。新浪微博API限制參考連接。數據庫
二、經過各大微博的最新微博收集數據,微博剛推出的時候,各大微博都有微博廣場,能夠把最新的微博都收集下來,而後經過分詞,若是出現了30萬關鍵詞中的一個就留下,其餘就丟棄掉。不過如今除了騰訊微博和搜狐微博有微博廣場相似的功能,新浪微博和網易微博已經沒有這項功能了。另按照新浪微博以前公佈的數據,註冊用戶已經超過5億,每小時超過1億條微博,若是全量採集對數據存儲是個大的考驗,也須要大量的系統資源,實際採集了一億條,也許就1000w條有用,浪費了9000w條數據的資源。api
三、經過各大微博的網頁搜索,可見便可抓的方式,結合反監控系統模塊模擬人的正常行爲操做,搜索30萬關鍵詞數據,使資源最大化利用。爲了保證在一個小時採集到,須要採用分佈式多線程模式抓取,併發採集。併發的時候不能從同一個ip或者同一個ip網段出去,保證對方不會監測到咱們的爬蟲。緩存
咱們最後採用了第三種方式,目前運行情況爲經過30w關鍵詞搜索獲得的全部微博加在一塊兒總量1000多w條天天,新浪和騰訊最多,新浪微博略勝一籌。使用了6臺普通PC服務器,就算一臺機器7000元,總共4萬元硬件設備解決採集硬件問題。總體部署圖爲:服務器
2、存儲,採集下來的數據如何處理?首先存儲採集數據是個密集寫的操做,普通硬盤是否可以支持,mysql數據庫軟件可否支持,將來量忽然增長如何應對?再就是評估存儲空間,天天增量這麼多須要耗費大量的存儲資源,如何存放而且易擴展。多線程
按照這樣的架構,咱們使用開源免費軟件、低成本服務器搭建的千萬級數據採集系統在生產運轉良好。架構
原創文章,轉載請註明: 轉載自LANCEYAN.COM併發
本文連接地址: 實戰低成本服務器搭建千萬級數據採集系統