欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種分布式工作流調(diào)度的方法和裝置與流程

文檔序號(hào):12719082閱讀:291來源:國知局
一種分布式工作流調(diào)度的方法和裝置與流程

本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種分布式工作流調(diào)度技術(shù)。



背景技術(shù):

現(xiàn)有的工作流管理系統(tǒng)中,所有工作流的作業(yè)均在一臺(tái)主機(jī)以多線程形式執(zhí)行,其弊端在于面對大量大規(guī)模工作流的執(zhí)行請求時(shí),受執(zhí)行主機(jī)單機(jī)資源(CPU、內(nèi)存與磁盤)大小有限的影響,無法及時(shí)響應(yīng)請求,即在作業(yè)處理規(guī)模與資源層面均不具備良好的可擴(kuò)展性;并且現(xiàn)實(shí)中工作流作業(yè)間的依賴關(guān)系也不僅只是順序依賴,往往會(huì)包含更復(fù)雜的依賴關(guān)系,而且現(xiàn)有的工作流調(diào)度系統(tǒng)不能實(shí)現(xiàn)將工作流中的調(diào)度和執(zhí)行邏輯分開,以及將工作流中的調(diào)度和資源管理邏輯分開。

因此,如何提供一種分布式工作流調(diào)度技術(shù)成為本領(lǐng)域技術(shù)人員亟需解決的技術(shù)問題之一。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是提供一種分布式工作流調(diào)度的方法和裝置。

根據(jù)本發(fā)明的一個(gè)方面,提供一種分布式工作流調(diào)度的方法,其中,該方法包括以下步驟:

a.獲取用戶提供的作業(yè)執(zhí)行指令、工作流拓?fù)潢P(guān)系以及作業(yè)間的依賴關(guān)系;

b.基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn);

c.通過資源管理模塊確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊;

d.由已獲取所述資源的所述資源管理模塊通過資源調(diào)度代理發(fā)送啟動(dòng)指令,以啟動(dòng)遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令。

優(yōu)選地,所述作業(yè)間的依賴關(guān)系包括以下至少任一項(xiàng):

順序依賴;

數(shù)據(jù)依賴;

選擇依賴;

并行執(zhí)行。

優(yōu)選地,所述步驟b包括:

構(gòu)建工作流執(zhí)行對象;

所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn);

根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的作業(yè)執(zhí)行對象以記錄所述節(jié)點(diǎn)的工作狀態(tài),其中,所述工作流執(zhí)行對象包括所有作業(yè)執(zhí)行對象列表,所述所有作業(yè)執(zhí)行對象列表中包括所有的作業(yè)執(zhí)行對象。

優(yōu)選地,所述步驟b還包括:

所述作業(yè)執(zhí)行對象獲取并記錄所述遠(yuǎn)程作業(yè)執(zhí)行模塊發(fā)送的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)的作業(yè)執(zhí)行狀態(tài);

當(dāng)所述節(jié)點(diǎn)的所述作業(yè)執(zhí)行狀態(tài)為執(zhí)行結(jié)束狀態(tài)時(shí),所述作業(yè)執(zhí)行對象指示與所述節(jié)點(diǎn)對應(yīng)的所述遠(yuǎn)程作業(yè)執(zhí)行模塊退出。

優(yōu)選地,所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已執(zhí)行結(jié)束的節(jié)點(diǎn),并指示所述資源管理模塊回收所述已執(zhí)行結(jié)束的節(jié)點(diǎn)對應(yīng)的資源。

優(yōu)選地,該方法還包括:

由所述資源管理模塊根據(jù)所述節(jié)點(diǎn)所需要的資源配額的大小將至少一種資源配額劃分為不同種類的資源配額,其中,每種資源配額分別與工作流對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的一個(gè)作業(yè)相對應(yīng),同一種類資源配額中的每份資源分別與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)相對應(yīng);

通過所述資源管理模塊記錄每個(gè)工作流中的每種資源配額及其所分別對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的作業(yè)。

優(yōu)選地,所述步驟c還包括:

通過所述資源管理模塊遍歷所述所有作業(yè)執(zhí)行對象列表以檢測是否存在節(jié)點(diǎn)的增減;

將增減的所述節(jié)點(diǎn)所要求的資源配額與所述每個(gè)工作流中的每種資源配額分別進(jìn)行比較,獲得比較結(jié)果;

根據(jù)所述比較結(jié)果決定向所述集群資源調(diào)度系統(tǒng)對應(yīng)的應(yīng)用添加新的作業(yè)或者更新已添加作業(yè)的任務(wù)并發(fā)數(shù)量。

優(yōu)選地,所述步驟b中通過檢查以下至少任一項(xiàng)以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn):

上游節(jié)點(diǎn)是否運(yùn)行完成;

所述作業(yè)間的依賴關(guān)系是否滿足;

所述節(jié)點(diǎn)是否被設(shè)定為跳過;

所述節(jié)點(diǎn)是否為終態(tài)。

根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種分布式工作流調(diào)度的調(diào)度裝置,其中,該調(diào)度裝置包括:

第一獲取裝置,用于獲取用戶提供的作業(yè)執(zhí)行指令、工作流拓?fù)潢P(guān)系以及作業(yè)間的依賴關(guān)系;

第二獲取裝置,用于基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn);

確定裝置,用于通過資源管理模塊確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊;

執(zhí)行裝置,用于由已獲取所述資源的所述資源管理模塊通過資源調(diào)度代理發(fā)送啟動(dòng)指令,以啟動(dòng)遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令。

優(yōu)選地,所述作業(yè)間的依賴關(guān)系包括以下至少任一項(xiàng):

順序依賴;

數(shù)據(jù)依賴;

選擇依賴;

并行執(zhí)行。

優(yōu)選地,所述第二獲取裝置包括:

第一構(gòu)建單元,用于構(gòu)建工作流執(zhí)行對象;

查找單元,用于所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn);

第二構(gòu)建單元,用于根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的作業(yè)執(zhí)行對象以記錄所述節(jié)點(diǎn)的工作狀態(tài),其中,所述工作流執(zhí)行對象包括所有作業(yè)執(zhí)行對象列表,所述所有作業(yè)執(zhí)行對象列表中包括所有的作業(yè)執(zhí)行對象。

優(yōu)選地,所述第二獲取裝置還用于:

所述作業(yè)執(zhí)行對象獲取并記錄所述遠(yuǎn)程作業(yè)執(zhí)行模塊發(fā)送的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)的作業(yè)執(zhí)行狀態(tài);

當(dāng)所述節(jié)點(diǎn)的所述作業(yè)執(zhí)行狀態(tài)為執(zhí)行結(jié)束狀態(tài)時(shí),所述作業(yè)執(zhí)行對象指示與所述節(jié)點(diǎn)對應(yīng)的所述遠(yuǎn)程作業(yè)執(zhí)行模塊退出。

優(yōu)選地,所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已執(zhí)行結(jié)束的節(jié)點(diǎn),并指示所述資源管理模塊回收所述已執(zhí)行結(jié)束的節(jié)點(diǎn)對應(yīng)的資源。

優(yōu)選地,該調(diào)度裝置還包括:

劃分裝置,用于由所述資源管理模塊根據(jù)所述節(jié)點(diǎn)所需要的資源配額的大小將至少一種所述資源配額劃分為不同種類的資源配額,其中,每種資源配額分別與工作流對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的一個(gè)作業(yè)相對應(yīng),同一種類資源配額中的每份資源配額分別與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)相對應(yīng);

記錄裝置,用于通過所述資源管理模塊記錄每個(gè)工作流中的每種資源配額及其所分別對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的作業(yè)。

優(yōu)選地,所述確定裝置還包括:

檢測單元,用于通過所述資源管理模塊遍歷所述所有作業(yè)執(zhí)行對象列表以檢測是否存在節(jié)點(diǎn)的增減;

比較單元,用于將增減的所述節(jié)點(diǎn)所要求的資源配額與所述每個(gè)工作流中的每種資源配額分別進(jìn)行比較,獲得比較結(jié)果;

更新單元,用于根據(jù)所述比較結(jié)果決定向所述集群資源調(diào)度系統(tǒng)對應(yīng)的應(yīng)用添加新的作業(yè)或者更新已添加作業(yè)的任務(wù)并發(fā)數(shù)量。

優(yōu)選地,所述第二獲取裝置通過檢查以下至少任一項(xiàng)以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn):

上游節(jié)點(diǎn)是否運(yùn)行完成;

所述作業(yè)間的依賴關(guān)系是否滿足;

所述節(jié)點(diǎn)是否被設(shè)定為跳過;

所述節(jié)點(diǎn)是否為終點(diǎn)。

