如果需要對成千上萬的網絡抓包資料檔案,在規定的時間内進行解析,應該怎麼做?
有大量的檔案
每個檔案的處理需要花 大量的cpu時間,對io的負載不大。
要在規定的時間内完成處理
單機無法達成目标,需要使用叢集
設計一個批量計算的排程系統
因為該場景是重計算輕io的,是以可以将所有的檔案集中到某一個檔案系統中,比如hdfs或者ftp。
中繼資料的管理,放在關系型資料庫上,具體的來講,就是放在mysql中。因為mysql技術相對成熟,使用的人多,能夠支撐。
在每個計算節點,部署守護程式。每個守護程式都是獨立的。守護程式通過搶占式的排程方式,來啟動任務。
架構如下圖所示:
主要分3部分:
檔案相關的表: 使用2個表來描述
任務相關的表:使用3個表來描述
計算節點相關的表:使用1個表來描述
主要分為3個獨立的程式
launcher:負責與資料庫互動 ,擷取需要處理的檔案資訊(注意并發),監控節點健康狀态
executor:負責與檔案系統互動,啟動具體的任務,監控任務執行狀态
task: 具體的任務程式,比如一個網絡資料的解析程式
分為3個獨立程式的原因:
保證launcher的精簡和健壯,不會任務任務的失敗導緻整個節點的排程挂掉
保證對task的監控,如果某一task失敗,也需要報告其狀态,達到對任務的完整跟蹤。
1 台mysql伺服器
1 個檔案系統
12 個計算節點
45350 個檔案
檔案系統的網絡帶寬
mysql的負載
設計的系統滿足了應用的要求
作為task的解析檔案,在這個過程中經過了多次的變更,每次變更都需要重新解析整個檔案。該系統可以很好的滿足要求。