本發(fā)明涉及作業(yè)調(diào)度領(lǐng)域,具體地,涉及基于作業(yè)流的分布式調(diào)度系統(tǒng)及方法。
背景技術(shù):
現(xiàn)有關(guān)于作業(yè)調(diào)度系統(tǒng)的方案大多基于Quartz構(gòu)建,最主要特征有:作業(yè)調(diào)度與執(zhí)行糅合,雖然調(diào)度效率較高,但加重了系統(tǒng)負(fù)擔(dān),在作業(yè)并發(fā)量較大時(shí)其響應(yīng)與調(diào)度效率受到較大限制。以作業(yè)為調(diào)度單元進(jìn)行調(diào)度,一個(gè)作業(yè)一個(gè)配置,無法復(fù)用。作業(yè)流由作業(yè)間依賴關(guān)系串聯(lián)而成,沒有獨(dú)立屬性,不易對(duì)作業(yè)流全局展現(xiàn)及控制。雖然可以靈活地對(duì)作業(yè)流中每個(gè)作業(yè)進(jìn)行干預(yù),但是缺少對(duì)作業(yè)流全局的控制,使得作業(yè)流調(diào)度容易出現(xiàn)邏輯混亂。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于作業(yè)流的分布式調(diào)度系統(tǒng)及方法。
根據(jù)本發(fā)明提供的一種基于作業(yè)流的分布式調(diào)度系統(tǒng),包括:邏輯調(diào)度模塊、觸發(fā)器管理模塊、數(shù)據(jù)庫交互模塊、服務(wù)接口模塊、作業(yè)分發(fā)模塊、作業(yè)應(yīng)答模塊、作業(yè)流資源庫模塊以及執(zhí)行代理終端模塊;
所述邏輯調(diào)度模塊用于完成作業(yè)流及作業(yè)的邏輯處理和調(diào)度;
-當(dāng)一個(gè)作業(yè)流的觸發(fā)器觸發(fā)時(shí),所述邏輯調(diào)度模塊收到觸發(fā)消息,并判斷此時(shí)所述作業(yè)流的業(yè)務(wù)邏輯是否符合觸發(fā)條件;
-當(dāng)一個(gè)作業(yè)執(zhí)行結(jié)果被傳遞到所述邏輯調(diào)度模塊時(shí),所述邏輯調(diào)度模塊根據(jù)作業(yè)結(jié)果及作業(yè)流屬性判定作業(yè)流結(jié)束,或者調(diào)度作業(yè)流中所述作業(yè)的后續(xù)作業(yè);
-當(dāng)人工干預(yù)觸發(fā)作業(yè)流或作業(yè)操作時(shí),請(qǐng)求被傳遞到所述邏輯調(diào)度模塊,所述邏輯調(diào)度模塊根據(jù)作業(yè)流屬性,判定所述請(qǐng)求是否有效,若有效則觸發(fā)作業(yè)流或作業(yè)操作;
所述觸發(fā)器管理模塊用于完成作業(yè)流的觸發(fā)器新增、觸發(fā)和刪除,所述觸發(fā)器管理模塊是基于作業(yè)流的調(diào)度系統(tǒng)并根據(jù)作業(yè)流進(jìn)行配置,其中,一個(gè)作業(yè)流能夠?qū)?yīng)多個(gè) 觸發(fā)器,且所述觸發(fā)器為時(shí)間條件的配置;
-當(dāng)時(shí)間條件滿足觸發(fā)器預(yù)設(shè)條件時(shí),觸發(fā)器觸發(fā)作業(yè)流調(diào)度;
-當(dāng)人工觸發(fā)作業(yè)流時(shí),調(diào)度模塊為請(qǐng)求創(chuàng)建臨時(shí)觸發(fā)器進(jìn)行調(diào)度,在執(zhí)行結(jié)束后刪除該觸發(fā)器;
所述數(shù)據(jù)庫交互模塊用于完成系統(tǒng)與數(shù)據(jù)庫之間數(shù)據(jù)交互,其中所述數(shù)據(jù)庫中存儲(chǔ)有關(guān)于作業(yè)流屬性配置的全部信息;
-當(dāng)系統(tǒng)啟動(dòng)時(shí)從數(shù)據(jù)庫讀取所述屬性配置的信息;
-當(dāng)系統(tǒng)調(diào)度運(yùn)行時(shí),所述數(shù)據(jù)庫實(shí)時(shí)存儲(chǔ)關(guān)于作業(yè)流及作業(yè)的各種屬性、狀態(tài)信息,且保持所述屬性信息與數(shù)據(jù)庫中一致;
所述服務(wù)接口模塊用于提供對(duì)作業(yè)流、作業(yè)進(jìn)行控制的對(duì)外服務(wù)接口,通過標(biāo)準(zhǔn)的SOAP協(xié)議調(diào)用,并且提供對(duì)所述作業(yè)流的人工干預(yù)和查詢;
所述作業(yè)分發(fā)模塊用于完成作業(yè)進(jìn)入調(diào)度進(jìn)程后的分發(fā),根據(jù)所述作業(yè)的配置屬性,將所述作業(yè)執(zhí)行指令分發(fā)到特定的執(zhí)行終端Agent,同時(shí)發(fā)送消息以判斷各個(gè)執(zhí)行代理終端模塊的狀態(tài),且所述作業(yè)分發(fā)模塊與Agent所處的物理位置、操作系統(tǒng)類型無關(guān);
所述作業(yè)應(yīng)答模塊用于完成對(duì)作業(yè)執(zhí)行代理終端模塊執(zhí)行作業(yè)結(jié)果的接收,以及接收應(yīng)答后對(duì)作業(yè)狀態(tài)屬性信息的更新;
所述作業(yè)流資源庫模塊用于存儲(chǔ)從數(shù)據(jù)庫讀取的作業(yè)流配置屬性,包括作業(yè)流的基礎(chǔ)配置以及其中每個(gè)作業(yè)的基本配置信息,并在系統(tǒng)運(yùn)行過程中對(duì)所述配置屬性進(jìn)行實(shí)時(shí)更新;
所述執(zhí)行代理終端模塊用于接收調(diào)度分發(fā)模塊發(fā)送的作業(yè)執(zhí)行請(qǐng)求,執(zhí)行作業(yè)命令及將結(jié)果返回給服務(wù)端的應(yīng)答模塊,整個(gè)系統(tǒng)包含多個(gè)執(zhí)行代理終端模塊,且所述多個(gè)執(zhí)行代理終端模塊能夠運(yùn)行在不同的物理節(jié)點(diǎn)上。
根據(jù)本發(fā)明提供的一種應(yīng)用上述的基于作業(yè)流的分布式調(diào)度系統(tǒng)的方法,包括如下步驟:
步驟1:啟動(dòng)系統(tǒng)服務(wù)端;
步驟2:在系統(tǒng)服務(wù)端上申請(qǐng)創(chuàng)建作業(yè)流;
步驟3:根據(jù)創(chuàng)建的作業(yè)流進(jìn)行觸發(fā);
步驟4:作業(yè)流觸發(fā)成功后進(jìn)入作業(yè)應(yīng)答,執(zhí)行作業(yè);
步驟5:對(duì)作業(yè)流創(chuàng)建人工控制服務(wù);
步驟6:系統(tǒng)執(zhí)行完作業(yè)后,進(jìn)行作業(yè)分發(fā)。
優(yōu)選地,所述步驟1包括:
步驟1.1:在系統(tǒng)中加載資源配置,包括數(shù)據(jù)庫資源、對(duì)外服務(wù)接口、隊(duì)列資源、日志以及控制時(shí)間間隔設(shè)置;
步驟1.2:根據(jù)所述配置建立數(shù)據(jù)庫連接,完成數(shù)據(jù)庫交互模塊初始化;
步驟1.3:啟動(dòng)邏輯調(diào)度模塊,完成請(qǐng)求隊(duì)列初始化;
步驟1.4:根據(jù)所述配置讀取作業(yè)流配置,調(diào)用數(shù)據(jù)庫交互模塊,讀取數(shù)據(jù)庫中已配置的作業(yè)流,同時(shí)讀取各作業(yè)流內(nèi)作業(yè)信息,保存到作業(yè)流資源庫中;
步驟1.5:啟動(dòng)觸發(fā)器管理模塊,根據(jù)作業(yè)流資源庫中作業(yè)流觸發(fā)配置,為作業(yè)流創(chuàng)建觸發(fā)器并進(jìn)行管理,當(dāng)觸發(fā)器被觸發(fā)時(shí)觸發(fā)作業(yè)流,向調(diào)度模塊隊(duì)列發(fā)調(diào)度請(qǐng)求;
步驟1.6:啟動(dòng)服務(wù)接口模塊,啟動(dòng)web服務(wù),使用戶能夠通過網(wǎng)絡(luò)調(diào)用、管理UI、命令行并對(duì)作業(yè)流及作業(yè)進(jìn)行查詢、控制;
步驟1.7:啟動(dòng)作業(yè)分發(fā)模塊,包括啟動(dòng)接收調(diào)度模塊通知作業(yè)分發(fā)線程、定時(shí)檢測(cè)作業(yè)分發(fā)事件線程、執(zhí)行終端狀態(tài)檢測(cè)線程、作業(yè)分發(fā)線程池;
步驟1.8:啟動(dòng)作業(yè)應(yīng)答模塊,啟動(dòng)接收?qǐng)?zhí)行終端作業(yè)結(jié)果的服務(wù)以及啟動(dòng)檢測(cè)事件狀態(tài)通知調(diào)度模塊的線程;
其中所述步驟1.1至步驟1.8中任一模塊啟動(dòng)失敗,則記錄失敗日志。
優(yōu)選地,所述步驟2包括:
步驟2.1:用戶經(jīng)過授權(quán)登入系統(tǒng),申請(qǐng)創(chuàng)建作業(yè)流,系統(tǒng)檢驗(yàn)用戶權(quán)限,通過則授權(quán)作業(yè)流創(chuàng)建;
步驟2.2:根據(jù)用戶創(chuàng)建的作業(yè)流,配置所述作業(yè)流的全局屬性,重點(diǎn)配置作業(yè)流觸發(fā)策略;
步驟2.3:查看作業(yè)模版,是否有需要的作業(yè),并添加到作業(yè)流中;
步驟2.4:若需求的作業(yè)在作業(yè)模版中不存在,則進(jìn)入新建作業(yè)模版子流程;
步驟2.5:新建作業(yè)模版時(shí)要選擇執(zhí)行代理Agent,若沒有需求的Agent,則進(jìn)入新增Agent子流程;
步驟2.6:新增Agent時(shí),將Agent劃分到某個(gè)應(yīng)用系統(tǒng),選擇已劃分的所述應(yīng)用系統(tǒng),若沒有合適的應(yīng)用系統(tǒng),則進(jìn)入新增應(yīng)用系統(tǒng)子流程;
步驟2.7:根據(jù)應(yīng)用系統(tǒng)基本信息,包括系統(tǒng)代號(hào)、負(fù)責(zé)人、基本功能說明創(chuàng)建新增應(yīng)用系統(tǒng),所述應(yīng)用系統(tǒng)根據(jù)用戶需要對(duì)Agent進(jìn)行劃分;
步驟2.8:作業(yè)模版提交成功后編輯作業(yè)流依次選擇需要的作業(yè)模版,若沒有合適模板,則新增模版;
步驟2.9:選擇所有需要的作業(yè)模版后,對(duì)這些模版配置僅屬于所述作業(yè)流的屬性,其中所述屬性包括:作業(yè)前后依賴關(guān)系、執(zhí)行超時(shí)、報(bào)警相關(guān);
步驟2.10:編輯作業(yè)流結(jié)束后用戶能夠通過作業(yè)流邏輯圖形展示來檢查作業(yè)流是否配置正確,確認(rèn)正確后需要用戶激活作業(yè)流,激活作業(yè)流則該作業(yè)流被加載到系統(tǒng)作業(yè)流資源庫,并進(jìn)入自動(dòng)調(diào)度。
優(yōu)選地,所述步驟3包括:
步驟3.1:觸發(fā)器管理模塊中作業(yè)流的觸發(fā)器被觸發(fā),其中所述觸發(fā)包括作業(yè)流定時(shí)配置的觸發(fā)器被觸發(fā)和人工觸發(fā)時(shí)臨時(shí)創(chuàng)建的觸發(fā)器即時(shí)觸發(fā);
步驟3.2:根據(jù)觸發(fā)器關(guān)聯(lián)的作業(yè)流,為作業(yè)流創(chuàng)建觸發(fā)請(qǐng)求,所述請(qǐng)求被發(fā)送給調(diào)度模塊;
步驟3.3:根據(jù)觸發(fā)請(qǐng)求中關(guān)鍵字,從作業(yè)流資源庫查找是否存在該作業(yè)流;
步驟3.4:根據(jù)作業(yè)流資源庫中作業(yè)流狀態(tài)信息判斷該作業(yè)流能否被觸發(fā),當(dāng)該作業(yè)流處于運(yùn)行或暫停狀態(tài)時(shí)觸發(fā)器不能被觸發(fā);
步驟3.5:當(dāng)作業(yè)流未存在于作業(yè)流資源庫中或該作業(yè)流不能被觸發(fā)時(shí),則觸發(fā)失??;當(dāng)作業(yè)流未在作業(yè)流資源庫中找到的情況出現(xiàn)于人工觸發(fā)新增的作業(yè)流時(shí),該作業(yè)流未激活,沒有被加載到作業(yè)流資源庫中;
步驟3.6:對(duì)觸發(fā)作業(yè)流前狀態(tài)進(jìn)行備份,若觸發(fā)失能夠恢復(fù)到之前狀態(tài);
步驟3.7:重置作業(yè)流內(nèi)所有作業(yè),將作業(yè)流內(nèi)作業(yè)歷史狀態(tài)、關(guān)聯(lián)的事件置為初始狀態(tài);
步驟3.8:從作業(yè)流資源庫獲取該作業(yè)流的初始作業(yè),所述初始作業(yè)包括普通的作業(yè)和特殊的Box作業(yè),所述Box作業(yè)能夠包含多個(gè)作業(yè)流分支,用于作業(yè)有多個(gè)依賴作業(yè)的情況;若是Box作業(yè),則需獲取Box內(nèi)每個(gè)分支流的初始作業(yè);
步驟3.9:為獲取到的初始作業(yè)創(chuàng)建事件,所述事件用于作業(yè)后續(xù)的分發(fā)、執(zhí)行及應(yīng)答處理;
步驟3.10:若步驟3.7、步驟3.8、驟3.9失敗時(shí),則恢復(fù)步驟3.6中備份的作業(yè)流狀態(tài);
步驟3.11:當(dāng)作業(yè)流觸發(fā)失敗且所述作業(yè)流中作業(yè)均被重置時(shí),記錄錯(cuò)誤,并返回錯(cuò)誤;
步驟3.12:作業(yè)流觸發(fā)成功后,通知分發(fā)模塊分發(fā)作業(yè)。
優(yōu)選地,所述步驟4包括:
步驟4.1:當(dāng)執(zhí)行代理終端模塊Agent執(zhí)行作業(yè)后,將執(zhí)行結(jié)果返回給作業(yè)應(yīng)答模塊;
步驟4.2:作業(yè)應(yīng)答模塊接收到Agent的作業(yè)執(zhí)行結(jié)果,并從所述結(jié)果消息中獲取關(guān)聯(lián)的事件,更新事件狀態(tài);
步驟4.3:當(dāng)事件狀態(tài)變更完成后,作業(yè)應(yīng)答模塊通知邏輯調(diào)度模塊作業(yè)執(zhí)行結(jié)束;
步驟4.4:邏輯調(diào)度模塊收到通知后,從通知消息中獲取關(guān)聯(lián)的作業(yè)流和作業(yè);
步驟4.5:從作業(yè)流資源庫查找是否存在通知消息中的作業(yè)流;
步驟4.6:從作業(yè)流資源庫查找是否存在通知消息中的作業(yè);
步驟4.7:若找到關(guān)聯(lián)的作業(yè)流及作業(yè),從作業(yè)獲取關(guān)聯(lián)的事件與通知消息中的事件進(jìn)行比較;
步驟4.8:通知消息中的作業(yè)流或者作業(yè)沒有在作業(yè)流資源庫中存在時(shí),或者作業(yè)流資源庫中作業(yè)關(guān)聯(lián)事件與通知消息在事件不匹配時(shí),判定該事件以及作業(yè)執(zhí)行結(jié)果為過時(shí)數(shù)據(jù),該事件被丟棄,作業(yè)執(zhí)行結(jié)果被忽略;
步驟4.9:當(dāng)作業(yè)流、作業(yè)、事件均匹配時(shí),更新作業(yè)狀態(tài)信息;
步驟4.10:記錄作業(yè)執(zhí)行歷史記錄;
步驟4.11:當(dāng)且僅當(dāng)作業(yè)執(zhí)行結(jié)果為失敗且作業(yè)流配置為該作業(yè)失敗立即告警暫停時(shí),立即暫停該作業(yè)流,標(biāo)記作業(yè)失敗并報(bào)警;
步驟4.12:當(dāng)作業(yè)執(zhí)行結(jié)束且無需報(bào)警,從作業(yè)流資源庫查找該作業(yè)流中當(dāng)前作業(yè)是否有后續(xù)作業(yè)需要調(diào)度。當(dāng)前作業(yè)包含在Box中需要判斷該Box作業(yè)的是否結(jié)束及結(jié)束狀態(tài);若后續(xù)作業(yè)為Box作業(yè),需要獲取該Box的起始作業(yè)列表作為后續(xù)作業(yè);
步驟4.13:當(dāng)無法找到后續(xù)作業(yè)時(shí),檢查作業(yè)流中所有作業(yè),有任意作業(yè)處于中間狀態(tài)沒有結(jié)束時(shí)不能判定結(jié)束,此時(shí)該作業(yè)流需要等待所有分支均為初始化狀態(tài)即無需調(diào)度的分支或結(jié)束沒有后續(xù)的狀態(tài)時(shí)才能判定結(jié)束;
步驟4.14:當(dāng)前作業(yè)無后續(xù)作業(yè),且該作業(yè)流沒有其他作業(yè)處于中間狀態(tài)時(shí),判定作業(yè)流已經(jīng)執(zhí)行結(jié)束,根據(jù)作業(yè)流中作業(yè)配置判定作業(yè)流的執(zhí)行結(jié)果是成功或者失?。蝗粲泻罄m(xù)作業(yè)需要調(diào)度,根據(jù)獲取到的后續(xù)作業(yè)或作業(yè)列表,為后續(xù)作業(yè)創(chuàng)建事件;
步驟4.15:更新后續(xù)作業(yè)的狀態(tài),進(jìn)入運(yùn)行狀態(tài),所述作業(yè)的狀態(tài)是作業(yè)流結(jié)束判定的一個(gè)參照條件。
步驟4.16:邏輯調(diào)度模塊通知作業(yè)分發(fā)模塊有待處理事件,分發(fā)模塊根據(jù)事件分發(fā)作業(yè)到相應(yīng)的Agent進(jìn)行處理。
優(yōu)選地,所述步驟5包括:
步驟5.1:獲取控制接口,對(duì)作業(yè)流進(jìn)行查詢、激活與凍結(jié)、啟動(dòng)與停止、暫停與恢復(fù)操作,或者對(duì)作業(yè)流內(nèi)作業(yè)進(jìn)行啟動(dòng)與停止操作;其中獲取控制接口的方法包括:包括系統(tǒng)管理UI、系統(tǒng)控制臺(tái)命令、網(wǎng)絡(luò)SOAP服務(wù);
步驟5.2:用戶根據(jù)步驟5.1任選擇一種控制方式,將控制請(qǐng)求都會(huì)發(fā)送到系統(tǒng)的服務(wù)接口模塊;
步驟5.3:服務(wù)接口模塊接收到服務(wù)請(qǐng)求,根據(jù)調(diào)用的方法組織相應(yīng)的請(qǐng)求消息,傳遞給邏輯調(diào)度模塊,同時(shí)等待邏輯調(diào)度模塊的處理結(jié)果,若等待超時(shí),超時(shí)后調(diào)度模塊返回的調(diào)用超時(shí)結(jié)果將被丟棄;
步驟5.4:邏輯調(diào)度模塊根據(jù)作業(yè)流是否存在、作業(yè)流當(dāng)前狀態(tài)是否符合控制條件來判斷請(qǐng)求是否有效,其中控制條件如下:
A:當(dāng)前作業(yè)流激活狀態(tài)無法再次激活,當(dāng)前凍結(jié)狀態(tài)無法再次凍結(jié);
B:當(dāng)前作業(yè)流運(yùn)行或暫停狀態(tài)無法再次觸發(fā)運(yùn)行;
C:已經(jīng)結(jié)束或處于初始狀態(tài)的作業(yè)流無法停止;
D:只有處于運(yùn)行狀態(tài)的作業(yè)流可以被暫停,只有處于被暫停狀態(tài)的作業(yè)流可以被恢復(fù);
E:處于運(yùn)行狀態(tài)的作業(yè)流,只有失敗狀態(tài)的作業(yè)可以被人工觸發(fā)運(yùn)行;而處于結(jié)束狀態(tài)的作業(yè)流,其中任意一個(gè)作業(yè)可以被觸發(fā),整個(gè)作業(yè)流可以繼續(xù)執(zhí)行;
F:只有處于運(yùn)行狀態(tài)的作業(yè)可以被停止;
步驟5.5:通過狀態(tài)判定,調(diào)度模塊則對(duì)指定的作業(yè)流進(jìn)行更新,若是觸發(fā)作業(yè)流或作業(yè),則會(huì)創(chuàng)建作業(yè)調(diào)度事件,并通知分發(fā);
步驟5.6:調(diào)度模塊返回控制結(jié)果,再由服務(wù)接口模塊將結(jié)果返回給調(diào)用方。
優(yōu)選地,所述步驟6包括:
步驟6.1:作業(yè)分發(fā)模塊根據(jù)觸發(fā)檢查是否有待處理事件,其中所述觸發(fā)包括調(diào)度模塊發(fā)出的通知消息觸發(fā)和作業(yè)分發(fā)模塊的定時(shí)觸發(fā);
步驟6.2:若有待處理事件,則分發(fā)模塊取出所有待處理事件,若沒有待處理事件,則等待下次檢查;
步驟6.3:取出所有待處理事件后更新這些事件為已讀取狀態(tài),防止再次檢索重復(fù) 處理;
步驟6.4:根據(jù)事件包含信息,將事件交由分發(fā)線程池進(jìn)行作業(yè)分發(fā);
步驟6.5:若發(fā)送失敗,則檢查是否超過設(shè)定的重發(fā)限制,所述重發(fā)限制是為防止故障事件被永遠(yuǎn)地重發(fā)下去而占用分發(fā)線程使正常事件得不到及時(shí)處理;
步驟6.6:當(dāng)重發(fā)已達(dá)到限制次數(shù)時(shí),則標(biāo)記發(fā)送失敗,不再進(jìn)行重發(fā);當(dāng)未達(dá)到重發(fā)限制時(shí),則繼續(xù)進(jìn)行重發(fā)知道發(fā)送成功或達(dá)到重發(fā)限制;若發(fā)送成功,則標(biāo)記事件已發(fā)送狀態(tài),防止被再次發(fā)送;
步驟6.7:Agent接收到作業(yè)后,檢查所述作業(yè)是否有效,若作業(yè)指令異常,則返回相應(yīng)的作業(yè)錯(cuò)誤應(yīng)答;
步驟6.9:通過所述檢查后,Agent啟動(dòng)作業(yè)執(zhí)行進(jìn)程并等待執(zhí)行結(jié)束將結(jié)果返回。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
1、本發(fā)明中提供的基于作業(yè)流的分布式調(diào)度系統(tǒng)及方法,將調(diào)度邏輯處理與作業(yè)的具體執(zhí)行分開到不同的系統(tǒng),利用分布式系統(tǒng),作業(yè)流中各作業(yè)步驟可以分布在不同的執(zhí)行端上運(yùn)行,分擔(dān)了單點(diǎn)的作業(yè)執(zhí)行壓力,大大提高了作業(yè)調(diào)度與執(zhí)行效率。
2、本發(fā)明中作業(yè)流與作業(yè)模版結(jié)合,作業(yè)流的配置更靈活,作業(yè)可復(fù)制,節(jié)省了作業(yè)流的配置時(shí)間,可大大提高作業(yè)流配置部署效率。
3、本發(fā)明中以作業(yè)流為對(duì)象進(jìn)行配置和調(diào)度,內(nèi)部以作業(yè)為單元,作業(yè)作為作業(yè)流的一個(gè)步驟,并增加了對(duì)作業(yè)流的全局展現(xiàn)與控制,能更全面的控制作業(yè)流調(diào)度邏輯,不會(huì)導(dǎo)致作業(yè)流邏輯混亂。
附圖說明
通過閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1為本發(fā)明提供的基于作業(yè)流的分布式調(diào)度系統(tǒng)模塊劃分方框圖;
圖2為本發(fā)明提供的系統(tǒng)服務(wù)端啟動(dòng)流程圖;
圖3為本發(fā)明提供的作業(yè)流申請(qǐng)流程圖;
圖4為本發(fā)明提供的作業(yè)流觸發(fā)流程圖;
圖5為本發(fā)明提供的作業(yè)應(yīng)答后邏輯流程圖;
圖6為本發(fā)明提供的人工操作控制作業(yè)流流程圖;
圖7為本發(fā)明提供的作業(yè)分發(fā)與執(zhí)行流程圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù)人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn)。這些都屬于本發(fā)明的保護(hù)范圍。
本發(fā)明提供的一種基于作業(yè)流的分布式調(diào)度系統(tǒng),包括:邏輯調(diào)度模塊、觸發(fā)器管理模塊、數(shù)據(jù)庫交互模塊、服務(wù)接口模塊、作業(yè)分發(fā)模塊、作業(yè)應(yīng)答模塊、作業(yè)流資源庫模塊以及執(zhí)行代理終端模塊;
具體地,所述邏輯調(diào)度模塊可以包含多個(gè)執(zhí)行終端,根據(jù)終端的功能不同,用戶可以分割成多個(gè)應(yīng)用系統(tǒng)。執(zhí)行終端Agent必須包含在一個(gè)應(yīng)用系統(tǒng)中,一個(gè)應(yīng)用系統(tǒng)可以包含多個(gè)執(zhí)行終端Agent,一個(gè)執(zhí)行終端Agent上可以同時(shí)執(zhí)行多個(gè)作業(yè)。
更進(jìn)一步地,所述作業(yè)包括以名稱標(biāo)記、作業(yè)類型、具體的執(zhí)行指令或腳本、依賴的前置作業(yè)、依賴的類型、對(duì)應(yīng)的作業(yè)流、執(zhí)行的Agent、超時(shí)設(shè)置、報(bào)警設(shè)置等描述一個(gè)具體地執(zhí)行步驟;具體地,所述作業(yè)以模版形式存在,在配置作業(yè)流時(shí)選擇模版進(jìn)行實(shí)例化后作為作業(yè)流的步驟,同一個(gè)作業(yè)模版可以在不同的作業(yè)流中,也可以在一個(gè)作業(yè)流中出現(xiàn)多次,其中實(shí)例化后的作業(yè)可配置特有的實(shí)例屬性,通過作業(yè)流屬性及前置依賴屬性串聯(lián)成作業(yè)流邏輯。
更具體地,所述作業(yè)流為作業(yè)系統(tǒng)調(diào)度的基本對(duì)象,所述作業(yè)流包含了用于調(diào)度的基本信息:調(diào)度時(shí)間和調(diào)度狀態(tài)設(shè)定;所述調(diào)度狀態(tài)設(shè)定用于控制作業(yè)流是否被自動(dòng)調(diào)度,調(diào)度時(shí)間設(shè)定用于設(shè)定作業(yè)流的觸發(fā)機(jī)制;所述作業(yè)流至少包含一個(gè)作業(yè)的實(shí)例才能被觸發(fā),具有多個(gè)作業(yè)的作業(yè)流內(nèi)部包含的作業(yè)可以在系統(tǒng)不同的Agent中得到執(zhí)行。
所述邏輯調(diào)度模塊用于完成作業(yè)流及作業(yè)的邏輯處理和調(diào)度;
-當(dāng)一個(gè)作業(yè)流的觸發(fā)器觸發(fā)時(shí),所述邏輯調(diào)度模塊收到觸發(fā)消息,并判斷此時(shí)所述作業(yè)流的業(yè)務(wù)邏輯是否符合觸發(fā)條件;
-當(dāng)一個(gè)作業(yè)執(zhí)行結(jié)果被傳遞到所述邏輯調(diào)度模塊時(shí),所述邏輯調(diào)度模塊根據(jù)作業(yè)結(jié)果及作業(yè)流屬性判定作業(yè)流結(jié)束,或者調(diào)度作業(yè)流中所述作業(yè)的后續(xù)作業(yè);
-當(dāng)人工干預(yù)觸發(fā)作業(yè)流或作業(yè)操作時(shí),請(qǐng)求被傳遞到所述邏輯調(diào)度模塊,所述邏輯調(diào)度模塊根據(jù)作業(yè)流屬性,判定所述請(qǐng)求是否有效,若有效則觸發(fā)作業(yè)流或作業(yè)操作;
所述觸發(fā)器管理模塊用于完成作業(yè)流的觸發(fā)器新增、觸發(fā)和刪除,所述觸發(fā)器管理 模塊是基于作業(yè)流的調(diào)度系統(tǒng)并根據(jù)作業(yè)流進(jìn)行配置,其中,一個(gè)作業(yè)流能夠?qū)?yīng)多個(gè)觸發(fā)器,且所述觸發(fā)器為時(shí)間條件的配置;
-當(dāng)時(shí)間條件滿足觸發(fā)器預(yù)設(shè)條件時(shí),觸發(fā)器觸發(fā)作業(yè)流調(diào)度;
-當(dāng)人工觸發(fā)作業(yè)流時(shí),調(diào)度模塊為請(qǐng)求創(chuàng)建臨時(shí)觸發(fā)器進(jìn)行調(diào)度,在執(zhí)行結(jié)束后刪除該觸發(fā)器;
所述數(shù)據(jù)庫交互模塊用于完成系統(tǒng)與數(shù)據(jù)庫之間數(shù)據(jù)交互,其中所述數(shù)據(jù)庫中存儲(chǔ)有關(guān)于作業(yè)流屬性配置的全部信息;
-當(dāng)系統(tǒng)啟動(dòng)時(shí)從數(shù)據(jù)庫讀取所述屬性配置的信息;
-當(dāng)系統(tǒng)調(diào)度運(yùn)行時(shí),所述數(shù)據(jù)庫實(shí)時(shí)存儲(chǔ)關(guān)于作業(yè)流及作業(yè)的各種屬性、狀態(tài)信息,且保持所述屬性信息與數(shù)據(jù)庫中一致;
所述服務(wù)接口模塊用于提供對(duì)作業(yè)流、作業(yè)進(jìn)行控制的對(duì)外服務(wù)接口,通過標(biāo)準(zhǔn)的SOAP協(xié)議調(diào)用,并且提供對(duì)所述作業(yè)流的人工干預(yù)和查詢;
所述作業(yè)分發(fā)模塊用于完成作業(yè)進(jìn)入調(diào)度進(jìn)程后的分發(fā),根據(jù)所述作業(yè)的配置屬性,將所述作業(yè)執(zhí)行指令分發(fā)到特定的執(zhí)行終端Agent,同時(shí)發(fā)送消息以判斷各個(gè)執(zhí)行代理終端模塊的狀態(tài),且所述作業(yè)分發(fā)模塊與Agent所處的物理位置、操作系統(tǒng)類型無關(guān);
所述作業(yè)應(yīng)答模塊用于完成對(duì)作業(yè)執(zhí)行代理終端模塊執(zhí)行作業(yè)結(jié)果的接收,以及接收應(yīng)答后對(duì)作業(yè)狀態(tài)屬性信息的更新;
所述作業(yè)流資源庫模塊用于存儲(chǔ)從數(shù)據(jù)庫讀取的作業(yè)流配置屬性,包括作業(yè)流的基礎(chǔ)配置以及其中每個(gè)作業(yè)的基本配置信息,并在系統(tǒng)運(yùn)行過程中對(duì)所述配置屬性進(jìn)行實(shí)時(shí)更新;
所述執(zhí)行代理終端模塊用于接收調(diào)度分發(fā)模塊發(fā)送的作業(yè)執(zhí)行請(qǐng)求,執(zhí)行作業(yè)命令及將結(jié)果返回給服務(wù)端的應(yīng)答模塊,整個(gè)系統(tǒng)包含多個(gè)執(zhí)行代理終端模塊,且所述多個(gè)執(zhí)行代理終端模塊能夠運(yùn)行在不同的物理節(jié)點(diǎn)上。
一種應(yīng)用上述的基于作業(yè)流的分布式調(diào)度系統(tǒng)的方法,包括如下步驟:
步驟1:啟動(dòng)系統(tǒng)服務(wù)端;
步驟2:在系統(tǒng)服務(wù)端上申請(qǐng)創(chuàng)建作業(yè)流;
步驟3:根據(jù)創(chuàng)建的作業(yè)流進(jìn)行觸發(fā);
步驟4:作業(yè)流觸發(fā)成功后進(jìn)入作業(yè)應(yīng)答,執(zhí)行作業(yè);
步驟5:對(duì)作業(yè)流創(chuàng)建人工控制服務(wù);
步驟6:系統(tǒng)執(zhí)行完作業(yè)后,進(jìn)行作業(yè)分發(fā)。
優(yōu)選地,所述步驟1包括:
步驟1.1:在系統(tǒng)中加載資源配置,包括數(shù)據(jù)庫資源、對(duì)外服務(wù)接口、隊(duì)列資源、日志以及控制時(shí)間間隔設(shè)置;
步驟1.2:根據(jù)所述配置建立數(shù)據(jù)庫連接,完成數(shù)據(jù)庫交互模塊初始化;
步驟1.3:啟動(dòng)邏輯調(diào)度模塊,完成請(qǐng)求隊(duì)列初始化;
步驟1.4:根據(jù)所述配置讀取作業(yè)流配置,調(diào)用數(shù)據(jù)庫交互模塊,讀取數(shù)據(jù)庫中已配置的作業(yè)流,同時(shí)讀取各作業(yè)流內(nèi)作業(yè)信息,保存到作業(yè)流資源庫中;
步驟1.5:啟動(dòng)觸發(fā)器管理模塊,根據(jù)作業(yè)流資源庫中作業(yè)流觸發(fā)配置,為作業(yè)流創(chuàng)建觸發(fā)器并進(jìn)行管理,當(dāng)觸發(fā)器被觸發(fā)時(shí)觸發(fā)作業(yè)流,向調(diào)度模塊隊(duì)列發(fā)調(diào)度請(qǐng)求;
步驟1.6:啟動(dòng)服務(wù)接口模塊,啟動(dòng)web服務(wù),使用戶能夠通過網(wǎng)絡(luò)調(diào)用、管理UI、命令行并對(duì)作業(yè)流及作業(yè)進(jìn)行查詢、控制;
步驟1.7:啟動(dòng)作業(yè)分發(fā)模塊,包括啟動(dòng)接收調(diào)度模塊通知作業(yè)分發(fā)線程、定時(shí)檢測(cè)作業(yè)分發(fā)事件線程、執(zhí)行終端狀態(tài)檢測(cè)線程、作業(yè)分發(fā)線程池;
步驟1.8:啟動(dòng)作業(yè)應(yīng)答模塊,啟動(dòng)接收?qǐng)?zhí)行終端作業(yè)結(jié)果的服務(wù)以及啟動(dòng)檢測(cè)事件狀態(tài)通知調(diào)度模塊的線程;
其中所述步驟1.1至步驟1.8中任一模塊啟動(dòng)失敗,則記錄失敗日志。
優(yōu)選地,所述步驟2包括:
步驟2.1:用戶經(jīng)過授權(quán)登入系統(tǒng),申請(qǐng)創(chuàng)建作業(yè)流,系統(tǒng)檢驗(yàn)用戶權(quán)限,通過則授權(quán)作業(yè)流創(chuàng)建;
步驟2.2:根據(jù)用戶創(chuàng)建的作業(yè)流,配置所述作業(yè)流的全局屬性,重點(diǎn)配置作業(yè)流觸發(fā)策略;
步驟2.3:查看作業(yè)模版,是否有需要的作業(yè),并添加到作業(yè)流中;
步驟2.4:若需求的作業(yè)在作業(yè)模版中不存在,則進(jìn)入新建作業(yè)模版子流程;
步驟2.5:新建作業(yè)模版時(shí)要選擇執(zhí)行代理Agent,若沒有需求的Agent,則進(jìn)入新增Agent子流程;
步驟2.6:新增Agent時(shí),將Agent劃分到某個(gè)應(yīng)用系統(tǒng),選擇已劃分的所述應(yīng)用系統(tǒng),若沒有合適的應(yīng)用系統(tǒng),則進(jìn)入新增應(yīng)用系統(tǒng)子流程;
步驟2.7:根據(jù)應(yīng)用系統(tǒng)基本信息,包括系統(tǒng)代號(hào)、負(fù)責(zé)人、基本功能說明創(chuàng)建新增應(yīng)用系統(tǒng),所述應(yīng)用系統(tǒng)根據(jù)用戶需要對(duì)Agent進(jìn)行劃分;
步驟2.8:作業(yè)模版提交成功后編輯作業(yè)流依次選擇需要的作業(yè)模版,若沒有合適模板,則新增模版;
步驟2.9:選擇所有需要的作業(yè)模版后,對(duì)這些模版配置僅屬于所述作業(yè)流的屬性,其中所述屬性包括:作業(yè)前后依賴關(guān)系、執(zhí)行超時(shí)、報(bào)警相關(guān);
步驟2.10:編輯作業(yè)流結(jié)束后用戶能夠通過作業(yè)流邏輯圖形展示來檢查作業(yè)流是否配置正確,確認(rèn)正確后需要用戶激活作業(yè)流,激活作業(yè)流則該作業(yè)流被加載到系統(tǒng)作業(yè)流資源庫,并進(jìn)入自動(dòng)調(diào)度。
優(yōu)選地,所述步驟3包括:
步驟3.1:觸發(fā)器管理模塊中作業(yè)流的觸發(fā)器被觸發(fā),其中所述觸發(fā)包括作業(yè)流定時(shí)配置的觸發(fā)器被觸發(fā)和人工觸發(fā)時(shí)臨時(shí)創(chuàng)建的觸發(fā)器即時(shí)觸發(fā);
步驟3.2:根據(jù)觸發(fā)器關(guān)聯(lián)的作業(yè)流,為作業(yè)流創(chuàng)建觸發(fā)請(qǐng)求,所述請(qǐng)求被發(fā)送給調(diào)度模塊;
步驟3.3:根據(jù)觸發(fā)請(qǐng)求中關(guān)鍵字,從作業(yè)流資源庫查找是否存在該作業(yè)流;
步驟3.4:根據(jù)作業(yè)流資源庫中作業(yè)流狀態(tài)信息判斷該作業(yè)流能否被觸發(fā),當(dāng)該作業(yè)流處于運(yùn)行或暫停狀態(tài)時(shí)觸發(fā)器不能被觸發(fā);
步驟3.5:當(dāng)作業(yè)流未存在于作業(yè)流資源庫中或該作業(yè)流不能被觸發(fā)時(shí),則觸發(fā)失??;當(dāng)作業(yè)流未在作業(yè)流資源庫中找到的情況出現(xiàn)于人工觸發(fā)新增的作業(yè)流時(shí),該作業(yè)流未激活,沒有被加載到作業(yè)流資源庫中;
步驟3.6:對(duì)觸發(fā)作業(yè)流前狀態(tài)進(jìn)行備份,若觸發(fā)失能夠恢復(fù)到之前狀態(tài);
步驟3.7:重置作業(yè)流內(nèi)所有作業(yè),將作業(yè)流內(nèi)作業(yè)歷史狀態(tài)、關(guān)聯(lián)的事件置為初始狀態(tài);
步驟3.8:從作業(yè)流資源庫獲取該作業(yè)流的初始作業(yè),所述初始作業(yè)包括普通的作業(yè)和特殊的Box作業(yè),所述Box作業(yè)能夠包含多個(gè)作業(yè)流分支,用于作業(yè)有多個(gè)依賴作業(yè)的情況;若是Box作業(yè),則需獲取Box內(nèi)每個(gè)分支流的初始作業(yè);
步驟3.9:為獲取到的初始作業(yè)創(chuàng)建事件,所述事件用于作業(yè)后續(xù)的分發(fā)、執(zhí)行及應(yīng)答處理;
步驟3.10:若步驟3.7、步驟3.8、驟3.9失敗時(shí),則恢復(fù)步驟3.6中備份的作業(yè)流狀態(tài);
步驟3.11:當(dāng)作業(yè)流觸發(fā)失敗且所述作業(yè)流中作業(yè)均被重置時(shí),記錄錯(cuò)誤,并返回錯(cuò)誤;
步驟3.12:作業(yè)流觸發(fā)成功后,通知分發(fā)模塊分發(fā)作業(yè)。
優(yōu)選地,所述步驟4包括:
步驟4.1:當(dāng)執(zhí)行代理終端模塊Agent執(zhí)行作業(yè)后,將執(zhí)行結(jié)果返回給作業(yè)應(yīng)答模塊;
步驟4.2:作業(yè)應(yīng)答模塊接收到Agent的作業(yè)執(zhí)行結(jié)果,并從所述結(jié)果消息中獲取關(guān)聯(lián)的事件,更新事件狀態(tài);
步驟4.3:當(dāng)事件狀態(tài)變更完成后,作業(yè)應(yīng)答模塊通知邏輯調(diào)度模塊作業(yè)執(zhí)行結(jié)束;
具體地,所述事件是系統(tǒng)的調(diào)度過程,每一次的作業(yè)調(diào)度都會(huì)產(chǎn)生一個(gè)事件,事件包含了作業(yè)調(diào)度的整個(gè)過程,通過查看事件就能夠看到作業(yè)調(diào)度的進(jìn)度;
步驟4.4:邏輯調(diào)度模塊收到通知后,從通知消息中獲取關(guān)聯(lián)的作業(yè)流和作業(yè);
步驟4.5:從作業(yè)流資源庫查找是否存在通知消息中的作業(yè)流;
步驟4.6:從作業(yè)流資源庫查找是否存在通知消息中的作業(yè);
步驟4.7:若找到關(guān)聯(lián)的作業(yè)流及作業(yè),從作業(yè)獲取關(guān)聯(lián)的事件與通知消息中的事件進(jìn)行比較;
步驟4.8:通知消息中的作業(yè)流或者作業(yè)沒有在作業(yè)流資源庫中存在時(shí),或者作業(yè)流資源庫中作業(yè)關(guān)聯(lián)事件與通知消息在事件不匹配時(shí),判定該事件以及作業(yè)執(zhí)行結(jié)果為過時(shí)數(shù)據(jù),該事件被丟棄,作業(yè)執(zhí)行結(jié)果被忽略;
步驟4.9:當(dāng)作業(yè)流、作業(yè)、事件均匹配時(shí),更新作業(yè)狀態(tài)信息;
步驟4.10:記錄作業(yè)執(zhí)行歷史記錄;
步驟4.11:當(dāng)且僅當(dāng)作業(yè)執(zhí)行結(jié)果為失敗且作業(yè)流配置為該作業(yè)失敗立即告警暫停時(shí),立即暫停該作業(yè)流,標(biāo)記作業(yè)失敗并報(bào)警;
步驟4.12:當(dāng)作業(yè)執(zhí)行結(jié)束且無需報(bào)警,從作業(yè)流資源庫查找該作業(yè)流中當(dāng)前作業(yè)是否有后續(xù)作業(yè)需要調(diào)度。當(dāng)前作業(yè)包含在Box中需要判斷該Box作業(yè)的是否結(jié)束及結(jié)束狀態(tài);若后續(xù)作業(yè)為Box作業(yè),需要獲取該Box的起始作業(yè)列表作為后續(xù)作業(yè);
步驟4.13:當(dāng)無法找到后續(xù)作業(yè)時(shí),檢查作業(yè)流中所有作業(yè),有任意作業(yè)處于中間狀態(tài)沒有結(jié)束時(shí)不能判定結(jié)束,此時(shí)該作業(yè)流需要等待所有分支均為初始化狀態(tài)即無需調(diào)度的分支或結(jié)束沒有后續(xù)的狀態(tài)時(shí)才能判定結(jié)束;
步驟4.14:當(dāng)前作業(yè)無后續(xù)作業(yè),且該作業(yè)流沒有其他作業(yè)處于中間狀態(tài)時(shí),判定作業(yè)流已經(jīng)執(zhí)行結(jié)束,根據(jù)作業(yè)流中作業(yè)配置判定作業(yè)流的執(zhí)行結(jié)果是成功或者失敗;若有后續(xù)作業(yè)需要調(diào)度,根據(jù)獲取到的后續(xù)作業(yè)或作業(yè)列表,為后續(xù)作業(yè)創(chuàng)建事件;
步驟4.15:更新后續(xù)作業(yè)的狀態(tài),進(jìn)入運(yùn)行狀態(tài),所述作業(yè)的狀態(tài)是作業(yè)流結(jié)束判定的一個(gè)參照條件。
步驟4.16:邏輯調(diào)度模塊通知作業(yè)分發(fā)模塊有待處理事件,分發(fā)模塊根據(jù)事件分發(fā)作業(yè)到相應(yīng)的Agent進(jìn)行處理。
優(yōu)選地,所述步驟5包括:
步驟5.1:獲取控制接口,對(duì)作業(yè)流進(jìn)行查詢、激活與凍結(jié)、啟動(dòng)與停止、暫停與恢復(fù)操作,或者對(duì)作業(yè)流內(nèi)作業(yè)進(jìn)行啟動(dòng)與停止操作;其中獲取控制接口的方法包括:包括系統(tǒng)管理UI、系統(tǒng)控制臺(tái)命令、網(wǎng)絡(luò)SOAP服務(wù);
步驟5.2:用戶根據(jù)步驟5.1任選擇一種控制方式,將控制請(qǐng)求都會(huì)發(fā)送到系統(tǒng)的服務(wù)接口模塊;
步驟5.3:服務(wù)接口模塊接收到服務(wù)請(qǐng)求,根據(jù)調(diào)用的方法組織相應(yīng)的請(qǐng)求消息,傳遞給邏輯調(diào)度模塊,同時(shí)等待邏輯調(diào)度模塊的處理結(jié)果,若等待超時(shí),超時(shí)后調(diào)度模塊返回的調(diào)用超時(shí)結(jié)果將被丟棄;
步驟5.4:邏輯調(diào)度模塊根據(jù)作業(yè)流是否存在、作業(yè)流當(dāng)前狀態(tài)是否符合控制條件來判斷請(qǐng)求是否有效,其中控制條件如下:
A:當(dāng)前作業(yè)流激活狀態(tài)無法再次激活,當(dāng)前凍結(jié)狀態(tài)無法再次凍結(jié);
B:當(dāng)前作業(yè)流運(yùn)行或暫停狀態(tài)無法再次觸發(fā)運(yùn)行;
C:已經(jīng)結(jié)束或處于初始狀態(tài)的作業(yè)流無法停止;
D:只有處于運(yùn)行狀態(tài)的作業(yè)流可以被暫停,只有處于被暫停狀態(tài)的作業(yè)流可以被恢復(fù);
E:處于運(yùn)行狀態(tài)的作業(yè)流,只有失敗狀態(tài)的作業(yè)可以被人工觸發(fā)運(yùn)行;而處于結(jié)束狀態(tài)的作業(yè)流,其中任意一個(gè)作業(yè)可以被觸發(fā),整個(gè)作業(yè)流可以繼續(xù)執(zhí)行;
F:只有處于運(yùn)行狀態(tài)的作業(yè)可以被停止;
步驟5.5:通過狀態(tài)判定,調(diào)度模塊則對(duì)指定的作業(yè)流進(jìn)行更新,若是觸發(fā)作業(yè)流或作業(yè),則會(huì)創(chuàng)建作業(yè)調(diào)度事件,并通知分發(fā);
步驟5.6:調(diào)度模塊返回控制結(jié)果,再由服務(wù)接口模塊將結(jié)果返回給調(diào)用方。
優(yōu)選地,所述步驟6包括:
步驟6.1:作業(yè)分發(fā)模塊根據(jù)觸發(fā)檢查是否有待處理事件,其中所述觸發(fā)包括調(diào)度模塊發(fā)出的通知消息觸發(fā)和作業(yè)分發(fā)模塊的定時(shí)觸發(fā);
步驟6.2:若有待處理事件,則分發(fā)模塊取出所有待處理事件,若沒有待處理事件, 則等待下次檢查;
步驟6.3:取出所有待處理事件后更新這些事件為已讀取狀態(tài),防止再次檢索重復(fù)處理;
步驟6.4:根據(jù)事件包含信息,將事件交由分發(fā)線程池進(jìn)行作業(yè)分發(fā);
步驟6.5:若發(fā)送失敗,則檢查是否超過設(shè)定的重發(fā)限制,所述重發(fā)限制是為防止故障事件被永遠(yuǎn)地重發(fā)下去而占用分發(fā)線程使正常事件得不到及時(shí)處理;
步驟6.6:當(dāng)重發(fā)已達(dá)到限制次數(shù)時(shí),則標(biāo)記發(fā)送失敗,不再進(jìn)行重發(fā);當(dāng)未達(dá)到重發(fā)限制時(shí),則繼續(xù)進(jìn)行重發(fā)知道發(fā)送成功或達(dá)到重發(fā)限制;若發(fā)送成功,則標(biāo)記事件已發(fā)送狀態(tài),防止被再次發(fā)送;
步驟6.7:Agent接收到作業(yè)后,檢查所述作業(yè)是否有效,若作業(yè)指令異常,則返回相應(yīng)的作業(yè)錯(cuò)誤應(yīng)答;
步驟6.9:通過所述檢查后,Agent啟動(dòng)作業(yè)執(zhí)行進(jìn)程并等待執(zhí)行結(jié)束將結(jié)果返回。
以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述。需要理解的是,本發(fā)明并不局限于上述特定實(shí)施方式,本領(lǐng)域技術(shù)人員可以在權(quán)利要求的范圍內(nèi)做出各種變形或修改,這并不影響本發(fā)明的實(shí)質(zhì)內(nèi)容。