根據(jù)本發(fā)明的又一個(gè)方面,還提供了一種計(jì)算機(jī)設(shè)備,所述計(jì)算機(jī)設(shè)備包括:

一個(gè)或多個(gè)處理器;

存儲(chǔ)器,用于存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序;

當(dāng)所述一個(gè)或多個(gè)計(jì)算機(jī)程序被所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)如前任一項(xiàng)所述的方法。

與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):

本發(fā)明基于集群資源調(diào)度系統(tǒng)實(shí)現(xiàn)工作流的分布式化運(yùn)行,可以接受不同計(jì)算平臺(tái)發(fā)起的資源邀約,快速分配約定資源以及按照指令使用與回收資源,同時(shí)對外提供良好的操作界面與用戶接口,并且采用集群資源調(diào)度系統(tǒng)分離了工作流的調(diào)度與資源管理邏輯,降低了資源調(diào)度系統(tǒng)迭代對于工作流調(diào)度系統(tǒng)的影響。并且本發(fā)明可以基于作業(yè)間復(fù)雜的依賴關(guān)系遍歷Flow(工作流)的拓?fù)?,同時(shí)向集群資源調(diào)度系統(tǒng)發(fā)起資源的申請與回收指令,很好的分離了工作流中的調(diào)度邏輯與執(zhí)行邏輯,實(shí)現(xiàn)了服務(wù)器裝置調(diào)度和集群節(jié)點(diǎn)專職執(zhí)行。

附圖說明

通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:

圖1示出根據(jù)本發(fā)明一個(gè)方面的一種分布式工作流調(diào)度的調(diào)度裝置結(jié)構(gòu)示意圖;

圖2示出通過調(diào)度裝置1實(shí)現(xiàn)分布式工作流調(diào)度的系統(tǒng)W的整體架構(gòu)示意圖;

圖3-a示出網(wǎng)絡(luò)服務(wù)器(Web Server)的結(jié)構(gòu)示意圖;

圖3-b示出執(zhí)行服務(wù)器(Executor Server)的結(jié)構(gòu)示意圖;

圖4示出根據(jù)本發(fā)明一個(gè)方面的一種分布式工作流調(diào)度的工作流的流程示意圖。

附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。

具體實(shí)施方式

在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。

在上下文中所稱“計(jì)算機(jī)設(shè)備”,也稱為“電腦”,是指可以通過運(yùn)行預(yù)定程序或指令來執(zhí)行數(shù)值計(jì)算和/或邏輯計(jì)算等預(yù)定處理過程的智能電子設(shè)備,其可以包括處理器與存儲(chǔ)器,由處理器執(zhí)行在存儲(chǔ)器中預(yù)存的存續(xù)指令來執(zhí)行預(yù)定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行預(yù)定處理過程,或是由上述二者組合來實(shí)現(xiàn)。計(jì)算機(jī)設(shè)備包括但不限于服務(wù)器、個(gè)人電腦、筆記本電腦、平板電腦等。

所述計(jì)算機(jī)設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備包括但不限于個(gè)人電腦、筆記本電腦、平板電腦等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個(gè)網(wǎng)絡(luò)服務(wù)器、多個(gè)網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計(jì)算(Cloud Computing)的由大量計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計(jì)算是分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)集組成的一個(gè)超級虛擬計(jì)算機(jī)。其中,所述計(jì)算機(jī)設(shè)備可單獨(dú)運(yùn)行來實(shí)現(xiàn)本發(fā)明,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計(jì)算機(jī)設(shè)備的交互操作來實(shí)現(xiàn)本發(fā)明。其中,所述計(jì)算機(jī)設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。

需要說明的是,所述用戶設(shè)備、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計(jì)算機(jī)設(shè)備或網(wǎng)絡(luò)如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并以引用方式包含于此。

后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實(shí)施。當(dāng)用軟件、固件、中間件或微代碼來實(shí)施時(shí),用以實(shí)施必要任務(wù)的程序代碼或代碼段可以被存儲(chǔ)在機(jī)器或計(jì)算機(jī)可讀介質(zhì)(比如存儲(chǔ)介質(zhì))中。(一個(gè)或多個(gè))處理器可以實(shí)施必要的任務(wù)。

這里所公開的具體結(jié)構(gòu)和功能細(xì)節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實(shí)施例的目的。但是本發(fā)明可以通過許多替換形式來具體實(shí)現(xiàn),并且不應(yīng)當(dāng)被解釋成僅僅受限于這里所闡述的實(shí)施例。

應(yīng)當(dāng)理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個(gè)單元,但是這些單元不應(yīng)當(dāng)受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個(gè)單元與另一個(gè)單元進(jìn)行區(qū)分。舉例來說,在不背離示例性實(shí)施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個(gè)或更多所列出的相關(guān)聯(lián)項(xiàng)目的任意和所有組合。

應(yīng)當(dāng)理解的是,當(dāng)一個(gè)單元被稱為“連接”或“耦合”到另一單元時(shí),其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當(dāng)一個(gè)單元被稱為“直接連接”或“直接耦合”到另一單元時(shí),則不存在中間單元。應(yīng)當(dāng)按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。

這里所使用的術(shù)語僅僅是為了描述具體實(shí)施例而不意圖限制示例性實(shí)施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個(gè)”、“一項(xiàng)”還意圖包括復(fù)數(shù)。還應(yīng)當(dāng)理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個(gè)或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。

還應(yīng)當(dāng)提到的是,在一些替換實(shí)現(xiàn)方式中,所提到的功能/動(dòng)作可以按照不同于附圖中標(biāo)示的順序發(fā)生。舉例來說,取決于所涉及的功能/動(dòng)作,相繼示出的兩幅圖實(shí)際上可以基本上同時(shí)執(zhí)行或者有時(shí)可以按照相反的順序來執(zhí)行。

下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)描述。

圖1示出根據(jù)本發(fā)明一個(gè)方面的一種分布式工作流調(diào)度的調(diào)度裝置結(jié)構(gòu)示意圖。調(diào)度裝置1包括:第一獲取裝置101、第二獲取裝置102、確定裝置103和執(zhí)行裝置104。

在此,調(diào)度裝置1例如位于前述計(jì)算機(jī)設(shè)備中,優(yōu)選地,所述調(diào)度裝置1位于網(wǎng)絡(luò)設(shè)備中。在此,在調(diào)度裝置1中,系統(tǒng)構(gòu)建項(xiàng)目管理模塊(ProjectManager)、工作流執(zhí)行模塊(FlowRunnerManager)和資源管理模塊(ResourceManager),其中,所述ProjectManager用于啟動(dòng)單獨(dú)線程用于管理所有Project拓?fù)潢P(guān)系的上傳、解析與下載;所述FlowRunnerManager用于啟動(dòng)單獨(dú)線程用于管理所有工作流(Flow)的執(zhí)行實(shí)例;ResourceManager用于啟動(dòng)單獨(dú)線程用于和集群資源調(diào)度系統(tǒng),例如Normandy系統(tǒng)交互,管理資源的申請與回收。

其中,第一獲取裝置101獲取用戶提供的作業(yè)執(zhí)行指令、工作流拓?fù)潢P(guān)系以及作業(yè)間的依賴關(guān)系。具體地,用戶上傳工作流拓?fù)涿枋龊?,調(diào)度裝置1解析所述拓?fù)涿枋鲋须[含的工作流拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,然后存儲(chǔ)至對應(yīng)的數(shù)據(jù)庫與Hadoop分布式文件系統(tǒng)(HDFS)中,當(dāng)用戶通過計(jì)算機(jī)設(shè)備發(fā)起執(zhí)行工作流(Flow)的請求后,第一獲取裝置101獲取用戶發(fā)起的請求中的作業(yè)執(zhí)行指令,以及自所述數(shù)據(jù)庫中獲取與所述Flow對應(yīng)的拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,其中,第一獲取裝置101例如通過一次或者多次調(diào)用所述設(shè)備所提供的應(yīng)用程序接口(API)或其他約定的通信方式,獲取用戶發(fā)起的作業(yè)執(zhí)行指令。例如,用戶上傳工作流拓?fù)涿枋龊?,ProjectManager解析工作流拓?fù)潢P(guān)系,IKExpression解析作業(yè)間依賴關(guān)系,然后存儲(chǔ)所述工作流拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系至MySQL數(shù)據(jù)庫,并基于唯一的項(xiàng)目標(biāo)識(shí)(Project ID)插入ProjectManager中的Project隊(duì)列,其中,IKExpression是一個(gè)采用逆波蘭式算法結(jié)合指針棧優(yōu)化的公式解析引擎,ProjectManager中包括Project隊(duì)列,Project隊(duì)列用于記錄不同的Project信息;用戶發(fā)起執(zhí)行Flow的請求后,第一獲取裝置101獲取用戶發(fā)起的請求中的作業(yè)執(zhí)行指令,并自所述MySQL數(shù)據(jù)庫中獲取與所述Flow對應(yīng)的拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)。

