本發(fā)明屬于云工作流調(diào)度中的工作流運行時間優(yōu)化技術(shù)。在對同一水平層級的任務(wù)進(jìn)行聚類時,基于任務(wù)之間的數(shù)據(jù)依賴關(guān)系以及聚類之間的時間平衡,提出了支持依賴和時間平衡的云工作流任務(wù)聚類方法。
背景技術(shù):
在各種科學(xué)領(lǐng)域(如物理學(xué)、天文學(xué)和生物醫(yī)學(xué))的研究中都需要運行大規(guī)模的應(yīng)用程序來處理數(shù)據(jù),這些大規(guī)模的應(yīng)用程序通常為工作流應(yīng)用。這些工作流應(yīng)用由許多具有依賴關(guān)系的計算密集型任務(wù)組成,這些任務(wù)的計算量千差萬別,有些任務(wù)的運行時間只需要幾秒而有些則需要幾個小時。當(dāng)在云計算環(huán)境中執(zhí)行這些運行時間很短的任務(wù)時會存在顯著的調(diào)度開銷,調(diào)度開銷產(chǎn)生的額外時間遠(yuǎn)遠(yuǎn)超過任務(wù)本身的運行時間,從而影響整個流程的執(zhí)行時間。
由于云環(huán)境是按使用量收費,額外的系統(tǒng)開銷也會增加成本。為了減少這種開銷的影響,任務(wù)聚類技術(shù)應(yīng)用而生。它將細(xì)粒度任務(wù)分組為粗粒度任務(wù),減少需要執(zhí)行的任務(wù)數(shù)量同時也增加了任務(wù)的計算粒度。任務(wù)聚類是一種工作流運行時間優(yōu)化技術(shù),它將多個短任務(wù)合并到單個作業(yè)中,從而減少了調(diào)度開銷并縮短了流程的執(zhí)行時間。
現(xiàn)有的任務(wù)聚類技術(shù)主要分為兩類:時間平衡聚類和依賴平衡聚類。前者往往只考慮了時間平衡性,而忽視了流程的結(jié)構(gòu)特征以及任務(wù)之間的數(shù)據(jù)依賴關(guān)系。數(shù)據(jù)依賴性意味著在兩個任務(wù)之間存在數(shù)據(jù)傳輸(一個任務(wù)的輸出數(shù)據(jù)是另一個任務(wù)的輸入數(shù)據(jù))。因此在聚類時應(yīng)盡量將具有相同子任務(wù)的父任務(wù)聚集在一起,依賴性不平衡意味著下層任務(wù)必須等待更多的上層任務(wù)執(zhí)行結(jié)束才能開始執(zhí)行,這樣一個層級上的任務(wù)集會延遲下一層級(甚至后續(xù)層級)的任務(wù)的開始時間,從而影響任務(wù)執(zhí)行的并行性。
同樣的,依賴平衡聚類往往會忽視聚類之間的時間平衡性。在流程圖中,同一層的任務(wù)可能會有不同的運行時間。不考慮運行時間的變化去合并任務(wù)會導(dǎo)致負(fù)載失衡。比如一些聚類可能由短任務(wù)組成,而其他聚類由長任務(wù)組成。這種時間上的不平衡會延遲下一級任務(wù)的開始時間。因此,良好的聚類策略應(yīng)該保證每一個聚類的執(zhí)行時間都盡可能相近。
技術(shù)實現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的不足,提出了一種支持依賴和時間平衡的云工作流任務(wù)聚類方法。該方法在對流程圖中同一層級的任務(wù)進(jìn)行聚類時優(yōu)先考慮了任務(wù)之間的數(shù)據(jù)依賴關(guān)系,在此基礎(chǔ)上考慮了聚類之間的時間平衡,有效縮短了工作流的完成時間。
本發(fā)明方法的具體步驟是:
步驟(1).輸入流程圖中某一層待聚類的任務(wù)集tasklist;流程圖是工作流w=(t,e)的圖形化表示,通過有向無環(huán)圖(dag)來描述;其中t={t1,t2,...,tm}是頂點的集合,代表流程中的任務(wù);e是有向邊的集合,代表任務(wù)之間的依賴關(guān)系;流程圖中從開始任務(wù)到某個任務(wù)所經(jīng)過的有向邊的條數(shù)稱為該任務(wù)所在的層數(shù);
步驟(2).計算該層任務(wù)中任意兩個任務(wù)之間的關(guān)聯(lián)度cor(ti,tj);
關(guān)聯(lián)度的計算公式如下:
其中c(ti)表示任務(wù)ti的下一層子任務(wù)集合,|c(ti)|表示任務(wù)ti的下一層子任務(wù)個數(shù);
步驟(3).輸入一個不超過該層任務(wù)總數(shù)n的聚類個數(shù)clusternum,根據(jù)該聚類個數(shù)對該層的任務(wù)總數(shù)進(jìn)行均分,得出每個聚類ci需要填充的任務(wù)個數(shù);設(shè)n/clusternum的商數(shù)為p、余數(shù)為q,則前q個聚類需要填充的任務(wù)個數(shù)為p+1,其余聚類需要填充的任務(wù)個數(shù)為p;
步驟(4).按聚類c1、c2…cclusternum的順序,根據(jù)聚類ci需要填充的任務(wù)個數(shù)對聚類ci進(jìn)行任務(wù)填充;
特別地,當(dāng)聚類ci中所需任務(wù)個數(shù)為1時,則將剩余未分配的各個任務(wù)分別填充至聚類ci、ci+1…cclusternum中,聚類結(jié)束,轉(zhuǎn)至步驟(7);否則,從剩余任務(wù)中找到關(guān)聯(lián)度最大的兩個任務(wù)(即任務(wù)對)放到聚類ci中;
若有多個任務(wù)對的關(guān)聯(lián)度都達(dá)到了最大,則選擇任務(wù)對中兩任務(wù)運行時間之和最接近
步驟(5).若此時聚類ci中已有的任務(wù)個數(shù)小于需要填充的任務(wù)個數(shù),則計算剩余任務(wù)中的每個任務(wù)分別加入聚類ci后ci中所有任務(wù)對的關(guān)聯(lián)度之和,選擇使得關(guān)聯(lián)度之和達(dá)到最大的那個任務(wù)填充到聚類ci中,如果滿足上述條件的任務(wù)有多個,則在這幾個任務(wù)中選擇運行時間最接近聚類ci中剩余平均運行時間lefttasktime的任務(wù),其中聚類ci中剩余平均運行時間的計算公式如下:
其中curtasktime(ci)表示聚類ci中已經(jīng)填充的任務(wù)的運行時間之和,curtasknum(ci)表示聚類ci中已經(jīng)填充的任務(wù)數(shù),neednum(ci)為聚類ci需要填充的任務(wù)個數(shù),n表示該層包含的任務(wù)個數(shù);
步驟(6).按步驟(5)繼續(xù)向聚類ci中填充任務(wù),直至填充完畢,然后跳至步驟(4),繼續(xù)下一個聚類的填充,直到所有的聚類都填充完畢;
步驟(7).輸出聚類結(jié)果ci,i=1,2,...,clusternum。
本發(fā)明所提出的支持依賴平衡聚類的云工作流調(diào)度方法主要通過以下幾個模塊進(jìn)行:工作流映射模塊、工作流引擎模塊、工作流調(diào)度模塊和作業(yè)包裝模塊。
工作流映射模塊根據(jù)用戶提供的抽象工作流生成可供執(zhí)行的工作流。此外,工作流映射模塊利用重構(gòu)技術(shù)增加計算粒度從而減少調(diào)度開銷。本發(fā)明所提出的聚類算法就是應(yīng)用在該模塊的,通過聚類技術(shù)可以將小任務(wù)合并成作業(yè)以減少系統(tǒng)負(fù)載。在工作流執(zhí)行系統(tǒng)中,作業(yè)是一個獨立執(zhí)行的單元,它可能包含一個或多個任務(wù)。
工作流引擎模塊根據(jù)工作流任務(wù)之間的依賴關(guān)系來管理各個作業(yè),以確保一個作業(yè)只有在其所有父作業(yè)都被提交到作業(yè)調(diào)度器中之后才能得到釋放。工作流引擎只會把空閑作業(yè)釋放到調(diào)度器中。
工作流調(diào)度模塊管理和監(jiān)督作業(yè)在本地以及遠(yuǎn)程資源上的執(zhí)行。工作流調(diào)度模塊是整個調(diào)度過程中最核心的部分,該模塊依據(jù)具體的調(diào)度算法將任務(wù)分配到相應(yīng)的工作節(jié)點上。
作業(yè)包裝模塊從聚類作業(yè)中提取任務(wù),并在工作節(jié)點上執(zhí)行它們。
本發(fā)明提出的方法在對流程圖中同一層級的任務(wù)進(jìn)行聚類時優(yōu)先考慮了任務(wù)之間的數(shù)據(jù)依賴關(guān)系,在此基礎(chǔ)上考慮了聚類之間的時間平衡,提出了一種支持依賴和時間平衡的云工作流任務(wù)聚類方法。特別地,本發(fā)明在對同一層級的任務(wù)進(jìn)行聚類時并不是簡單地將具有相同子任務(wù)的父任務(wù)聚集在一起,而是綜合考慮了這些任務(wù)共有的子任務(wù)以及它們各自特有的子任務(wù),在此基礎(chǔ)上提出了任務(wù)關(guān)聯(lián)度的概念和計算公式來表征任務(wù)之間的依賴程度。同時,本發(fā)明在優(yōu)先考慮任務(wù)之間的依賴關(guān)系的基礎(chǔ)上還考慮了各個任務(wù)的運行時間,同時保證了聚類的依賴平衡與時間平衡。通過與傳統(tǒng)聚類方法進(jìn)行實驗比較可以發(fā)現(xiàn),通過本方法對任務(wù)進(jìn)行聚類可以更有效地減少工作流的完成時間,證明了本發(fā)明對任務(wù)的聚類是科學(xué)合理的。
附圖說明
圖1:dag模型轉(zhuǎn)化為o-dag模型;
圖2:o-dag模型表示的聚類實現(xiàn)效果;
圖3:算法流程圖。
具體實施方式
下面將對本發(fā)明所提供的支持依賴平衡聚類的云工作流調(diào)度方法做具體說明。
為敘述方便,定義相關(guān)符號如下:
tasklist:流程圖中某一層級包含的任務(wù)集。
clusternum:聚類個數(shù)。
w=(t,e):工作流,其中t={t1,t2,...,tm}是頂點的集合,代表流程中
的任務(wù),e是有向邊的集合,代表任務(wù)之間的依賴關(guān)系。
cor(ti,tj):該層任務(wù)中任意兩個任務(wù)ti和tj之間的關(guān)聯(lián)度。
c(ti):表示任務(wù)ti的子任務(wù)集合。
|c(ti)|:表示任務(wù)ti的子任務(wù)個數(shù)。
ci:流程圖中某一層級的第i個聚類。
neednum(ci):每個聚類ci需要填充的任務(wù)個數(shù)。
lefttasktime:剩余任務(wù)平均運行時間。
rt(ti):任務(wù)ti的執(zhí)行時間。
curtasktime(ci):表示聚類ci中已經(jīng)填充的任務(wù)的運行時間之和。
curtasknum(ci):表示聚類ci中已經(jīng)填充的任務(wù)數(shù)。
步驟(1):輸入流程圖中某一層待聚類的任務(wù)集tasklist。
流程圖是工作流w=(t,e)的圖形化表示,通過有向無環(huán)圖(dag)來描述。其中t={t1,t2,...,tm}是頂點的集合,代表流程中的任務(wù);e是有向邊的集合,代表任務(wù)之間的依賴關(guān)系,邊eij表示任務(wù)tj需要接收父任務(wù)ti傳遞過來的數(shù)據(jù);流程圖中從開始任務(wù)到某個任務(wù)所經(jīng)過的有向邊的條數(shù)稱為該任務(wù)所在的層數(shù)。
為了明確地表示聚類的過程,這里將dag模型擴(kuò)展成開銷感知的dag模型(o-dag)。系統(tǒng)開銷在流程的整個執(zhí)行時間中占據(jù)了重要部分。圖1展示了將dag模型變?yōu)閛-dag模型的過程,o-dag模型添加了系統(tǒng)開銷(s),例如工作流延遲和排隊延遲。
步驟(2):計算該層任務(wù)中任意兩個任務(wù)ti和tj之間的關(guān)聯(lián)度cor(ti,tj)。為了度量兩個任務(wù)數(shù)據(jù)依賴的相似程度,這里定義了關(guān)聯(lián)度的概念,具體計算公式如下:
其中c(ti)表示任務(wù)ti的子任務(wù)集合,|c(ti)|表示任務(wù)ti的子任務(wù)個數(shù)。關(guān)聯(lián)度可以看作是兩任務(wù)的共有子任務(wù)占它們各自特有子任務(wù)的比重的乘積。也就是說聚類時并不是簡單地將具有相同子任務(wù)的父任務(wù)聚集在一起,而是綜合考慮了這些任務(wù)共有的子任務(wù)以及它們各自特有的子任務(wù)。有些時候雖然兩個任務(wù)具有相同的子任務(wù),但它們并不一定可以聚集到一起,還需要考慮這兩個任務(wù)的其他子任務(wù)的情況。理論上傾向于將關(guān)聯(lián)度高的任務(wù)進(jìn)行聚類,這樣組合成的聚類與下層任務(wù)的關(guān)聯(lián)性會比較少,可以減少數(shù)據(jù)依賴。
依照關(guān)聯(lián)度進(jìn)行聚類的簡單實現(xiàn)效果如圖2所示。
步驟(3):輸入一個不超過該層任務(wù)總數(shù)n的聚類個數(shù)clusternum,根據(jù)該聚類個數(shù)對該層的任務(wù)總數(shù)進(jìn)行均分,得出每個聚類ci需要填充的任務(wù)個數(shù)。設(shè)n/clusternum的商數(shù)為p、余數(shù)為q,則前q個聚類需要填充的任務(wù)個數(shù)為p+1,其余聚類需要填充的任務(wù)個數(shù)為p。比如有10個任務(wù),聚成3個類,那么每個聚類任務(wù)數(shù)為4、3、3。
步驟(4):按聚類c1、c2…cclusternum的順序,根據(jù)聚類ci需要填充的任務(wù)個數(shù)對聚類ci進(jìn)行任務(wù)填充。特別地,當(dāng)聚類ci中所需任務(wù)個數(shù)為1時,則將剩余未分配的各個任務(wù)分別填充至聚類ci、ci+1…cclusternum中,聚類結(jié)束,轉(zhuǎn)至步驟(7)。否則,從剩余任務(wù)中找到關(guān)聯(lián)度最大的兩個任務(wù)(即任務(wù)對)放到聚類ci中。
若有多個任務(wù)對的關(guān)聯(lián)度都達(dá)到了最大,則選擇任務(wù)對中兩任務(wù)運行時間之和最接近
步驟(5):若此時聚類ci中已有的任務(wù)個數(shù)小于需要填充的任務(wù)個數(shù),則計算剩余任務(wù)中的每個任務(wù)分別加入聚類ci后ci中所有任務(wù)對的關(guān)聯(lián)度之和,選擇使得關(guān)聯(lián)度之和達(dá)到最大的那個任務(wù)填充到聚類ci中,如果滿足上述條件的任務(wù)有多個,則在這幾個任務(wù)中選擇運行時間最接近聚類ci中剩余平均運行時間lefttasktime的任務(wù),其中聚類ci中剩余平均運行時間的計算公式如下:
其中curtasktime(ci)表示聚類ci中已經(jīng)填充的任務(wù)的運行時間之和,curtasknum(ci)表示聚類ci中已經(jīng)填充的任務(wù)數(shù),neednum(ci)為聚類ci需要填充的任務(wù)個數(shù),n表示該層包含的任務(wù)個數(shù)。
步驟(6):按步驟(5)繼續(xù)向聚類ci中填充任務(wù),直至填充完畢,然后跳至步驟(4),繼續(xù)下一個聚類的填充,直到所有的聚類都填充完畢。
步驟(7):當(dāng)每一個聚類都填充完畢時,輸出聚類結(jié)果ci,i=1,2,...,clusternum。
整個算法的執(zhí)行過程如圖3所示。