本發(fā)明涉及數據處理領域,尤其涉及一種分布式計算系統(tǒng)的任務分配方法。
背景技術:
隨著信息技術的飛速發(fā)展,基于數據處理和數據分析的應用受到了廣泛的歡迎和關注。大量信息源帶來數據規(guī)模的爆發(fā)式增長,對海量數據進行復雜計算已經遠遠超過單臺計算機的處理能力,由此推動了對分布式系統(tǒng)及其關鍵技術的研究。分布式計算中把需要進行復雜計算的海量數據切分成小塊后,分交由多臺計算機并行處理,并將局部計算結果整合得出最終結果。 因此,如何合理地對分布式計算系統(tǒng)的資源進行分配,使得分布式計算系統(tǒng)的資源的利10 用率最大化,同時減少處理任務的開銷時間,成了亟待解決的問題。
技術實現要素:
本發(fā)明所要解決的技術問題在于提供一種分布式計算系統(tǒng)的任務分配方法,能夠合理地對分布式計算系統(tǒng)的資源進行分配。
為解決上述技術問題,本發(fā)明采用如下技術方案:
本發(fā)明提供了一種分布式計算系統(tǒng)的任務分配方法,該任務分配方法包括:
周期性采集所述分布式計算系統(tǒng)的節(jié)點的負載情況;
獲取任務算子的資源需求情況;
確定蟻群算法的啟發(fā)式信息,獲取信息素;
基于啟發(fā)式信息、信息素、資源需求情況和負載情況,利用所述蟻群算法,將任務算子分配到所述分布式計算系統(tǒng)的節(jié)點上。
優(yōu)選的,基于啟發(fā)式信息、信息素、資源需求情況和負載情況,利用所述蟻群算法,將任務算子分配到所述分布式計算系統(tǒng)的節(jié)點上之前,還包括:
基于各任務算子之間的關系繪制有向無環(huán)圖。
優(yōu)選的,基于啟發(fā)式信息、信息素、資源需求情況和負載情況,利用所述蟻群算法,將任務算子分配到所述分布式計算系統(tǒng)的節(jié)點上包括:
基于所述有向無環(huán)圖,依序獲取任務算子;
針對所述獲取到的任務算子,基于啟發(fā)式信息、信息素、資源需求情況和負載情況,計算其與各節(jié)點的匹配程度;
將該任務算子分配到與其匹配程度最高的節(jié)點上。
優(yōu)選的,基于所述有向無環(huán)圖,依序獲取任務算子包括:
獲取任務禁忌表,所述任務禁忌表記載有已分配的任務算子;
根據所述任務禁忌表,獲取未被分配的任務算子;
基于所述有向無環(huán)圖和所述任務禁忌表,依序獲取未被分配的任務算子。
優(yōu)選的,基于所述有向無環(huán)圖和所述任務禁忌表,依序獲取未被分配的任務算子之前,還包括:
檢測所述任務禁忌表中記載的任務算子的個數,判斷是否仍然存在未被分配的任務算子;
若存在未被分配的任務算子,則基于所述有向無環(huán)圖和所述任務禁忌表,依序獲取未被分配的任務算子。
優(yōu)選的,該任務分配方法還包括:
若不存在未被分配的任務算子,則試運行當前的分配結果,檢測預設定時間之后的分布式計算系統(tǒng)的負載波動;
若所述負載波動在預設范圍之內,維持當前的分配結果。
優(yōu)選的,所述啟發(fā)式信息為:, 表示任務算子Ti在節(jié)點nodej上的處理時間。
優(yōu)選的,針對所述獲取到的任務算子,基于啟發(fā)式信息、資源需求情況和負載情況,計算其與各節(jié)點的匹配程度包括:
計算,其中,表示序號為k的螞蟻將下一個任務Ti分配到nodej的概率,表示所有螞蟻在一次循環(huán)中將任務算子Ti分配到節(jié)點nodej時產生的信息素,表示節(jié)點nodej對任務Ti的啟發(fā)信息,表示信息素和啟發(fā)信息的權重,表示可處理任務算子的所述分布式計算系統(tǒng)的節(jié)點的集合。
優(yōu)選的,該任務分配方法還包括:
更新信息素,其中,為信息素揮發(fā)因子,,表示序號為k的螞蟻在一次循環(huán)中將任務算子Ti分配到節(jié)點nodej時產生的信息素。信息素揮發(fā)因子,是一個常數??梢愿鶕嶋H應用給出固定值,也可以制定規(guī)則動態(tài)調整。
優(yōu)選的,資源需求情況包括中央處理器使用率、內存占用率和磁盤輸入/輸出的使用率;
資源利用情況包括中央處理器使用率、內存使用率和磁盤輸入/輸出的使用率。
本發(fā)明實施例公開了一種分布式計算系統(tǒng)的任務分配方法,通過采集節(jié)點負載情況、獲取任務算子的資源需求情況,并確定蟻群算法的啟發(fā)式信息和信息素,可從整體角度規(guī)劃出蟻群活動的行為方向,周而復始,求出最優(yōu)的任務分配方法,可將分布式計算系統(tǒng)的節(jié)點資源進行最大化地利用,同時減少處理任務的開銷時間。
附圖說明
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的分布式計算系統(tǒng)的任務分配方法的流程示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供了一種分布式計算系統(tǒng)的任務分配方法,如圖1所示,該任務分配方法包括:
步驟S1、周期性采集所述分布式計算系統(tǒng)的節(jié)點的負載情況。
步驟S2、獲取任務算子的資源需求情況。
步驟S3、確定蟻群算法的啟發(fā)式信息,獲取信息素。
步驟S4、基于啟發(fā)式信息、信息素、資源需求情況和負載情況,利用蟻群算法,將任務算子分配到分布式計算系統(tǒng)的節(jié)點上。
蟻群算法源于自然現象。同遺傳算法、模擬退火算法一樣,也是自適應啟發(fā)式算法。它是與具體問題剝離的優(yōu)化算法。是用來在途中尋找最優(yōu)路徑的機率型策略。它闡述了一個基本現象:螞蟻可以在運動路徑上留下一種物質,這種物質可以被同樣經過這條路徑的后續(xù)螞蟻感知并引導其運動方向,這種物質稱為信息素,螞蟻總是傾向于沿著信息素濃度高的路徑運動,通過這種信息交流的方式搜尋目的地。蟻群算法中的很多思想和步驟都來自于上述的現象。
蟻群算法實際上是一種智能多主體系統(tǒng),其自組織機制使得算法無需對所求問題的每個方面都有詳盡的認識。自組織本質上是算法正反饋機制在沒有外界作用下使系統(tǒng)熵增加的動態(tài)過程,體現了從無序到有序的動態(tài)演化。
其一般步驟是:先對組合優(yōu)化問題建模,然后在“探索”和“利用”之間根據信息素這一反饋載體確定決策點。同時按照針對性定制的信息素更新規(guī)則,對每只螞蟻個體的信息素進行增量構建,隨后從整體角度規(guī)劃出蟻群活動的行為方向,周而復始,即可求出組合優(yōu)化問題的最優(yōu)解。
基于上述對蟻群算法特點的描述可以發(fā)現,蟻群算法非常適合解決類似全局任務分配這樣的NP(Non-Deterministic Polynomial)完全問題難題。在智能型任務分配中,需要“調度知識”對啟發(fā)式方法進行指導,調度知識通常以規(guī)則、策略或算法的形式出現,這樣的知識可以進一步分為靜態(tài)調度知識和動態(tài)調度知識。前者指在對象創(chuàng)建之后對知識的認識和所作的策略不再變更,這是在對象開始運行之前編譯好的,比如節(jié)點的存儲容量、運行速度等等;后者指在對象生命周期之內都在變化的知識,對象在運行過程中需要根據當前狀態(tài)不斷地對知識進行學習,訓練自身行為并對策略進行優(yōu)化調整,諸如節(jié)點的空閑內存空間、負載情況等,都屬于動態(tài)知識。從這個角度看,蟻群利用信息素的正反饋變化和任務分配利用知識指導調度策略的內在本質是完全吻合的。不僅如此蟻群算法具有先天的可擴展性,即當問題規(guī)模擴大后,可在原來規(guī)模最優(yōu)解的基礎上快速迭代,取得當前規(guī)模的最優(yōu)解,這非常符合分布式系統(tǒng)易變的拓撲結構對可擴展性的需求。
本發(fā)明實施例提供的任務分配方法的目標是將多個任務分配到多個處理節(jié)點上,并通過智能調度算法使集群負載均衡且整體性能最優(yōu),使用蟻群算法進行任務分配的具體流程如下:
(1) 首先構造合法的任務分配序列。根據任務算子構造的有向無環(huán)圖(Database Availability Group,簡稱DAG),按階位的降序排列成一個任務表,螞蟻尋路時按任務表順序分發(fā)任務。
任務算子之間可能存在優(yōu)先約束關系,一個完整的任務計算流可以表示為一個有向無環(huán)圖G(T,E),T指任務節(jié)點集,E指有向邊集合。節(jié)點T在DAG中表示一個任務。有向邊用節(jié)點(Ti,Tj)表示。任務可能存在前驅任務和后繼任務,一個任務計算流存在起點和終點。起點沒有前驅任務節(jié)點,終點沒有后繼任務節(jié)點。
(2) 假設環(huán)境為,一個有m個任務的任務集合T={T1,T2,…Tm},Ti代表在任務表中排在位置i的任務,集群中有n個處理節(jié)點Node={node1,node2,…,noden}。節(jié)點對(Ti,nodej)代表序號為i的任務算子被分配在節(jié)點nodej上執(zhí)行。
(3) 算法初始化階段依據下面的公式
計算每個節(jié)點的綜合負載,以此設置節(jié)點的初始化信息素。根據公式設置啟發(fā)式信息。我們假定一個任務在任何節(jié)點上的執(zhí)行時間都是相同的,記為,表示任務Ti在節(jié)點nodej上的處理時間。
(4) 判斷是否滿足終止條件,如果是,則直接輸出最優(yōu)化結果。否則繼續(xù)步驟(5)。終止條件可以是固定的迭代次數,也可以是路徑長度不再變化,即目標函數值已經穩(wěn)定。本發(fā)明是實施例中任務分配最重要的目標是各計算節(jié)點關于各項資源的使用平均和整體分布式計算系統(tǒng)的負載均衡,所以本發(fā)明實施例以負載波動作為目標函數,當負載波動值趨于穩(wěn)定時,即負載波動的峰值均在所需的范圍內時,迭代終止。
(5) 發(fā)出多只螞蟻并行尋路。對于其中的每只螞蟻,判斷任務禁忌表中的任務數是否和5 DAG圖中的任務節(jié)點數相等。如果相等則直接執(zhí)行(8)步驟,否則執(zhí)行步驟(6)。任務禁忌表用來記錄螞蟻已經分配的任務表中的任務將不能被再次分配。
(6) 根據式子計算概率。表示序號為k的螞蟻將下一個任務Ti分配到nodej的概率,并根據最大的選路概率選擇執(zhí)行節(jié)點nodej。
其中表示所有螞蟻在一次循環(huán)中將Ti分配到nodej時產生的信息素,表示節(jié)點nodej對任務算子Ti的啟發(fā)信息,表示信息素和啟發(fā)信息的權重。表示可選的處理節(jié)點集合。
(7) 當任務Ti分配完后螞蟻將它加入任務禁忌表,根據式子和式子進行局部信息素更新。其中表示序號為k的螞蟻在一次循環(huán)中將Ti分配到nodej時產生的信息素。
(8) 判斷節(jié)點是否分配完成所有任務,如果沒有,轉到步驟(5)執(zhí)行,否則按照本次迭代所求的分配方案試運行一段時間求得分布式計算系統(tǒng)的負載波動,即蟻群算法中的路徑長度,以此判斷解的優(yōu)劣,接著轉步驟(4)執(zhí)行下一次迭代。
迭代完成,輸出最優(yōu)解。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。