第二獲取裝置102基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn)。具體地,第二獲取裝置102通過遍歷的方式,例如,廣度優(yōu)先遍歷(BFS),基于第一獲取裝置101獲取的所述作業(yè)間的依賴關(guān)系遍歷Flow的拓?fù)?,查找與所述作業(yè)執(zhí)行指令對應(yīng)的所有節(jié)點(diǎn),所述節(jié)點(diǎn)包括已準(zhǔn)備就緒的可執(zhí)行節(jié)點(diǎn)和已執(zhí)行結(jié)束的不可執(zhí)行節(jié)點(diǎn),第二獲取裝置102獲取所述所有節(jié)點(diǎn)中已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn),形成對應(yīng)的節(jié)點(diǎn)列表,其中第二獲取裝置102將獲取的已準(zhǔn)備就緒的節(jié)點(diǎn)依次放入所述節(jié)點(diǎn)列表中,并且不斷移除所述節(jié)點(diǎn)列表中已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn),以實(shí)現(xiàn)所述節(jié)點(diǎn)列表的持續(xù)更新。其中,調(diào)度裝置1可以基于作業(yè)間復(fù)雜的依賴關(guān)系遍歷Flow的拓?fù)?,所述作業(yè)間的依賴關(guān)系包括以下至少任一項(xiàng):1)順序依賴,例如,不同節(jié)點(diǎn)按照時(shí)間順序進(jìn)行順序執(zhí)行;2)數(shù)據(jù)依賴,例如,當(dāng)前置節(jié)點(diǎn)運(yùn)行完成后,還需檢查某數(shù)據(jù)是否就緒,僅當(dāng)兩者均滿足時(shí),Node開始執(zhí)行;3)選擇依賴,預(yù)先設(shè)置執(zhí)行條件,根據(jù)所述節(jié)點(diǎn)執(zhí)行結(jié)束后滿足的條件確定執(zhí)行下游哪個(gè)Node;4)并行執(zhí)行,工作流中上下游Node同時(shí)執(zhí)行,例如,上游節(jié)點(diǎn)并未執(zhí)行完畢,進(jìn)行到某個(gè)進(jìn)度時(shí),下游節(jié)點(diǎn)也開始執(zhí)行。

優(yōu)選地,第二獲取裝置102包括:第一構(gòu)建單元1021(未示出)、查找單元1022(未示出)和第二構(gòu)建單元1023(未示出)。

其中,第一構(gòu)建單元1021構(gòu)建工作流執(zhí)行對象(FlowRunner)。具體地,第一獲取裝置101獲取用戶提供的作業(yè)執(zhí)行指令后,調(diào)度裝置1構(gòu)建與所述工作流對應(yīng)的工作流執(zhí)行對象FlowRunner,然后將所述FlowRunner的地址插入至FlowRunnerManager的FlowRunner隊(duì)列,F(xiàn)lowRunner對象用于管理該Flow的執(zhí)行實(shí)例,存在唯一的標(biāo)識(shí)exec_id來標(biāo)識(shí)一個(gè)執(zhí)行實(shí)例,其中,所述FlowRunnerManager中包括FlowRunner隊(duì)列,所述FlowRunner隊(duì)列中存儲(chǔ)有至少一個(gè)FlowRunner的地址,用于標(biāo)識(shí)所述至少一個(gè)FlowRunner的位置,例如,所述FlowRunner隊(duì)列中包括FlowRunner1,F(xiàn)lowRunner2,……FlowRunnerN所分別對應(yīng)的地址。

所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系通過查找單元1022查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn)。具體地,F(xiàn)lowRunner基于所述Flow拓?fù)潢P(guān)系與作業(yè)間的依賴關(guān)系定時(shí)輪詢檢查Flow拓?fù)潢P(guān)系中可運(yùn)行的Node與子工作流(SubFlow),確定已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn)以及已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn)。其中,查找單元1022對Flow拓?fù)潢P(guān)系中的Node或者SubFlow根據(jù)以下至少任一項(xiàng)進(jìn)行檢查,以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn):上游節(jié)點(diǎn)是否運(yùn)行完成;所述作業(yè)間的依賴關(guān)系是否滿足;所述節(jié)點(diǎn)是否被設(shè)定為跳過;所述節(jié)點(diǎn)是否為終態(tài);例如,如果對于節(jié)點(diǎn)X來說,第一種情況:查找單元1022通過上述檢查得知:其上游節(jié)點(diǎn)已經(jīng)執(zhí)行完成,并且作業(yè)間的依賴關(guān)系滿足數(shù)據(jù)依賴、選擇依賴或者順序依賴,即:1)上游節(jié)點(diǎn)已經(jīng)執(zhí)行完成,并且預(yù)置的數(shù)據(jù)已經(jīng)準(zhǔn)備就緒-數(shù)據(jù)依賴,或者2)上游節(jié)點(diǎn)的輸出結(jié)果決定了下游的執(zhí)行節(jié)點(diǎn)為節(jié)點(diǎn)X-選擇依賴,或者3)上有節(jié)點(diǎn)執(zhí)行完成后,根據(jù)順序即將執(zhí)行節(jié)點(diǎn)X-順序依賴,并且該節(jié)點(diǎn)未被設(shè)定為跳過以及該節(jié)點(diǎn)不是終態(tài),則該節(jié)點(diǎn)被判定為已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn),或者,第二種情況:查找單元1022通過上述檢查得知:其上游節(jié)點(diǎn)已經(jīng)執(zhí)行至預(yù)定的進(jìn)度,可以同時(shí)執(zhí)行節(jié)點(diǎn)X,并且該節(jié)點(diǎn)未被設(shè)定為跳過以及該節(jié)點(diǎn)不是終態(tài),則該節(jié)點(diǎn)被判定為已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn)。若查找單元1022查找發(fā)現(xiàn)節(jié)點(diǎn)Y為已經(jīng)執(zhí)行結(jié)束的節(jié)點(diǎn),則,將節(jié)點(diǎn)Y判斷為執(zhí)行結(jié)束的節(jié)點(diǎn)。

第二構(gòu)建單元1023根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的作業(yè)執(zhí)行對象(JobRunner)以記錄所述節(jié)點(diǎn)的狀態(tài),其中,所述工作流執(zhí)行對象包括所有作業(yè)執(zhí)行對象(allJobRunner)列表,所述所有作業(yè)執(zhí)行對象列表中包括所有的作業(yè)執(zhí)行對象。具體地,F(xiàn)lowRunner通過查找單元1022查找到已經(jīng)準(zhǔn)備就緒的所述節(jié)點(diǎn)后,第二構(gòu)建單元1023根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的JobRunner,將所述JobRunner插入至FlowRunner中的allJobRunner列表中,并在所述allJobRunner列表添加已經(jīng)準(zhǔn)備就緒的Node,當(dāng)FlowRunner通過查找單元1022查找到的Node為已經(jīng)運(yùn)行結(jié)束的Node時(shí),從所述allJobRunner中移除已經(jīng)運(yùn)行結(jié)束的Node。其中,在作業(yè)執(zhí)行指令所需要的資源被調(diào)度完成后,JobRunner對象啟動(dòng)指令指示遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令,在作業(yè)執(zhí)行指令的執(zhí)行過程中,JobRunner對象基于自身狀態(tài)對外展示用戶指令的執(zhí)行狀態(tài),在所述作業(yè)執(zhí)行指令執(zhí)行完成后,JobRunner對象發(fā)出退出指令指示遠(yuǎn)程作業(yè)執(zhí)行模塊退出,并標(biāo)記Node為運(yùn)行結(jié)束狀態(tài)。

在此,調(diào)度裝置1通過第一構(gòu)建單元1021和第二構(gòu)建單元1023分別構(gòu)建了工作流執(zhí)行對象(FlowRunner)和作業(yè)執(zhí)行對象(JobRunner),在用戶發(fā)出的作業(yè)執(zhí)行指令時(shí),JobRunner對象響應(yīng)用戶的作業(yè)執(zhí)行指令請求,在所述作業(yè)執(zhí)行指令的執(zhí)行過程中,JobRunner記錄節(jié)點(diǎn)的執(zhí)行狀態(tài)。FlowRunner全局掌控所述工作流(Flow)執(zhí)行過程,從節(jié)點(diǎn)的JobRunner對象獲取節(jié)點(diǎn)是否執(zhí)行結(jié)束。

