天天看點

一個批量計算的排程系統的設計與實作

如果需要對成千上萬的網絡抓包資料檔案,在規定的時間内進行解析,應該怎麼做?

有大量的檔案

每個檔案的處理需要花 大量的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的解析檔案,在這個過程中經過了多次的變更,每次變更都需要重新解析整個檔案。該系統可以很好的滿足要求。