實戰低成本伺服器搭建千萬級資料採集系統

2021-09-23 16:35:40 字數 1430 閱讀 3764

有這樣乙個採集系統的需求,達成指標:

微博必須在乙個小時採集到

為了節約客戶成本,硬體為普通伺服器:e5200 雙核 2.5g cpu, 4 g ddr3 1333記憶體,硬碟 500g sata 7200轉硬碟。資料庫為mysql。

在這樣的條件下我們能否實現這個系統目標?當然如果有更好的硬體不是這個文章闡述的內容。現通過採集、儲存來說明一下如何實現:

使用了6臺普通pc伺服器,就算一台機器7000元,總共4萬元硬體裝置解決採集硬體問題。整體部署圖為:

海量採集系統部署圖

採集下來的資料如何處理?首先儲存採集資料是個密集寫的操作,普通硬碟是否能夠支援,mysql資料庫軟體能否支援,未來量突然增加如何應對?再就是評估儲存空間,每天增量這麼多需要耗費大量的儲存資源,如何存放並且易擴充套件。

正常來說我們上面配置的伺服器,mysql使用myisam引擎一張表最多20w,使用innodb引擎最多400w,如果超過這個數量,查詢更新速度奇慢。

這裡我們採用乙個比較取巧的做法,使用mysql的innodb儲存引擎做了一層快取庫,這個快取庫有兩個快取表,每個表只儲存少於300w的資料,有一張表多於300w的資料就切換到另一張表插入直到超過300w再切換回去。

切換成功後,把多於300w資料的表truncate掉,記得一定要沒有資料插入的時候再truncate,防止資料丟失。

這裡一定要用truncate,不能使用delete,因為delete需要查詢,要用到索引讀寫,並且delete還會寫資料庫log耗費磁碟io,儲存空間也沒有釋放。truncate和drop是運算元據庫刪除資料比較好的做法。

由於有兩個表作為資料插入表,使用資料庫表的自增id並不太合適,需要乙個高速的唯一自增id伺服器提供生成分布式id。

另資料庫完全可以關閉寫事務日誌 ,提高效能,因為抓取的資料當時丟失再啟動抓取就可以了, 這樣資料庫可以保持在乙個比較高效能的情況完成插入操作。

抓取快取表結果如圖:

抓取快取表結構圖

插入後的資料需要儲存下來,不能在超過300w後被truncate掉了。

我們需要有個程式在達到300萬時被truncate掉之前把資料同步走,存放到另外乙個庫上(我們叫做結果庫,結果庫也是使用innodb引擎)。不過我們每天採集的資料1000多萬,按天遞增,mysql一張表一天就撐爆了,我們這個表不是寫操作密集型,所以結果庫可以儲存多點資料,設定上限500w,但是500萬還是存不下1000萬資料。

這樣一張表平均就存放 500w/4 = 125w 條資料,遠遠小於500w上限,還可以應對未來突發的增長。

再從儲存空間來算,就算一條微博資料為1k,一天 1000w*1k=10g,硬碟500g最多存放50天的資料,所以我們規劃機器的時候可以掛接多一點硬碟,或者增加機器。

結果庫分表如圖:

分庫分表結構圖

按照這樣的架構,我們使用開源免費軟體、低成本伺服器搭建的千萬級資料採集系統在生產運轉良好。

原文發布時間為:2013-09-07

雲伺服器讓運維更簡單低成本

隨著雲計算技術出現和應用,雲伺服器的種種優勢對於企業而言已經非常明顯,對比傳統伺服器,雲服務的 更低,運營成本更小,總體投入更少。傳統伺服器劣勢頻現 1.新增業務成本高 風險大 要知道,傳統資料中心的絕大多數應用服務都是部署在物理機上的,由於伺服器的長期不間斷執行,裝置的老化情況突出,效能逐漸下降,...

怎樣用最低成本獲得優質雲伺服器

調查顯示,雲計算已經成為部分中小企業和開發者首選的 應用託管平台。國內各大idc巨頭對於雲伺服器的宣傳和推廣工作也如火如荼地展開,而且隨著競爭加劇,各大雲服務商紛紛推出優惠 政策,試圖搶占更多的新興的雲伺服器市場,企業對於優質雲伺服器的需求也與日俱增。那麼怎樣用最低成本獲得優質雲伺服器?雲伺服器在低...

Oracle資料庫伺服器搭建

在安裝os之前一般需要做raid,至於是做raid5還是raid1 0則根據自己的需求在i o效能及安全性上衡量。在選擇安裝包的時候我一般不主張完全安裝,畢竟我們的伺服器資源還是很珍貴的,沒有必要的服務可以不用裝。我們可以按最小化安裝,以後再根據需要補充安裝。當然如果能確定需求的話直接選擇自己需要的...