本發(fā)明涉及高性能計(jì)算領(lǐng)域,具體涉及一種云計(jì)算環(huán)境中自適應(yīng)的組合工作流方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)和云計(jì)算等技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)上匯集的計(jì)算資源越來越多,利用這些廣域分布的計(jì)算資源構(gòu)建并執(zhí)行科學(xué)計(jì)算工作流,已成為當(dāng)前學(xué)術(shù)界和工業(yè)界關(guān)注的熱點(diǎn)問題。在實(shí)際應(yīng)用中,一般業(yè)務(wù)服務(wù)的分工越來越細(xì),一個(gè)復(fù)雜的工作任務(wù)往往需要多個(gè)小任務(wù)按照一定的次序組合完成。而這些任務(wù)可能運(yùn)行在不同系統(tǒng)平臺(tái)上,這些計(jì)算平臺(tái)具有不同的控制訪問、事務(wù)處理等自洽策略,其服務(wù)的狀態(tài)和性質(zhì)也在不斷動(dòng)態(tài)變化;同時(shí),計(jì)算應(yīng)用的多樣性和復(fù)雜性的增加,導(dǎo)致復(fù)雜的工作流對(duì)系統(tǒng)可靠性,可用性等要求也越來越高。
這種動(dòng)態(tài)復(fù)雜的計(jì)算運(yùn)行環(huán)境,使得普通的工作流服務(wù)的執(zhí)行具有不確定性,限制了科學(xué)計(jì)算工作流的實(shí)際可用性。為滿足用戶和計(jì)算控制機(jī)制的需求和保證科學(xué)計(jì)算工作流的正確執(zhí)行,提高系統(tǒng)運(yùn)行魯棒性,迫切需要能根據(jù)實(shí)際運(yùn)行狀態(tài)自動(dòng)實(shí)現(xiàn)動(dòng)態(tài)調(diào)度的工作流方法。
工作流技術(shù)是指:把多個(gè)工作活動(dòng)按正確的結(jié)構(gòu)組合起來,使用工作流語言定義使用這些工作活動(dòng)的流程。具體包括制定一組計(jì)算操作的執(zhí)行順序,確定服務(wù)共享的數(shù)據(jù)、業(yè)務(wù)流程涉及的伙伴和各伙伴在工作流中的角色,以及多個(gè)活動(dòng)如何參與等。工作流語言主要定義基本的計(jì)算活動(dòng)和結(jié)構(gòu)控制活動(dòng)兩種類型的活動(dòng)。工作流模型可以被工作流執(zhí)行引擎執(zhí)行。一般的結(jié)構(gòu)控制活動(dòng)包括:順序活動(dòng),選擇活動(dòng),并行活動(dòng),循環(huán)活動(dòng)。
科學(xué)計(jì)算工作流的計(jì)算任務(wù)有多種實(shí)現(xiàn)形式,通常一個(gè)簡(jiǎn)單任務(wù)僅需要在一個(gè)特定的計(jì)算資源內(nèi)來完成。但在實(shí)踐過程中還存在一種特殊任務(wù),主任務(wù)會(huì)生成一系列的任務(wù)來運(yùn)行,運(yùn)行完這一系列任務(wù),收集任務(wù)結(jié)果,再生成下一系列的任務(wù),直至達(dá)到某種收斂標(biāo)準(zhǔn)而退出。這種任務(wù)的特點(diǎn)是其工作量較大,消耗時(shí)間長(zhǎng),往往需要眾多計(jì)算資源來共同完成,同時(shí)這些子任務(wù)之間還存在著一定的關(guān)聯(lián)順序。通常在工作流中,可以將這類任務(wù)分解成一組由多個(gè)并行或順序結(jié)構(gòu)組成的子任務(wù)流來運(yùn)行,而且需要與計(jì)算資源的調(diào)度系統(tǒng)相互配合,且只能運(yùn)行在一種計(jì)算資源內(nèi)。
在實(shí)際的科學(xué)計(jì)算工作流中,為獲得期望的計(jì)算數(shù)據(jù)結(jié)果,可能需要多種不同的數(shù)據(jù)集合和應(yīng)用操作。這些數(shù)據(jù)和應(yīng)用操作可以按照模塊的形式,以合理的時(shí)序運(yùn)行并獲得計(jì)算結(jié)果。但是保證這些應(yīng)用操作在實(shí)際計(jì)算環(huán)境順序運(yùn)行而不發(fā)生出錯(cuò)是很困難的,一些錯(cuò)誤可能是由人為引起,還有就是計(jì)算資源類錯(cuò)誤,比如任務(wù)內(nèi)存分配不當(dāng)、網(wǎng)絡(luò)通信突然中斷、運(yùn)行環(huán)境缺少某些庫文件等。這會(huì)導(dǎo)致工作流業(yè)務(wù)的失敗,造成大量機(jī)時(shí)和人員的時(shí)間浪費(fèi)。
目前的高性能調(diào)度系統(tǒng)比如slurm/pbs都針對(duì)單一作業(yè)資源來調(diào)度和優(yōu)化,對(duì)單個(gè)計(jì)算作業(yè)的效率很高,可以高效地支持順序類型的工作流。但對(duì)一些復(fù)雜工作流程,比如需要使用多種計(jì)算模塊完成一個(gè)計(jì)算任務(wù)時(shí),現(xiàn)有的計(jì)算系統(tǒng)的調(diào)度能力就無法充分發(fā)揮,往往需要用戶自行通過修改程序腳本來實(shí)現(xiàn)。比如slurm調(diào)度時(shí)會(huì)為每個(gè)作業(yè)單獨(dú)分配一個(gè)節(jié)點(diǎn),即多個(gè)作業(yè)不能分配到一個(gè)節(jié)點(diǎn)中,這導(dǎo)致在運(yùn)行核數(shù)少的小作業(yè)帶來很多的計(jì)算浪費(fèi)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:提出一種改善復(fù)雜科學(xué)計(jì)算工作流的狀態(tài)不可控,提高工作流的柔性,在一定程度上實(shí)現(xiàn)過程定義重用性的云計(jì)算環(huán)境中自適應(yīng)的組合工作流方法。本發(fā)明為解決上述技術(shù)問題提出的技術(shù)方案是:一種云計(jì)算環(huán)境中自適應(yīng)的組合工作流方法,其特征在于包括以下步驟:建立組合服務(wù)對(duì)象的計(jì)劃工作流和規(guī)則構(gòu)造類,通過規(guī)則構(gòu)造類的類型計(jì)算驗(yàn)證計(jì)劃工作流執(zhí)行邏輯的準(zhǔn)確性,所述建立計(jì)劃工作流包括定義計(jì)算最小單元和控制規(guī)則集;
計(jì)算資源初始化,生成工作流初始日志,初始化狀態(tài)記錄表,確定可用的計(jì)算資源和環(huán)境;
將初始運(yùn)行實(shí)例通過規(guī)則構(gòu)造器,轉(zhuǎn)換為初始計(jì)算單元,所述計(jì)算單元由實(shí)際計(jì)算實(shí)例,返回狀態(tài)函數(shù)和結(jié)合狀態(tài)函數(shù)組成;
運(yùn)行初始計(jì)算單元,初始計(jì)算單元的輸出帶有新的規(guī)則構(gòu)造器和狀態(tài)信息的子計(jì)算單元;
與日志庫通信同步后根據(jù)計(jì)算環(huán)境變化,更新子計(jì)算單元內(nèi)的上下文信息;
子計(jì)算單元根據(jù)規(guī)則構(gòu)造器和狀態(tài)信息執(zhí)行計(jì)算實(shí)例,執(zhí)行結(jié)束后,子計(jì)算單元生成下一代的計(jì)算單元。
進(jìn)一步的,所述日志庫適于定時(shí)輪詢各個(gè)計(jì)算單元的狀態(tài)信息和備選計(jì)算環(huán)境的信息,用于更新計(jì)算單元的狀態(tài)信息。有益效果
本發(fā)明中方法的主要優(yōu)點(diǎn)有幾個(gè)方面:
1.提升工作流運(yùn)行的魯棒性。
2.降低用戶的工作量。
3.能夠同時(shí)運(yùn)行在多個(gè)計(jì)算資源內(nèi),提高計(jì)算資源利用率。
附圖說明
下面結(jié)合附圖對(duì)本發(fā)明的云計(jì)算環(huán)境中自適應(yīng)的組合工作流方法作進(jìn)一步說明。
圖1是本發(fā)明中云計(jì)算環(huán)境中自適應(yīng)的組合工作流方法的步驟圖;
圖2是含有計(jì)算實(shí)例的計(jì)算單元示意圖;
圖3是計(jì)算單元的狀態(tài)變換表達(dá)(a)分叉/復(fù)制;
圖4是計(jì)算單元的狀態(tài)變換表達(dá)(b)聚合;
圖5是計(jì)算單元運(yùn)行失敗后的重新計(jì)算;
圖6是計(jì)算單元組成的簡(jiǎn)單工作流;
圖7是計(jì)算單元組成的復(fù)雜的工作流。
具體實(shí)施方式
實(shí)施例
為了能在云環(huán)境中簡(jiǎn)化復(fù)雜的工作流過程,我們?cè)O(shè)計(jì)了可以組合的工作流模式。這里的組合工作流的核心是定義了計(jì)算最小單元和控制規(guī)則集。借鑒范疇論中的monad單子概念,設(shè)計(jì)一種可以抽象化的計(jì)算單元,其為帶有上下文環(huán)境值的計(jì)算單元:如圖2所示,該基礎(chǔ)單元由實(shí)際計(jì)算實(shí)例,返回狀態(tài)函數(shù)(return)和結(jié)合狀態(tài)函數(shù)(bind)組成。當(dāng)計(jì)算單元內(nèi)部不存在計(jì)算輸入時(shí),計(jì)算是暫停的,計(jì)算單元等待計(jì)算輸入的出現(xiàn)后執(zhí)行。若不存在計(jì)算輸入,則計(jì)算單元會(huì)取消或刪除。將計(jì)算實(shí)體a轉(zhuǎn)變?yōu)橛?jì)算單元ma可以用式子return::a->ma表示;將計(jì)算單元ma組合成新的計(jì)算單元mb可以用bind::ma->(a->mb)->mb表示。
為構(gòu)建需要的計(jì)算單元,我們還需要擁有一個(gè)控制規(guī)則集,使得計(jì)算單元能夠?qū)⒁粋€(gè)計(jì)算狀態(tài)轉(zhuǎn)為另一個(gè)狀態(tài)。狀態(tài)控制規(guī)則可以定義為能夠接收狀態(tài),并輸出新狀態(tài)和返回計(jì)算結(jié)果的一種函數(shù)。其可與計(jì)算單元具有相似的結(jié)構(gòu),只是其計(jì)算實(shí)例換為已經(jīng)定義好的狀態(tài)控制器。狀態(tài)控制器可以有返回自身的identity,用于處理錯(cuò)誤信息的error,如圖5所示。處理數(shù)據(jù)讀取的reader,數(shù)據(jù)輸出的writer,任務(wù)狀態(tài)state,任務(wù)狀態(tài)變換的transformers等多種,用戶也可根據(jù)不同任務(wù)的需要自行定義新的狀態(tài)控制方式,如圖3和圖4所示。將一個(gè)實(shí)際作業(yè)與monad單子結(jié)合后形成的計(jì)算單元會(huì)改變計(jì)算作業(yè)的一些行為,比如可以擁有作業(yè)失敗后能夠重新提交作業(yè)的功能。其它的計(jì)算單元功能可以包括作業(yè)狀態(tài)監(jiān)控,更新狀態(tài)上下文等等。同樣,數(shù)據(jù)的上傳和下載也可包裝成io計(jì)算單元。使用這種方式,動(dòng)態(tài)的云計(jì)算環(huán)境可以抽象化為大量的cpu核心,而計(jì)算單元的組合可以創(chuàng)建一個(gè)任務(wù)處理管線。將原有的包含復(fù)雜控制的工作流變?yōu)橐幌盗胁煌?jì)算單元的順序疊加,如圖6和圖7所示。這樣帶來的好處是:
(1)模塊化,復(fù)雜計(jì)算工作流可通過monad抽象化,轉(zhuǎn)變?yōu)楦?jiǎn)單的計(jì)算過程組合。便于計(jì)算子任務(wù)在分布式環(huán)境中運(yùn)行。
(2)隔離,降低單個(gè)計(jì)算子任務(wù)對(duì)整個(gè)工作流的運(yùn)行影響,從而有效地降低因未知因素引起的工作流運(yùn)行失敗,提升系統(tǒng)魯棒性。當(dāng)運(yùn)行環(huán)境復(fù)雜時(shí),能夠配合日志狀態(tài)記錄系統(tǒng)和控制規(guī)則集,可以自動(dòng)拼接未完成的工作流。
計(jì)算單元用于封裝在云計(jì)算系統(tǒng)中運(yùn)行的計(jì)算任務(wù)。實(shí)際的一個(gè)作業(yè)可以包裝成計(jì)算單元m<job>,比如計(jì)算化學(xué)用戶采用第一性原理程序vasp的運(yùn)行應(yīng)用作業(yè),可表示為m<vaspjob>。計(jì)算單元含有除了運(yùn)行計(jì)算實(shí)例額外的功能,包含輸入/輸出,執(zhí)行環(huán)境(集群,作業(yè)優(yōu)先級(jí)等)和作業(yè)狀態(tài)等。
比如一位計(jì)算化學(xué)的用戶使用vasp計(jì)算一個(gè)分子結(jié)構(gòu)的多體色散校正,其需要計(jì)算過程大致有2步,第一步做結(jié)構(gòu)優(yōu)化,第二步在結(jié)構(gòu)優(yōu)化后的基礎(chǔ)上修改參數(shù)做多體色散校正的計(jì)算。將這一計(jì)算過程抽象為一個(gè)類型m<vaspmbd>,用聲明式語義描述這一計(jì)算過程,并添加到計(jì)算單元中,如圖4表示過程??刂埔?guī)則集是科學(xué)計(jì)算工作流引擎的主要組成部分。工作流引擎根據(jù)計(jì)算目的和控制規(guī)則構(gòu)建計(jì)算單元。為了應(yīng)對(duì)計(jì)算資源的不穩(wěn)定性,比如正在進(jìn)行計(jì)算的集群節(jié)點(diǎn)突然沒電或失去網(wǎng)絡(luò)鏈接,建立基于日志的狀態(tài)記錄系統(tǒng),動(dòng)態(tài)調(diào)節(jié)工作流程,根據(jù)上一個(gè)計(jì)算單元生成下一代計(jì)算單元。日志消息則通過規(guī)則構(gòu)造器的模式匹配技術(shù)可轉(zhuǎn)化為另一個(gè)計(jì)算單元的輸入部分,只有完成匹配的計(jì)算單元才可以最終被創(chuàng)建。
為維護(hù)科學(xué)計(jì)算工作流的正常運(yùn)行,還需要定時(shí)監(jiān)控狀態(tài)信息,需要定義一些定時(shí)參數(shù),比如考慮網(wǎng)絡(luò)延時(shí)的心跳間隔,連續(xù)常規(guī)故障時(shí)間間隔等。
而日志庫主要用于提取各種備選服務(wù)的實(shí)際執(zhí)行質(zhì)量數(shù)據(jù);定時(shí)提取正在運(yùn)行和備選服務(wù)的運(yùn)行環(huán)境數(shù)據(jù),而計(jì)算單元可攜帶上下文需要的日志信息。工作流系統(tǒng)的狀態(tài)變化通過日志庫記錄來同步更新。
本發(fā)明的不局限于上述實(shí)施例,本發(fā)明的上述各個(gè)實(shí)施例的技術(shù)方案彼此可以交叉組合形成新的技術(shù)方案,另外凡采用等同替換形成的技術(shù)方案,均落在本發(fā)明要求的保護(hù)范圍內(nèi)。