確定裝置103通過資源管理模塊(ResourceManager)確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊。具體地,ResourceManager定時(shí)遍歷FlowRunnerManager中FlowRunner列表,針對每個(gè)FlowRunner向集群資源調(diào)度系統(tǒng),例如,Normandy系統(tǒng),添加唯一對應(yīng)的應(yīng)用,ResourceManager針對每個(gè)FlowRunner對象遍歷其allJobRunner列表,確定已經(jīng)準(zhǔn)備就緒的所述Node需要的資源配額,然后所述集群資源調(diào)度系統(tǒng)從集群資源池中調(diào)度并分配對應(yīng)的資源,推送至ResourceManager。在此,集群資源調(diào)度系統(tǒng),例如Normandy系統(tǒng),根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,將該資源配額所對應(yīng)的資源的位置提供至該資源管理模塊,從而該資源管理模塊可以根據(jù)該位置去使用對應(yīng)的資源。并且,ResourceManager針對FlowRunner中已經(jīng)運(yùn)行結(jié)束的Node,向所述集群資源調(diào)度系統(tǒng)發(fā)起釋放對應(yīng)資源的請求,以進(jìn)行集群資源的回收。

在此,調(diào)度裝置1基于集群資源調(diào)度系統(tǒng)實(shí)現(xiàn)工作流的分布式化運(yùn)行,可以接受不同計(jì)算平臺(tái)發(fā)起的資源邀約,快速分配約定資源以及按照指令使用與回收資源,同時(shí)對外提供良好的操作界面與用戶接口,并且采用集群資源調(diào)度系統(tǒng)分離了工作流的調(diào)度與資源管理邏輯,降低了資源調(diào)度系統(tǒng)迭代對于工作流調(diào)度系統(tǒng)的影響。

優(yōu)選地,調(diào)度裝置1還包括:劃分裝置105(未示出)和記錄裝置106(未示出)。

其中,劃分裝置105由所述資源管理模塊(ResourceManager)根據(jù)所述節(jié)點(diǎn)所需要的資源配額的大小將至少一種資源配額劃分為不同種類的資源配額,其中,每種資源配額分別與工作流對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的一個(gè)作業(yè)(Job)相對應(yīng),同一種類資源配額中的每份資源分別與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)相對應(yīng)。具體地,ResourceManager針對每個(gè)FlowRunner對象遍歷其allJobRunner列表,對不同Node所要求的資源配額,按照資源配額的大小分為不同種類的資源配額,例如,allJobRunner列表中存在四個(gè)JobRunner,分別對應(yīng)Node1、Node2、Node3、Node4,其中,Node1要求的資源配額為:3個(gè)CPU,128M內(nèi)存,Node2要求的資源配額為:2個(gè)CPU,56M內(nèi)存,Node3要求的資源配額為:2個(gè)CPU,56M內(nèi)存,Node4要求的資源配額為:3個(gè)CPU,128M內(nèi)存,Node5要求的資源配額為:2個(gè)CPU,56M內(nèi)存,則Node1和Node4要求的資源配額大小相同都為3個(gè)CPU,128M內(nèi)存,Node1和Node4要求的資源配額屬于同一種資源配額,例如為資源配額A,則資源配額A中有2份資源;Node2、Node3和Node5要求的資源配額大小相同,都為2個(gè)CPU,56M內(nèi)存,Node2、Node3和Node5要求的資源配額屬于同一種資源配額,例如為資源配額B,則資源配額B中有3份資源。資源配額A和資源配額B分別對應(yīng)集群資源調(diào)度系統(tǒng),例如為Normandy系統(tǒng),中所述Flow對應(yīng)的應(yīng)用下的一個(gè)作業(yè)(Job)。資源配額A中的一份資源與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)(task)相對應(yīng)。

記錄裝置106通過所述資源管理模塊記錄每個(gè)工作流中的每種資源配額及其所分別對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的作業(yè)。具體地,ResourceManager記錄每個(gè)Flow不同種類的資源配額與所對應(yīng)的作業(yè)(Job)的一一對應(yīng)關(guān)系,以便ResourceManager檢測到新節(jié)點(diǎn)或者減少的節(jié)點(diǎn)時(shí)根據(jù)所述新節(jié)點(diǎn)或者減少的節(jié)點(diǎn)的資源配額的種類進(jìn)行后續(xù)操作,例如添加或者減少Job,或者增加或者減少Task并發(fā)數(shù)量。

優(yōu)選地,確定裝置103還包括:檢測單元1031(未示出)、比較單元1032(未示出)和更新單元1033(未示出)。

其中,檢測單元1031通過所述資源管理模塊遍歷所述所有作業(yè)執(zhí)行對象列表以檢測是否存在節(jié)點(diǎn)的增減。具體地,檢測單元1031通過ResourceManager定時(shí)遍歷allJobRunner列表,檢測allJobRunner列表中是否增加或者減少了JobRunner,以判斷是否存在節(jié)點(diǎn)的增減。

比較單元1032將增減的所述節(jié)點(diǎn)所要求的資源配額與所述每個(gè)工作流中的每種資源配額分別進(jìn)行比較,獲得比較結(jié)果。具體地,檢測單元1031發(fā)現(xiàn)包含增加或者減少了一個(gè)Node,比較單元1032將該Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較,獲得比較結(jié)果。

更新單元1033根據(jù)所述比較結(jié)果決定向所述集群資源調(diào)度系統(tǒng)對應(yīng)的應(yīng)用添加新的作業(yè)或者更新已添加作業(yè)的任務(wù)并發(fā)數(shù)量。具體地,當(dāng)比較單元1032將增加的Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較后,當(dāng)比較結(jié)果為所述Node要求的資源配額為一種新的資源配額時(shí),向集群資源調(diào)度系統(tǒng)對應(yīng)應(yīng)用下添加一個(gè)新的Job,更新單元1033并將其Task并發(fā)置為1;當(dāng)比較結(jié)果為所述Node要求的資源配額為ResourceManager中已經(jīng)記錄的資源配額時(shí),更新單元1033將其對應(yīng)Job的Task并發(fā)增加1;檢測單元1031發(fā)現(xiàn)已有資源配額種類的Node減少N時(shí),比較單元1032將減少的Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較,獲得該種資源配額所對應(yīng)的Job,然后更新單元1033將所述Job的Task并發(fā)減少N。

在此,集群資源調(diào)度系統(tǒng)根據(jù)Job的資源約束與對應(yīng)的Task并發(fā)數(shù)量,從集群資源池中調(diào)度與分配資源,并推送至ResourceManager。

由已獲取所述資源的所述資源管理模塊通過資源調(diào)度代理發(fā)送啟動(dòng)指令,執(zhí)行裝置104啟動(dòng)遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令。具體地,確定裝置103通過資源管理模塊確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊,ResourceManager接受集群資源調(diào)度系統(tǒng)分配的資源后,選擇待運(yùn)行的對應(yīng)資源配額的Node綁定資源,產(chǎn)生集群資源調(diào)度系統(tǒng)中的Task進(jìn)行執(zhí)行。執(zhí)行裝置104由ResourceManager通過服務(wù)器端集群資源調(diào)度系統(tǒng)代理,例如,NormandyAgent,發(fā)送啟動(dòng)RemoteJobRunner指令后,本地NormandyAgent開始下載RemoteJobRunner與用戶作業(yè)的運(yùn)行環(huán)境,并啟動(dòng)RemoteJobRunner;RemoteJobRunner啟動(dòng)后與FlowRunner建立通信,獲取其需要執(zhí)行的Node信息,并執(zhí)行該Node中描述的用戶指令,即執(zhí)行用戶作業(yè)。

在此,調(diào)度裝置1參照依賴關(guān)系遍歷工作流的拓?fù)洌瑫r(shí)向集群資源調(diào)度系統(tǒng)發(fā)起資源的申請與回收指令,很好的分離了工作流中的調(diào)度邏輯與執(zhí)行邏輯,實(shí)現(xiàn)了服務(wù)器裝置調(diào)度和集群節(jié)點(diǎn)專職執(zhí)行。

優(yōu)選地,第二獲取裝置102還用于:1)所述作業(yè)執(zhí)行對象獲取并記錄所述遠(yuǎn)程作業(yè)執(zhí)行模塊發(fā)送的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)的作業(yè)執(zhí)行狀態(tài)。具體地,RemoeteJobRunner定時(shí)檢查用戶作業(yè)進(jìn)程,依靠心跳向JobRunner匯報(bào)作業(yè)運(yùn)行狀態(tài)以供FlowRunner查看,JobRunner根據(jù)作業(yè)的運(yùn)行狀態(tài)回應(yīng)心跳,其中包含相應(yīng)的操作指令。2)當(dāng)所述節(jié)點(diǎn)的所述作業(yè)執(zhí)行狀態(tài)為執(zhí)行結(jié)束狀態(tài)時(shí),所述作業(yè)執(zhí)行對象指示與所述節(jié)點(diǎn)對應(yīng)的所述遠(yuǎn)程作業(yè)執(zhí)行模塊退出。具體地,RemoteJobRunner執(zhí)行完成之后,通知JobRunner其已經(jīng)完成作業(yè)執(zhí)行指令的執(zhí)行過程,JobRunner記錄RemoteJobRunner的結(jié)束狀態(tài),JobRunner向RemoteJobRunner發(fā)送退出指令,指示RemoteJobRunner退出。

優(yōu)選地,所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已執(zhí)行結(jié)束的節(jié)點(diǎn),并指示所述資源管理模塊回收所述已執(zhí)行結(jié)束的節(jié)點(diǎn)對應(yīng)的資源。具體地,F(xiàn)lowRunner基于所述Flow拓?fù)潢P(guān)系與作業(yè)間的依賴關(guān)系定時(shí)輪詢檢查JobRunner中記錄的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),確定已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn),通知ResourceManager回收資源。ResourceManager向集群資源調(diào)度系統(tǒng),例如為Normandy系統(tǒng),發(fā)起釋放對應(yīng)資源的請求,以進(jìn)行集群資源的回收。

以下將通過一個(gè)實(shí)例具體說明調(diào)度裝置1的具體執(zhí)行過程。

例如,圖2示出通過調(diào)度裝置1實(shí)現(xiàn)分布式工作流調(diào)度的系統(tǒng)W的整體架構(gòu),該系統(tǒng)使用Normandy系統(tǒng)實(shí)現(xiàn)工作流的分布式化運(yùn)行,至少包括以下幾個(gè)Server:網(wǎng)絡(luò)服務(wù)器(WebServer)、執(zhí)行服務(wù)器(ExecutorServer)、MySQL服務(wù)器(MySQLServer),圖3-a和3-b分別示出WebServer和ExecutorServer的結(jié)構(gòu)圖。第一獲取裝置101自MySQL服務(wù)器獲取用戶提供的作業(yè)執(zhí)行指令、工作流拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系;第二獲取裝置102通過FlowRunner獲取已準(zhǔn)備就緒的節(jié)點(diǎn);確定裝置103通過ExecutorServer中的資源管理模塊(ResourceManager)確定所述已準(zhǔn)備就緒的節(jié)點(diǎn)所需要的資源配額,通過圖2中的Normandy系統(tǒng)中的NormandyScheduler調(diào)度與所述集群資源配額對應(yīng)的資源至ResourceManager,執(zhí)行裝置104通過圖2中虛線框的區(qū)域?qū)崿F(xiàn)所述作業(yè)執(zhí)行指令的執(zhí)行過程。

通過調(diào)度裝置1實(shí)現(xiàn)分布式工作流調(diào)度的系統(tǒng)W按照Azkaban中對于工作流(Workflow)的抽象:Project、Flow與Node。其中Project描述了工作流的功能邊界,由零或多個(gè)Flow組成;Flow是工作流中功能模塊的抽象,由多個(gè)Node或Flow按照依賴關(guān)系組成結(jié)束Node僅有一個(gè)的拓?fù)?DAG);Node是工作流中最小的執(zhí)行單位,其描述了對上游節(jié)點(diǎn)的依賴關(guān)系與自身執(zhí)行指令。該結(jié)構(gòu)抽象中,F(xiàn)low的一次執(zhí)行產(chǎn)生工作流的一個(gè)執(zhí)行實(shí)例。調(diào)度裝置1中的調(diào)度邏輯是指基于廣度優(yōu)先遍歷(BFS)方式參照作業(yè)間的依賴關(guān)系遍歷Flow的拓?fù)?,同時(shí)向集群資源調(diào)度系統(tǒng),例如,Normandy系統(tǒng),發(fā)起資源的申請與回收指令,包括作業(yè)間依賴管理與資源管理兩部分。

作業(yè)間依賴管理的核心是按照Flow拓?fù)浣Y(jié)構(gòu)與作業(yè)間依賴關(guān)系尋找可執(zhí)行與執(zhí)行結(jié)束的Node形成列表以供處理,由ExecutorServer完成。作業(yè)間依賴管理中作業(yè)間除順序依賴關(guān)系外還包括:

數(shù)據(jù)依賴:前置節(jié)點(diǎn)運(yùn)行完成后,還需檢查某數(shù)據(jù)是否就緒,僅當(dāng)兩者均滿足時(shí),Node開始執(zhí)行;

選擇依賴:本Node依靠輸出決定執(zhí)行下游哪個(gè)Node;

并行執(zhí)行:工作流中上下游Node同時(shí)執(zhí)行。

資源管理是指依賴系統(tǒng)W的執(zhí)行服務(wù)器(ExecutorServer)與集群資源調(diào)度系統(tǒng)Normandy Scheduler的交互,向Normandy系統(tǒng)發(fā)送申請與回收資源指令,系統(tǒng)W中進(jìn)行資源管理的最小單位是Node。

調(diào)度邏輯中的詳細(xì)過程包括:

系統(tǒng)W構(gòu)建全局對象ProjectManager,啟動(dòng)單獨(dú)線程用于管理所有Project拓?fù)涞纳蟼鳌⒔馕雠c下載;構(gòu)建位于ExecutorServer中的全局對象FlowRunnerManager,啟動(dòng)單獨(dú)線程用于管理所有Flow的執(zhí)行實(shí)例;構(gòu)建全局對象ResourceManager,啟動(dòng)單獨(dú)線程用于和Normandy系統(tǒng)交互,管理資源的申請與回收;

用戶上傳工作流拓?fù)涿枋龊?,ProjectManager解析該拓?fù)潢P(guān)系,使用IKExpression解析作業(yè)間依賴關(guān)系,然后存儲(chǔ)兩者至MySQL數(shù)據(jù)庫和Hadoop分布式文件系統(tǒng)(HDFS),并基于唯一的Project ID插入ProjectManager中Project隊(duì)列。

用戶發(fā)起執(zhí)行Flow的請求后,系統(tǒng)W構(gòu)建位于ExecutorServer中的FlowRunner對象,插入FlowRunnerManager的FlowRunner隊(duì)列。FlowRunner對象用于管理該Flow的執(zhí)行實(shí)例,存在唯一的exec_id標(biāo)識(shí)一個(gè)執(zhí)行實(shí)例。

FlowRunner基于拓?fù)渑c依賴關(guān)系定時(shí)輪詢檢查Flow拓?fù)渲锌蛇\(yùn)行的Node與SubFlow,檢查過程包括上游節(jié)點(diǎn)是否運(yùn)行完成;上述依賴關(guān)系是否滿足;該節(jié)點(diǎn)是否被人為設(shè)定跳過;該節(jié)點(diǎn)是否為終態(tài)。檢查通過后向FlowRunner中allJobRunner列表追加已就緒Node,移除已經(jīng)運(yùn)行結(jié)束的Node。

ResourceManager定時(shí)遍歷FlowRunnerManager對象中FlowRunner列表,針對每個(gè)FlowRunner向Normandy系統(tǒng)添加唯一對應(yīng)的App,ResourceManager針對每個(gè)FlowRunner對象遍歷其allJobRunner列表,根據(jù)Node所要求的資源配額進(jìn)行分類,其中一種資源配額對應(yīng)Normandy系統(tǒng)中該Flow對應(yīng)App下的一個(gè)Job。

ResourceManager中記錄每個(gè)Flow不同種類的資源配額所對應(yīng)的Job,在其遍歷allJobRunner列表時(shí),發(fā)現(xiàn)包含一種新的資源配額的Node時(shí),向Normandy系統(tǒng)對應(yīng)App下添加一個(gè)新的Job,并將其Task并發(fā)置為1;發(fā)現(xiàn)已有資源配額種類的新的Node時(shí),將其對應(yīng)Job的Task并發(fā)增加1;發(fā)現(xiàn)已有資源配額種類的Node減少N時(shí),將其對應(yīng)Job的Task并發(fā)減少N。

Normandy系統(tǒng)根據(jù)Job的資源約束與Task并發(fā)要求,從集群資源池中調(diào)度與分配資源(Instance),并推送至系統(tǒng)W的ResourceManager。

ResourceManager接受Normandy系統(tǒng)分配的資源后,選擇待運(yùn)行的對應(yīng)資源配額的Node綁定Instance產(chǎn)生Normandy系統(tǒng)中的Task進(jìn)行執(zhí)行。同時(shí)ResourceManager針對FlowRunner中已經(jīng)運(yùn)行結(jié)束的Node,向Normandy系統(tǒng)發(fā)起釋放對應(yīng)Instance的請求,以進(jìn)行集群資源的回收。

系統(tǒng)W的執(zhí)行邏輯是指用戶構(gòu)建的Node所描述的作業(yè)在集群節(jié)點(diǎn)中的執(zhí)行與監(jiān)控過程,其由系統(tǒng)W中RemoteJobRunner與Normandy系統(tǒng)中Normandy Agent共同完成。RemoteJobRunner負(fù)責(zé)監(jiān)控與管理用戶作業(yè),Normandy Agent用于準(zhǔn)備RemoteJobRunner的運(yùn)行環(huán)境并啟動(dòng)、監(jiān)控RemoteJobRunner運(yùn)行。

執(zhí)行邏輯的詳細(xì)過程包括:

集群節(jié)點(diǎn)中的本地NormandyAgent接受到系統(tǒng)W ResourceMnanager通過Server端NormandyAgent發(fā)送的啟動(dòng)RemoteJobRunner指令后,本地NormandyAgent開始下載RemoteJobRunner與用戶作業(yè)的運(yùn)行環(huán)境,并啟動(dòng)RemoteJobRunner;RemoteJobRunner啟動(dòng)后與系統(tǒng)W中FlowRunner建立通信,獲取其需要執(zhí)行的Node信息,并執(zhí)行該Node中描述的用戶指令,即執(zhí)行用戶作業(yè);RemoeteJobRunner定時(shí)檢查用戶作業(yè)進(jìn)程,依靠心跳向JobRunner匯報(bào)作業(yè)運(yùn)行狀態(tài),JobRunner根據(jù)作業(yè)的運(yùn)行狀態(tài)回應(yīng)心跳,其中包含相應(yīng)的操作指令;JobRunner發(fā)現(xiàn)作業(yè)結(jié)束時(shí),會(huì)要求RemoteJobRunner退出,并通知ResourceManager回收資源。

圖4示出根據(jù)本發(fā)明一個(gè)方面的一種分布式工作流調(diào)度的工作流的流程示意圖。

其中,在步驟S401中,調(diào)度裝置1獲取用戶提供的作業(yè)執(zhí)行指令、工作流拓?fù)潢P(guān)系以及作業(yè)間的依賴關(guān)系。具體地,用戶上傳工作流拓?fù)涿枋龊?,調(diào)度裝置1解析所述拓?fù)涿枋鲋须[含的工作流拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,然后存儲(chǔ)至對應(yīng)的數(shù)據(jù)庫與Hadoop分布式文件系統(tǒng)(HDFS)中,當(dāng)用戶通過計(jì)算機(jī)設(shè)備發(fā)起執(zhí)行工作流(Flow)的請求后,在步驟S401中,調(diào)度裝置1獲取用戶發(fā)起的請求中的作業(yè)執(zhí)行指令,以及自所述數(shù)據(jù)庫中獲取與所述Flow對應(yīng)的拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,其中,在步驟S401中,調(diào)度裝置1例如通過一次或者多次調(diào)用所述設(shè)備所提供的應(yīng)用程序接口(API)或其他約定的通信方式,獲取用戶發(fā)起的作業(yè)執(zhí)行指令。例如,用戶上傳工作流拓?fù)涿枋龊?,ProjectManager解析工作流拓?fù)潢P(guān)系,IKExpression解析作業(yè)間依賴關(guān)系,然后存儲(chǔ)所述工作流拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系至MySQL數(shù)據(jù)庫,并基于唯一的項(xiàng)目標(biāo)識(shí)(Project ID)插入ProjectManager中的Project隊(duì)列,其中,IKExpression是一個(gè)采用逆波蘭式算法結(jié)合指針棧優(yōu)化的公式解析引擎,ProjectManager中包括Project隊(duì)列,Project隊(duì)列用于記錄不同的Project信息;用戶發(fā)起執(zhí)行Flow的請求后,在步驟S401中,調(diào)度裝置1獲取用戶發(fā)起的請求中的作業(yè)執(zhí)行指令,并自所述MySQL數(shù)據(jù)庫中獲取與所述Flow對應(yīng)的拓?fù)潢P(guān)系和作業(yè)間的依賴關(guān)系,以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)。

在步驟S402中,調(diào)度裝置1基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn)。具體地,在步驟S402中,調(diào)度裝置1通過遍歷的方式,例如,廣度優(yōu)先遍歷(BFS),基于獲取的所述作業(yè)間的依賴關(guān)系遍歷Flow的拓?fù)?,查找與所述作業(yè)執(zhí)行指令對應(yīng)的所有節(jié)點(diǎn),所述節(jié)點(diǎn)包括已準(zhǔn)備就緒的可執(zhí)行節(jié)點(diǎn)和已執(zhí)行結(jié)束的不可執(zhí)行節(jié)點(diǎn),在步驟S402中,調(diào)度裝置1獲取所述所有節(jié)點(diǎn)中已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn),形成對應(yīng)的節(jié)點(diǎn)列表,其中在步驟S402中,調(diào)度裝置1將獲取的已準(zhǔn)備就緒的節(jié)點(diǎn)依次放入所述節(jié)點(diǎn)列表中,并且不斷移除所述節(jié)點(diǎn)列表中已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn),以實(shí)現(xiàn)所述節(jié)點(diǎn)列表的持續(xù)更新。其中,調(diào)度裝置1可以基于作業(yè)間復(fù)雜的依賴關(guān)系遍歷Flow的拓?fù)?,所述作業(yè)間的依賴關(guān)系包括以下至少任一項(xiàng):1)順序依賴,例如,不同節(jié)點(diǎn)按照時(shí)間順序進(jìn)行順序執(zhí)行;2)數(shù)據(jù)依賴,例如,當(dāng)前置節(jié)點(diǎn)運(yùn)行完成后,還需檢查某數(shù)據(jù)是否就緒,僅當(dāng)兩者均滿足時(shí),Node開始執(zhí)行;3)選擇依賴,預(yù)先設(shè)置執(zhí)行條件,根據(jù)所述節(jié)點(diǎn)執(zhí)行結(jié)束后滿足的條件確定執(zhí)行下游哪個(gè)Node;4)并行執(zhí)行,工作流中上下游Node同時(shí)執(zhí)行,例如,上游節(jié)點(diǎn)并未執(zhí)行完畢,進(jìn)行到某個(gè)進(jìn)度時(shí),下游節(jié)點(diǎn)也開始執(zhí)行。

優(yōu)選地,步驟S402包括:子步驟S4021(未示出)、子步驟S4022(未示出)和子步驟S4023(未示出)。

其中,在子步驟S4021中,調(diào)度裝置1構(gòu)建工作流執(zhí)行對象(FlowRunner)。具體地,在子步驟S4021中,調(diào)度裝置1獲取用戶提供的作業(yè)執(zhí)行指令后,調(diào)度裝置1構(gòu)建與所述工作流對應(yīng)的工作流執(zhí)行對象FlowRunner,然后將所述FlowRunner的地址插入至FlowRunnerManager的FlowRunner隊(duì)列,F(xiàn)lowRunner對象用于管理該Flow的執(zhí)行實(shí)例,存在唯一的標(biāo)識(shí)exec_id來標(biāo)識(shí)一個(gè)執(zhí)行實(shí)例,其中,所述FlowRunnerManager中包括FlowRunner隊(duì)列,所述FlowRunner隊(duì)列中存儲(chǔ)有至少一個(gè)FlowRunner的地址,用于標(biāo)識(shí)所述至少一個(gè)FlowRunner的位置,例如,所述FlowRunner隊(duì)列中包括FlowRunner1,F(xiàn)lowRunner2,……FlowRunnerN所分別對應(yīng)的地址。

所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系調(diào)度裝置1在子步驟S4022中查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已準(zhǔn)備就緒的所述節(jié)點(diǎn)。具體地,F(xiàn)lowRunner基于所述Flow拓?fù)潢P(guān)系與作業(yè)間的依賴關(guān)系定時(shí)輪詢檢查Flow拓?fù)潢P(guān)系中可運(yùn)行的Node與子工作流(SubFlow),確定已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn)以及已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn)。其中,在子步驟S4022中,調(diào)度裝置1對Flow拓?fù)潢P(guān)系中的Node或者SubFlow根據(jù)以下至少任一項(xiàng)進(jìn)行檢查,以查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn):上游節(jié)點(diǎn)是否運(yùn)行完成;所述作業(yè)間的依賴關(guān)系是否滿足;所述節(jié)點(diǎn)是否被設(shè)定為跳過;所述節(jié)點(diǎn)是否為終態(tài);例如,如果對于節(jié)點(diǎn)X來說,第一種情況:在子步驟S4022中,調(diào)度裝置1通過上述檢查得知:其上游節(jié)點(diǎn)已經(jīng)執(zhí)行完成,并且作業(yè)間的依賴關(guān)系滿足數(shù)據(jù)依賴、選擇依賴或者順序依賴,即:1)上游節(jié)點(diǎn)已經(jīng)執(zhí)行完成,并且預(yù)置的數(shù)據(jù)已經(jīng)準(zhǔn)備就緒-數(shù)據(jù)依賴,或者2)上游節(jié)點(diǎn)的輸出結(jié)果決定了下游的執(zhí)行節(jié)點(diǎn)為節(jié)點(diǎn)X-選擇依賴,或者3)上有節(jié)點(diǎn)執(zhí)行完成后,根據(jù)順序即將執(zhí)行節(jié)點(diǎn)X-順序依賴,并且該節(jié)點(diǎn)未被設(shè)定為跳過以及該節(jié)點(diǎn)不是終態(tài),則該節(jié)點(diǎn)被判定為已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn),或者,第二種情況:在子步驟S4022中,調(diào)度裝置1通過上述檢查得知:其上游節(jié)點(diǎn)已經(jīng)執(zhí)行至預(yù)定的進(jìn)度,可以同時(shí)執(zhí)行節(jié)點(diǎn)X,并且該節(jié)點(diǎn)未被設(shè)定為跳過以及該節(jié)點(diǎn)不是終態(tài),則該節(jié)點(diǎn)被判定為已經(jīng)準(zhǔn)備就緒的節(jié)點(diǎn)。若在子步驟S4022中,調(diào)度裝置1查找發(fā)現(xiàn)節(jié)點(diǎn)Y為已經(jīng)執(zhí)行結(jié)束的節(jié)點(diǎn),則,將節(jié)點(diǎn)Y判斷為執(zhí)行結(jié)束的節(jié)點(diǎn)。

在子步驟S4023中,調(diào)度裝置1根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的作業(yè)執(zhí)行對象(JobRunner)以記錄所述節(jié)點(diǎn)的狀態(tài),其中,所述工作流執(zhí)行對象包括所有作業(yè)執(zhí)行對象(allJobRunner)列表,所述所有作業(yè)執(zhí)行對象列表中包括所有的作業(yè)執(zhí)行對象。具體地,F(xiàn)lowRunner通過調(diào)度裝置1在子步驟S4021中查找到已經(jīng)準(zhǔn)備就緒的所述節(jié)點(diǎn)后,在子步驟S4023中,調(diào)度裝置1根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)構(gòu)建對應(yīng)的JobRunner,將所述JobRunner插入至FlowRunner中的allJobRunner列表中,并在所述allJobRunner列表添加已經(jīng)準(zhǔn)備就緒的Node,當(dāng)FlowRunner通過調(diào)度裝置1在子步驟S4022中查找到的Node為已經(jīng)運(yùn)行結(jié)束的Node時(shí),從所述allJobRunner中移除已經(jīng)運(yùn)行結(jié)束的Node。其中,在作業(yè)執(zhí)行指令所需要的資源被調(diào)度完成后,JobRunner對象啟動(dòng)指令指示遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令,在作業(yè)執(zhí)行指令的執(zhí)行過程中,JobRunner對象基于自身狀態(tài)對外展示用戶指令的執(zhí)行狀態(tài),在所述作業(yè)執(zhí)行指令執(zhí)行完成后,JobRunner對象發(fā)出退出指令指示遠(yuǎn)程作業(yè)執(zhí)行模塊退出,并標(biāo)記Node為運(yùn)行結(jié)束狀態(tài)。

在此,調(diào)度裝置1通過子步驟S4021和子步驟S4023分別構(gòu)建了工作流執(zhí)行對象(FlowRunner)和作業(yè)執(zhí)行對象(JobRunner),在用戶發(fā)出的作業(yè)執(zhí)行指令時(shí),JobRunner對象響應(yīng)用戶的作業(yè)執(zhí)行指令請求,在所述作業(yè)執(zhí)行指令的執(zhí)行過程中,JobRunner記錄節(jié)點(diǎn)的執(zhí)行狀態(tài)。FlowRunner全局掌控所述工作流(Flow)執(zhí)行過程,從節(jié)點(diǎn)的JobRunner對象獲取節(jié)點(diǎn)是否執(zhí)行結(jié)束。

在步驟S403中,調(diào)度裝置1通過資源管理模塊(ResourceManager)確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊。具體地,ResourceManager定時(shí)遍歷FlowRunnerManager中FlowRunner列表,針對每個(gè)FlowRunner向集群資源調(diào)度系統(tǒng),例如,Normandy系統(tǒng),添加唯一對應(yīng)的應(yīng)用,ResourceManager針對每個(gè)FlowRunner對象遍歷其allJobRunner列表,確定已經(jīng)準(zhǔn)備就緒的所述Node需要的資源配額,然后所述集群資源調(diào)度系統(tǒng)從集群資源池中調(diào)度并分配對應(yīng)的資源,推送至ResourceManager。在此,集群資源調(diào)度系統(tǒng),例如,Normandy系統(tǒng),根據(jù)已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,將該資源配額所對應(yīng)的資源的位置提供至該資源管理模塊,從而該資源管理模塊可以根據(jù)該位置去使用對應(yīng)的資源。并且,ResourceManager針對FlowRunner中已經(jīng)運(yùn)行結(jié)束的Node,向所述集群資源調(diào)度系統(tǒng)發(fā)起釋放對應(yīng)資源的請求,以進(jìn)行集群資源的回收。

在此,調(diào)度裝置1基于集群資源調(diào)度系統(tǒng)實(shí)現(xiàn)工作流的分布式化運(yùn)行,可以接受不同計(jì)算平臺(tái)發(fā)起的資源邀約,快速分配約定資源以及按照指令使用與回收資源,同時(shí)對外提供良好的操作界面與用戶接口,并且采用集群資源調(diào)度系統(tǒng)分離了工作流的調(diào)度與資源管理邏輯,降低了資源調(diào)度系統(tǒng)迭代對于工作流調(diào)度系統(tǒng)的影響。

優(yōu)選地,調(diào)度裝置1還包括:步驟S405(未示出)和步驟S406(未示出)。

其中,在步驟S405中,調(diào)度裝置1由所述資源管理模塊(ResourceManager)根據(jù)所述節(jié)點(diǎn)所需要的資源配額的大小將至少一種資源配額劃分為不同種類的資源配額,其中,每種資源配額分別與工作流對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的一個(gè)作業(yè)(Job)相對應(yīng),同一種類資源配額中的每份資源分別與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)相對應(yīng)。具體地,ResourceManager針對每個(gè)FlowRunner對象遍歷其allJobRunner列表,對不同Node所要求的資源配額,按照資源配額的大小分為不同種類的資源配額,例如,allJobRunner列表中存在四個(gè)JobRunner,分別對應(yīng)Node1、Node2、Node3、Node4,其中,Node1要求的資源配額為:3個(gè)CPU,128M內(nèi)存,Node2要求的資源配額為:2個(gè)CPU,56M內(nèi)存,Node3要求的資源配額為:2個(gè)CPU,56M內(nèi)存,Node4要求的資源配額為:3個(gè)CPU,128M內(nèi)存,Node5要求的資源配額為:2個(gè)CPU,56M內(nèi)存,則Node1和Node4要求的資源配額大小相同都為3個(gè)CPU,128M內(nèi)存,Node1和Node4要求的資源配額屬于同一種資源配額,例如為資源配額A,則資源配額A中有2份資源;Node2、Node3和Node5要求的資源配額大小相同,都為2個(gè)CPU,56M內(nèi)存,Node2、Node3和Node5要求的資源配額屬于同一種資源配額,例如為資源配額B,則資源配額B中有3份資源。資源配額A和資源配額B分別對應(yīng)集群資源調(diào)度系統(tǒng),例如為Normandy系統(tǒng),中所述Flow對應(yīng)的應(yīng)用下的一個(gè)作業(yè)(Job)。資源配額A中的一份資源與所述種類資源配額對應(yīng)作業(yè)的一個(gè)任務(wù)(task)相對應(yīng)。

在步驟S406中,調(diào)度裝置1通過所述資源管理模塊記錄每個(gè)工作流中的每種資源配額及其所分別對應(yīng)的所述集群資源調(diào)度系統(tǒng)中應(yīng)用的作業(yè)。具體地,ResourceManager記錄每個(gè)Flow不同種類的資源配額與所對應(yīng)的作業(yè)(Job)的一一對應(yīng)關(guān)系,以便ResourceManager檢測到新節(jié)點(diǎn)或者減少的節(jié)點(diǎn)時(shí)根據(jù)所述新節(jié)點(diǎn)或者減少的節(jié)點(diǎn)的資源配額的種類進(jìn)行后續(xù)操作,例如添加或者減少Job,或者增加或者減少Task并發(fā)數(shù)量。

優(yōu)選地,步驟S403還包括:子步驟S4031(未示出)、子步驟S4032(未示出)和子步驟S4033(未示出)。

其中,在子步驟S4031中,調(diào)度裝置1通過所述資源管理模塊遍歷所述所有作業(yè)執(zhí)行對象列表以檢測是否存在節(jié)點(diǎn)的增減。具體地,在子步驟S4031中,調(diào)度裝置1通過ResourceManager定時(shí)遍歷allJobRunner列表,檢測allJobRunner列表中是否增加或者減少了JobRunner,以判斷是否存在節(jié)點(diǎn)的增減。

在子步驟S4032中,調(diào)度裝置1將增減的所述節(jié)點(diǎn)所要求的資源配額與所述每個(gè)工作流中的每種資源配額分別進(jìn)行比較,獲得比較結(jié)果。具體地,在子步驟S4031中,調(diào)度裝置1發(fā)現(xiàn)包含增加或者減少了一個(gè)Node,在子步驟S4032中,調(diào)度裝置1將該Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較,獲得比較結(jié)果。

在子步驟S4033中,調(diào)度裝置1根據(jù)所述比較結(jié)果決定向所述集群資源調(diào)度系統(tǒng)對應(yīng)的應(yīng)用添加新的作業(yè)或者更新已添加作業(yè)的任務(wù)并發(fā)數(shù)量。具體地,當(dāng)調(diào)度裝置1在子步驟S4032中將增加的Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較后,當(dāng)比較結(jié)果為所述Node要求的資源配額為一種新的資源配額時(shí),向集群資源調(diào)度系統(tǒng)對應(yīng)應(yīng)用下添加一個(gè)新的Job,在子步驟S4033中,調(diào)度裝置1并將其Task并發(fā)置為1;當(dāng)比較結(jié)果為所述Node要求的資源配額為ResourceManager中已經(jīng)記錄的資源配額時(shí),在子步驟S4033中,調(diào)度裝置1將其對應(yīng)Job的Task并發(fā)增加1;在子步驟S4031中,調(diào)度裝置1發(fā)現(xiàn)已有資源配額種類的Node減少N時(shí),在子步驟S4032中,調(diào)度裝置1將減少的Node所要求的資源配額的種類與ResourceManager中已經(jīng)記錄的工作流中的資源配額種類進(jìn)行比較,獲得該種資源配額所對應(yīng)的Job,然后在子步驟S4033中,調(diào)度裝置1將所述Job的Task并發(fā)減少N。

在此,集群資源調(diào)度系統(tǒng)根據(jù)Job的資源約束與對應(yīng)的Task并發(fā)數(shù)量,從集群資源池中調(diào)度與分配資源,并推送至ResourceManager。

由已獲取所述資源的所述資源管理模塊通過資源調(diào)度代理發(fā)送啟動(dòng)指令,在步驟S404中,調(diào)度裝置1啟動(dòng)遠(yuǎn)程作業(yè)執(zhí)行模塊執(zhí)行所述作業(yè)執(zhí)行指令。具體地,在步驟S403中,調(diào)度裝置1通過資源管理模塊確定已準(zhǔn)備就緒的所述節(jié)點(diǎn)所需要的資源配額,并通過集群資源調(diào)度系統(tǒng)調(diào)度與所述集群資源配額對應(yīng)的資源至所述資源管理模塊,ResourceManager接受集群資源調(diào)度系統(tǒng)分配的資源后,選擇待運(yùn)行的對應(yīng)資源配額的Node綁定資源,產(chǎn)生集群資源調(diào)度系統(tǒng)中的Task進(jìn)行執(zhí)行。在步驟S404中,調(diào)度裝置1由ResourceManager通過服務(wù)器端集群資源調(diào)度系統(tǒng)代理,例如,NormandyAgent,發(fā)送啟動(dòng)RemoteJobRunner指令后,本地NormandyAgent開始下載RemoteJobRunner與用戶作業(yè)的運(yùn)行環(huán)境,并啟動(dòng)RemoteJobRunner;RemoteJobRunner啟動(dòng)后與FlowRunner建立通信,獲取其需要執(zhí)行的Node信息,并執(zhí)行該Node中描述的用戶指令,即執(zhí)行用戶作業(yè)。

在此,調(diào)度裝置1參照依賴關(guān)系遍歷工作流的拓?fù)洌瑫r(shí)向集群資源調(diào)度系統(tǒng)發(fā)起資源的申請與回收指令,很好的分離了工作流中的調(diào)度邏輯與執(zhí)行邏輯,實(shí)現(xiàn)了服務(wù)器裝置調(diào)度和集群節(jié)點(diǎn)專職執(zhí)行。

優(yōu)選地,在步驟S402中,調(diào)度裝置1還用于:1)所述作業(yè)執(zhí)行對象獲取并記錄所述遠(yuǎn)程作業(yè)執(zhí)行模塊發(fā)送的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn)的作業(yè)執(zhí)行狀態(tài)。具體地,RemoeteJobRunner定時(shí)檢查用戶作業(yè)進(jìn)程,依靠心跳向JobRunner匯報(bào)作業(yè)運(yùn)行狀態(tài)以供FlowRunner查看,JobRunner根據(jù)作業(yè)的運(yùn)行狀態(tài)回應(yīng)心跳,其中包含相應(yīng)的操作指令。2)當(dāng)所述節(jié)點(diǎn)的所述作業(yè)執(zhí)行狀態(tài)為執(zhí)行結(jié)束狀態(tài)時(shí),所述作業(yè)執(zhí)行對象指示與所述節(jié)點(diǎn)對應(yīng)的所述遠(yuǎn)程作業(yè)執(zhí)行模塊退出。具體地,RemoteJobRunner執(zhí)行完成之后,通知JobRunner其已經(jīng)完成作業(yè)執(zhí)行指令的執(zhí)行過程,JobRunner記錄RemoteJobRunner的結(jié)束狀態(tài),JobRunner向RemoteJobRunner發(fā)送退出指令,指示RemoteJobRunner退出。

優(yōu)選地,所述工作流執(zhí)行對象基于所述工作流拓?fù)潢P(guān)系和所述作業(yè)間的依賴關(guān)系查找與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),獲取已執(zhí)行結(jié)束的節(jié)點(diǎn),并指示所述資源管理模塊回收所述已執(zhí)行結(jié)束的節(jié)點(diǎn)對應(yīng)的資源。具體地,F(xiàn)lowRunner基于所述Flow拓?fù)潢P(guān)系與作業(yè)間的依賴關(guān)系定時(shí)輪詢檢查JobRunner中記錄的與所述作業(yè)執(zhí)行指令對應(yīng)的節(jié)點(diǎn),確定已經(jīng)運(yùn)行結(jié)束的節(jié)點(diǎn),通知ResourceManager回收資源。ResourceManager向集群資源調(diào)度系統(tǒng),例如為Normandy系統(tǒng),發(fā)起釋放對應(yīng)資源的請求,以進(jìn)行集群資源的回收。

優(yōu)選地,本發(fā)明還提供了一種計(jì)算機(jī)設(shè)備,該計(jì)算機(jī)設(shè)備包括一個(gè)或多個(gè)處理器和存儲(chǔ)器,該存儲(chǔ)器用于存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序;當(dāng)所述一個(gè)或多個(gè)計(jì)算機(jī)程序被所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)如步驟S401至S406中任一項(xiàng)所述的操作。

需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,本發(fā)明的各個(gè)裝置可采用專用集成電路(ASIC)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本發(fā)明的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。

對于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。系統(tǒng)權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
红安县| 寻乌县| 浮梁县| 沐川县| 桐城市| 志丹县| 太和县| 广安市| 栾川县| 莲花县| 葫芦岛市| 遂溪县| 凤凰县| 丽江市| 阆中市| 镇沅| 龙胜| 犍为县| 光山县| 青阳县| 基隆市| 兰溪市| 来宾市| 临西县| 高安市| 宽甸| 兴隆县| 汾西县| 藁城市| 宿迁市| 清丰县| 定结县| 雅安市| 清河县| 广宁县| 普定县| 南平市| 金川县| 平南县| 崇左市| 汤阴县|