一種實現(xiàn)任務(wù)調(diào)度的方法及系統(tǒng)的制作方法
【專利摘要】本申請公開了一種實現(xiàn)任務(wù)調(diào)度的方法及系統(tǒng),包括利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù),根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度。本申請通過利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建的任務(wù),增強了任務(wù)的可擴展性,是一種通用性任務(wù)的創(chuàng)建方式;并且,由于任務(wù)模板中的插件,以及模板配置、和/或參數(shù)列表、和/或策略、和/或結(jié)果響應(yīng)的相互獨立性及可擴展性,而且它們之間可以做排列組合,因此,極大地實現(xiàn)了各個組件的重用,大大增強了任務(wù)的可擴展性,保證了本申請實現(xiàn)任務(wù)調(diào)度的方法的通用性,從而大大增強了觸發(fā)事件的可擴展性,提高了工作效率,降低了工作成本。
【專利說明】一種實現(xiàn)任務(wù)調(diào)度的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請涉及計算機處理技術(shù),尤指一種實現(xiàn)任務(wù)調(diào)度的方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著IT技術(shù)日益發(fā)展與深入,無論個人工作還是企業(yè)應(yīng)用,幾乎都會碰到任務(wù)調(diào)度的需求。任務(wù)調(diào)度,是指在給定的時刻執(zhí)行特定任務(wù)的方法,可以分為自動調(diào)度和人工調(diào)度。其中,自動調(diào)度是指按照一定的時間規(guī)律或頻率,比如每天幾點幾分幾秒或者每隔幾分鐘等規(guī)律,一旦當前的時刻符合這樣的規(guī)律,則立即執(zhí)行任務(wù);而人工任務(wù)是由人隨機觸發(fā)的,沒有規(guī)律可言。但兩者都有一個共同的屬性即時間。在實際應(yīng)用中,比如,一個BBS論壇,需要每隔半個小時生成精華文章的聚合內(nèi)容(RSS)文件,需要每天凌晨統(tǒng)計論壇用戶的積分排名,需要每隔30分鐘執(zhí)行鎖定用戶解鎖任務(wù)等;再如,對于一個典型的管理信息系統(tǒng)(MIS)來說,在每月I號凌晨都會統(tǒng)計上個月各部門的業(yè)務(wù)數(shù)據(jù)生成月報表,每半個小時會查詢用戶是否已經(jīng)有快到期的待處理業(yè)務(wù)等等。
[0003]任務(wù)調(diào)度本身涉及到多線程并發(fā)、運行時間規(guī)則制定,以及解析、場景保持與恢復(fù)、線程池維護等諸多方面的工作。如果直接使用自定義線程的方法來開發(fā)任務(wù)調(diào)度程序,是一項頗具挑戰(zhàn)性的工作?;蛘?,如果每做一個新的任務(wù),都需要做一套相應(yīng)的調(diào)度機制,就不僅僅是技術(shù)層面的問題了,事實上還會造成大量的重復(fù)勞動,造成了嚴重的人力物力的浪費。
[0004]任務(wù)調(diào)度的基本功能是實現(xiàn)周期性、有規(guī)律操作的需求。利用任務(wù)調(diào)度可以有效地解放管理、運維、運營人員的勞動力,完成頻繁乏味的操作、管理任務(wù)。通過事先規(guī)定要完成的工作、指定什么時候完成該工作,利用任務(wù)調(diào)度并監(jiān)測該工作的完成情況,來發(fā)現(xiàn)和糾正問題。任務(wù)調(diào)度一般分為任務(wù)調(diào)度觸發(fā)點和任務(wù)調(diào)度執(zhí)行事件。其中,任務(wù)調(diào)度觸發(fā)點可以是時間、周期、獨立參數(shù)數(shù)值等。如果達到預(yù)期觸發(fā)點,就執(zhí)行任務(wù)調(diào)度執(zhí)行事件。任務(wù)調(diào)度的靈活性取決于調(diào)度引擎對觸發(fā)點和被調(diào)度的事件類型的支持,多樣可靠的觸發(fā)點是任務(wù)調(diào)度實施的基礎(chǔ),而多種事件類型,則是任務(wù)調(diào)度是否可擴展的衡量標準。
【發(fā)明內(nèi)容】
[0005]為了解決上述技術(shù)問題,本申請?zhí)峁┝艘环N實現(xiàn)任務(wù)調(diào)度的方法及系統(tǒng),能夠大大增強觸發(fā)事件的可擴展性,從而提高工作效率,降低工作成本。
[0006]為了達到本申請目的,本申請?zhí)峁┮环N實現(xiàn)任務(wù)調(diào)度的方法,包括:利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù);
[0007]根據(jù)任務(wù)的實時狀態(tài)對實時隊列中的任務(wù)進行調(diào)度。
[0008]所述任務(wù)模板至少包括:任務(wù)模板標識ID,用于唯一標識任務(wù)模板;
[0009]任務(wù)模板名稱,不同任務(wù)模板ID對應(yīng)不同的任務(wù)模板名稱;以及,
[0010]插件,用于通過任務(wù)調(diào)度動態(tài)加載任務(wù)。
[0011 ] 所述任務(wù)模塊還包括:
[0012]內(nèi)容為命令的組合的模板配置;和/或,
[0013]所述任務(wù)執(zhí)行時,通過所述插件的執(zhí)行函數(shù)傳入的參數(shù)列表;和/或,
[0014]對所述插件工作的輸出進行分析的策略;和/或,
[0015]用于根據(jù)任務(wù)的執(zhí)行結(jié)果驅(qū)動任務(wù)的下一個環(huán)節(jié)的完成的結(jié)果響應(yīng)。
[0016]所述根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度為對所述任務(wù)模板的各組成逐步裝載、運用:根據(jù)創(chuàng)建的任務(wù)實例啟動工作線程,動態(tài)加載所述插件;任務(wù)成功執(zhí)行后結(jié)束工作線程并銷毀成功執(zhí)行的任務(wù)。
[0017]所述任務(wù)模板的各組成逐步裝載、運用還包括:調(diào)用插件的執(zhí)行函數(shù),傳遞模板配置參數(shù),和/或參數(shù)列表中的參數(shù),和/或策略信息,解析并處理參數(shù)。
[0018]所述插件的接口包括執(zhí)行函數(shù)、暫停函數(shù)、重試函數(shù)、中斷函數(shù)。
[0019]所述任務(wù)模板中包括有模板配置;所述模板配置使用任務(wù)調(diào)度引擎內(nèi)置的宏,以及可變的外置宏。
[0020]所述任務(wù)模板中包含有參數(shù)列表;所述參數(shù)列表中的參數(shù)為固定值的參數(shù),和/或可變值的參數(shù);
[0021]所述可變值的參數(shù)中包含有參數(shù)宏及參數(shù)語句。
[0022]所述任務(wù)模板中包含有策略;所述策略的格式為:可擴展標記語言xml格式、或初始化文件ini格式、或數(shù)據(jù)配置文件dat格式、或輕量級數(shù)據(jù)交換json格式,或二進制格式。
[0023]所述任務(wù)模板中包含有結(jié)果響應(yīng);所述結(jié)果響應(yīng)為操作函數(shù)。
[0024]該方法還包括:監(jiān)測正在執(zhí)行的任務(wù)的狀態(tài),記錄其進度和完成情況:
[0025]如果所述實時隊列中的任務(wù)執(zhí)行成功,將該任務(wù)從實時隊列中刪除;
[0026]如果所述實時隊列中的任務(wù)執(zhí)行失敗,根據(jù)任務(wù)失敗的間隔時間以及重試次數(shù)的限制,決定是否重新執(zhí)行。
[0027]所述是否重新執(zhí)行具體包括:判斷所述重試次數(shù)是否超過預(yù)設(shè)重試次數(shù)閾值,在未超過重試次數(shù)閾值時,判斷所述間隔時間是否超過預(yù)設(shè)重試間隔閾值,如果超過重試間隔閾值,則重新執(zhí)行該任務(wù);
[0028]如果判斷出所述重試次數(shù)已超過重試次數(shù)閾值,則不再執(zhí)行該任務(wù);
[0029]如果判斷出所述重試次數(shù)未超過重試次數(shù)閾值,所述間隔時間未超過重試間隔閾值,則暫時不執(zhí)行該任務(wù)。
[0030]該方法包括:對所述不再執(zhí)行的任務(wù)做鏡像處理,將該任務(wù)從實時隊列中刪除。
[0031]所述刪除任務(wù)包括:記錄所述任務(wù)及其執(zhí)行結(jié)果、銷毀任務(wù)實例,并將該任務(wù)從實時任務(wù)隊列中刪除,更新用于記錄該任務(wù)執(zhí)行次數(shù)的計數(shù)器。
[0032]該方法之前還包括:根據(jù)預(yù)先配置的看門狗的狀態(tài),決定是否重新開始對任務(wù)的調(diào)度。
[0033]當執(zhí)行所述任務(wù)時,該方法還包括:查詢當前正在執(zhí)行的任務(wù)隊列的長度,
[0034]如果當前的隊列長度小于預(yù)先設(shè)置的隊列長度閾值,則直接執(zhí)行所述任務(wù);如果當前隊列的長度已超過隊列長度閾值,則不執(zhí)行所述任務(wù)。
[0035]該方法之前還包括:判斷任務(wù)調(diào)度引擎是否被暫停,若被暫停,不檢查自動任務(wù)隊列;
[0036]否則,檢查自動任務(wù)隊列并執(zhí)行時刻表中所有時刻不晚于當前時刻的任務(wù)。
[0037]在任務(wù)調(diào)度引擎中,預(yù)先設(shè)置有用于存放連續(xù)失敗任務(wù)的連續(xù)失敗任務(wù)隊列,以及,任務(wù)連續(xù)失敗后自動轉(zhuǎn)入暫停狀態(tài)的次數(shù)閾值,和任務(wù)暫停后重新嘗試性探測的預(yù)設(shè)重試時間窗;該方法還包括:
[0038]在當前任務(wù)要執(zhí)行前,如果判斷出連續(xù)失敗任務(wù)隊列中存在該當前任務(wù),則獲取當前要執(zhí)行的任務(wù)的連續(xù)失敗次數(shù)和最后執(zhí)行時間;
[0039]在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與最后執(zhí)行時間的差小于重試時間窗時,退出當前任務(wù);
[0040]在連續(xù)失敗次數(shù)小于預(yù)設(shè)次數(shù)閾值時,執(zhí)行當前準備要執(zhí)行的任務(wù);
[0041]在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與最后執(zhí)行時間的差大于重試時間窗時,執(zhí)行當前準備要執(zhí)行的任務(wù)。
[0042]在所述任務(wù)執(zhí)行成功后,該方法還包括:重置該任務(wù)的連續(xù)失敗次數(shù)清零,最后執(zhí)行時間設(shè)置為當前時間。
[0043]在所述任務(wù)執(zhí)行失敗后,該方法還包括:將所述任務(wù)的連續(xù)失敗次數(shù)加一,最后執(zhí)行時間設(shè)置為當前時間。
[0044]本申請還提供一種實現(xiàn)任務(wù)調(diào)度的系統(tǒng),包括:接口與適配單元、任務(wù)調(diào)度引擎,以及任務(wù)實例單元,其中,
[0045]接口與適配單元,用于獲取來自外部的人工任務(wù);
[0046]任務(wù)實例單元,用于根據(jù)任務(wù)啟動時傳遞的參數(shù),并按照執(zhí)行-響應(yīng)的順序,完成賦予該任務(wù)的工作內(nèi)容;將任務(wù)執(zhí)行過程中的實時狀態(tài)與進度信息上報給任務(wù)調(diào)度引擎;
[0047]任務(wù)調(diào)度引擎,用于利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù),并根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度。
[0048]所述任務(wù)調(diào)度引擎包括任務(wù)創(chuàng)建模塊和任務(wù)執(zhí)行模塊,其中,
[0049]任務(wù)創(chuàng)建模塊,用于利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù);
[0050]任務(wù)執(zhí)行模塊,具體用于根據(jù)創(chuàng)建的任務(wù)實例啟動工作線程,動態(tài)加載插件,任務(wù)成功執(zhí)行后結(jié)束工作線程并銷毀成功執(zhí)行的任務(wù)。
[0051]所述任務(wù)模板至少包括:
[0052]任務(wù)模板ID,用于唯一標識任務(wù)模板;
[0053]任務(wù)模板名稱,不同任務(wù)模板ID對應(yīng)不同的任務(wù)模板名稱;以及,
[0054]插件,用于通過任務(wù)調(diào)度動態(tài)加載任務(wù)。
[0055]所述任務(wù)模板還包括:
[0056]用于包含命令的組合的模板配置;和/或,
[0057]任務(wù)執(zhí)行時,通過執(zhí)行函數(shù)傳入的參數(shù)列表;和/或,
[0058]用于對插件工作的輸出進行分析的策略;和/或,
[0059]用于根據(jù)任務(wù)的執(zhí)行結(jié)果驅(qū)動任務(wù)的下一個環(huán)節(jié)的完成的結(jié)果響應(yīng)。
[0060]所述任務(wù)執(zhí)行模塊還用于,調(diào)用插件的執(zhí)行函數(shù),以傳遞模板配置參數(shù),和/或參數(shù)列表中的參數(shù),和/或策略信息,解析并處理參數(shù)。
[0061 ] 所述任務(wù)執(zhí)行模塊配置有看門狗,還用于在看門狗的狀態(tài)為真時進入任務(wù)調(diào)度。
[0062]所述接口與適配單元還用于,接收來自外部對任務(wù)調(diào)度引擎的控制指令,獲取任務(wù)調(diào)度引擎的狀態(tài);
[0063]所述任務(wù)執(zhí)行模塊,還用于在接收到的來自接口和適配單元的控制指令為暫停時,不檢查自動任務(wù)隊列;
[0064]在接收到的來自接口和適配單元的控制指令為繼續(xù)時,檢查自動任務(wù)隊列并執(zhí)行時刻表中所有時刻不晚于當前時刻的任務(wù)。
[0065]所述任務(wù)執(zhí)行模塊,還用于在執(zhí)行一個新任務(wù)時,查詢當前正在執(zhí)行的任務(wù)隊列的長度,在當前的隊列長度小于預(yù)先設(shè)置的隊列長度閾值時,直接執(zhí)行該任務(wù);在當前隊列的長度已超過隊列長度閾值時,不執(zhí)行該任務(wù)。
[0066]所述任務(wù)調(diào)度引擎還包括任務(wù)監(jiān)測模塊,用于監(jiān)測正在執(zhí)行的任務(wù)的狀態(tài),記錄其進度和完成情況,在所述實時隊列中的任務(wù)執(zhí)行成功時,將該任務(wù)從實時隊列中刪除;
[0067]在所述實時隊列中的任務(wù)執(zhí)行失敗時,根據(jù)任務(wù)失敗的間隔時間以及重試次數(shù)的限制,決定是否重新執(zhí)行。
[0068]所述任務(wù)監(jiān)測模塊具體用于:在任務(wù)執(zhí)行失敗時,
[0069]判斷重試次數(shù)是否超過預(yù)設(shè)重試次數(shù)閾值,在未超過重試次數(shù)閾值時,進一步判斷間隔時間是否超過重試間隔閾值,如果超過重試間隔,重新執(zhí)行該任務(wù);如果判斷出該任務(wù)的重試次數(shù)已超過重試次數(shù)閾值,則不再執(zhí)行該任務(wù);如果判斷出該任務(wù)的重試次數(shù)未超過重試次數(shù)閾值且間隔時間也未超過重試間隔閾值,則暫時不執(zhí)行該任務(wù);
[0070]對于成功執(zhí)行的任務(wù),記錄任務(wù)及其執(zhí)行結(jié)果、銷毀任務(wù)實例,并將該任務(wù)從實時任務(wù)隊列中刪除,更新用于記錄任務(wù)執(zhí)行次數(shù)的計數(shù)器。
[0071]所述任務(wù)執(zhí)行模塊進一步用于,將所述不再執(zhí)行的任務(wù)的信息做鏡像處理,刪除該任務(wù)。
[0072]所述任務(wù)調(diào)度引擎還包括自動運維模塊;在自動運維模塊中,預(yù)先設(shè)置有用于存放連續(xù)失敗任務(wù)的連續(xù)失敗任務(wù)隊列,以及,任務(wù)連續(xù)失敗后自動轉(zhuǎn)入暫停狀態(tài)的次數(shù)閾值,和任務(wù)暫停后重新嘗試性探測的預(yù)設(shè)重試時間窗;
[0073]所述自動運維模塊用于,
[0074]在當前任務(wù)要執(zhí)行前,如果連續(xù)失敗任務(wù)隊列中存在該當前任務(wù),則獲取當前要執(zhí)行的任務(wù)的連續(xù)失敗次數(shù)和最后執(zhí)行時間,
[0075]在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與獲得的最后執(zhí)行時間的差小于重試時間窗時,退出當前任務(wù);
[0076]在連續(xù)失敗次數(shù)小于預(yù)設(shè)次數(shù)閾值時,執(zhí)行當前準備要執(zhí)行的任務(wù);
[0077]在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與獲得的最后執(zhí)行時間的差大于重試時間窗時,執(zhí)行當前準備要執(zhí)行的任務(wù)。
[0078]所述自動運維模塊還用于,在任務(wù)執(zhí)行成功后,重置所述任務(wù)的連續(xù)失敗次數(shù)清零,最后執(zhí)行時間設(shè)置為當前時間。
[0079]所述自動運維模塊還用于,在任務(wù)執(zhí)行失敗后,將該所述任務(wù)的連續(xù)失敗次數(shù)加一,最后執(zhí)行時間設(shè)置為當前時間。
[0080]本申請?zhí)峁┑姆桨赴ɡ貌捎貌寮崿F(xiàn)的任務(wù)模板創(chuàng)建任務(wù),根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度。本申請通過利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建的任務(wù),增強了任務(wù)的可擴展性,是一種通用性任務(wù)的創(chuàng)建方式;并且,由于任務(wù)模板中的插件,以及模板配置、和/或參數(shù)列表、和/或策略、和/或結(jié)果響應(yīng)的相互獨立性及可擴展性,而且它們之間可以做排列組合,因此,極大地實現(xiàn)了各個組件的重用,大大增強了任務(wù)的可擴展性,保證了本申請實現(xiàn)任務(wù)調(diào)度的方法的通用性,從而大大增強了觸發(fā)事件的可擴展性,提高了工作效率,降低了工作成本。
[0081]另外,本申請通過自動運維過程,在任務(wù)執(zhí)行失敗時,任務(wù)調(diào)度引擎自動對這一類任務(wù)進行管控,避免了失敗的任務(wù)堆積而對正常任務(wù)運行的影響;而且,通過對失敗任務(wù)的定期執(zhí)行的嘗試,使得失敗任務(wù)重新進入正常的調(diào)度過程,從而節(jié)約了資源、提高了效率、避免了人工干預(yù)。
[0082]本申請的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本申請而了解。本申請的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
【專利附圖】
【附圖說明】
[0083]附圖用來提供對本申請技術(shù)方案的進一步理解,并且構(gòu)成說明書的一部分,與本申請的實施例一起用于解釋本申請的技術(shù)方案,并不構(gòu)成對本申請技術(shù)方案的限制。
[0084]圖1為本申請實現(xiàn)任務(wù)調(diào)度的方法的流程圖;
[0085]圖2為本申請實現(xiàn)自動運維過程的流程示意圖;
[0086]圖3為本申請實現(xiàn)任務(wù)調(diào)度的系統(tǒng)的組成結(jié)構(gòu)示意圖。
【具體實施方式】
[0087]為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本申請的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
[0088]在本申請一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0089]內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
[0090]計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
[0091]在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0092]目前,在實際應(yīng)用中,大多數(shù)情況還是使用基于時間、周期的任務(wù)調(diào)度觸發(fā)點。按照時間標準來觸發(fā)任務(wù),這時可以單獨調(diào)度一個任務(wù)來按周期同步時間,以保證觸發(fā)點的具有一個準確的時間標準。一種通用型的任務(wù)調(diào)度有Quartz, Quartz是一個開源的作業(yè)調(diào)度框架,完全由Java寫成,并設(shè)計用于J2SE和J2EE應(yīng)用中。Quartz提供了巨大的靈活性而不犧牲簡單性。可以用Quartz來為執(zhí)行一個作業(yè)而創(chuàng)建簡單的或復(fù)雜的調(diào)度。Quartz有很多特征,比如:數(shù)據(jù)庫支持,集群,插件,EJB作業(yè)預(yù)構(gòu)建,JavaMail及其它,支持cron-like表達式等。另外,還有cron4j, cron4j是一個Java的任務(wù)調(diào)度框架,類似于UNIX系統(tǒng)下的crontabo
[0093]現(xiàn)有實現(xiàn)任務(wù)調(diào)度的技術(shù)方案多以各種時間規(guī)律來觸發(fā)事件,支持各種時間規(guī)律或頻率的調(diào)度方案。但是,在觸發(fā)的事件類型上,比較狹窄,一般都只是對預(yù)先設(shè)置好的、固定的一些觸發(fā)事件可以驅(qū)動。即便對于通用型的任務(wù)調(diào)度程序如Quartz,其觸發(fā)事件擴展性也仍不夠理想,這樣無疑降低了工作效率,增加了工作成本。此外,現(xiàn)有的一些實現(xiàn)任務(wù)調(diào)度的解決方案中,在大量任務(wù)運行過程中,一旦出現(xiàn)錯誤造成任務(wù)大量失敗時,都必須通過人工干預(yù)、排查問題后才能繼續(xù)運行;如果沒有人工干預(yù),大量正常的任務(wù)也將受到影響。對于問題的解決造成了效率低、成本高等。
[0094]圖1為本申請實現(xiàn)任務(wù)調(diào)度的方法的流程圖,如圖1所示,包括:
[0095]步驟100:利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù)。
[0096]本申請中的任務(wù)衍生于任務(wù)模板,新的任務(wù)被創(chuàng)建,意味著它會繼承任務(wù)模板的所有屬性。任務(wù)模板至少包括:任務(wù)模板標識(ID),用于唯一標識任務(wù)模板;任務(wù)模板名稱,不同任務(wù)模板ID對應(yīng)不同的任務(wù)模板名稱;以及插件,用于通過任務(wù)調(diào)度動態(tài)加載任務(wù),其接口符合預(yù)設(shè)要求。
[0097]由于插件是一個動態(tài)加載的模塊,因此,插件可以根據(jù)需要臨時編寫,只要按照預(yù)先設(shè)置的接口要求編寫即可。插件的接口可以是執(zhí)行(work)、暫停(pause)、重試(resume)、中斷(terminate)四個函數(shù)。不同的插件,任務(wù)被執(zhí)行時體現(xiàn)出來的功能是完全不同的。本申請中,可以根據(jù)對插件的編寫,方便地對觸發(fā)事件進行擴展。需要說明的是,對于利用插件來創(chuàng)建任務(wù)是本領(lǐng)域技術(shù)人員的慣用技術(shù)手段,其具體實現(xiàn)方法也不用于限定本申請的保護范圍,本申請要強調(diào)的是,在任務(wù)調(diào)度中,利用采用插件實現(xiàn)的任務(wù)模板來創(chuàng)建任務(wù),增強了任務(wù)的可擴展性。
[0098]進一步地,任務(wù)模板還可以包括:模板配置、和/或參數(shù)列表、和/或策略、和/或結(jié)果響應(yīng);其中,
[0099]模板配置的內(nèi)容是命令的組合,模板配置可以是以.tpl為擴展名的文件。在實際使用中,可以根據(jù)需要編寫模板配置文件的內(nèi)容。也就是說,同樣的插件,不同的模板配置,其任務(wù)的功能是不一樣的,從而進一步增強了任務(wù)的可擴展性。
[0100]在模板配置中,可以使用任務(wù)調(diào)度引擎內(nèi)置的幾個宏,如表I所示:
【權(quán)利要求】
1.一種實現(xiàn)任務(wù)調(diào)度的方法,其特征在于,包括:利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù); 根據(jù)任務(wù)的實時狀態(tài)對實時隊列中的任務(wù)進行調(diào)度。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述任務(wù)模板至少包括:任務(wù)模板標識ID,用于唯一標識任務(wù)模板; 任務(wù)模板名稱,不同任務(wù)模板ID對應(yīng)不同的任務(wù)模板名稱;以及, 插件,用于通過任務(wù)調(diào)度動態(tài)加載任務(wù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述任務(wù)模塊還包括: 內(nèi)容為命令的組合的模板配置;和/或, 所述任務(wù)執(zhí)行時,通過所述插件的執(zhí)行函數(shù)傳入的參數(shù)列表;和/或, 對所述插件工作的輸出進行分析的策略;和/或, 用于根據(jù)任務(wù)的執(zhí)行結(jié)果驅(qū)動任務(wù)的下一個環(huán)節(jié)的完成的結(jié)果響應(yīng)。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度為對所述任務(wù)模板的各組成逐步裝載、運用:根據(jù)創(chuàng)建的任務(wù)實例啟動工作線程,動態(tài)加載所述插件;任務(wù)成功執(zhí)行后結(jié)束工作線程并銷毀成功執(zhí)行的任務(wù)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述任務(wù)模板的各組成逐步裝載、運用還包括:調(diào)用插件的執(zhí)行函數(shù),傳遞模板配置參數(shù),和/或參數(shù)列表中的參數(shù),和/或策略信息,解析并處理參數(shù)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述插件的接口包括執(zhí)行函數(shù)、暫停函數(shù)、重試函數(shù)、中斷函數(shù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述任務(wù)模板中包括有模板配置;所述模板配置使用任務(wù)調(diào)度引擎內(nèi)置的宏,以及可變的外置宏。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述任務(wù)模板中包含有參數(shù)列表;所述參數(shù)列表中的參數(shù)為固定值的參數(shù),和/或可變值的參數(shù); 所述可變值的參數(shù)中包含有參數(shù)宏及參數(shù)語句。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述任務(wù)模板中包含有策略;所述策略的格式為:可擴展標記語言xml格式、或初始化文件ini格式、或數(shù)據(jù)配置文件dat格式、或輕量級數(shù)據(jù)交換json格式,或二進制格式。
10.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述任務(wù)模板中包含有結(jié)果響應(yīng);所述結(jié)果響應(yīng)為操作函數(shù)。
11.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括:監(jiān)測正在執(zhí)行的任務(wù)的狀態(tài),記錄其進度和完成情況: 如果所述實時隊列中的任務(wù)執(zhí)行成功,將該任務(wù)從實時隊列中刪除; 如果所述實時隊列中的任務(wù)執(zhí)行失敗,根據(jù)任務(wù)失敗的間隔時間以及重試次數(shù)的限制,決定是否重新執(zhí)行。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述是否重新執(zhí)行具體包括:判斷所述重試次數(shù)是否超過預(yù)設(shè)重試次數(shù)閾值,在未超過重試次數(shù)閾值時,判斷所述間隔時間是否超過預(yù)設(shè)重試間隔閾值,如果超過重試間隔閾值,則重新執(zhí)行該任務(wù); 如果判斷出所述重試次數(shù)已超過重試次數(shù)閾值,則不再執(zhí)行該任務(wù); 如果判斷出所述重試次數(shù)未超過重試次數(shù)閾值,所述間隔時間未超過重試間隔閾值,則暫時不執(zhí)行該任務(wù)。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于,該方法包括:對所述不再執(zhí)行的任務(wù)做鏡像處理,將該任務(wù)從實時隊列中刪除。
14.根據(jù)權(quán)利要求11或13所述的方法,其特征在于,所述刪除任務(wù)包括:記錄所述任務(wù)及其執(zhí)行結(jié)果、銷毀任務(wù)實例,并將該任務(wù)從實時任務(wù)隊列中刪除,更新用于記錄該任務(wù)執(zhí)行次數(shù)的計數(shù)器。
15.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法之前還包括:根據(jù)預(yù)先配置的看門狗的狀態(tài),決定是否重新開始對任務(wù)的調(diào)度。
16.根據(jù)權(quán)利要求1所述的方法,其特征在于,當執(zhí)行所述任務(wù)時,該方法還包括:查詢當前正在執(zhí)行的任務(wù)隊列的長度, 如果當前的隊列長度小于預(yù)先設(shè)置的隊列長度閾值,則直接執(zhí)行所述任務(wù);如果當前隊列的長度已超過隊列長度閾值,則不執(zhí)行所述任務(wù)。
17.根據(jù)權(quán)利要求1、11、15或16所述的方法,其特征在于,該方法之前還包括:判斷任務(wù)調(diào)度引擎是否被暫停,若被暫停,不檢查自動任務(wù)隊列; 否則,檢查自動任務(wù)隊列并執(zhí)行時刻表中所有時刻不晚于當前時刻的任務(wù)。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于,在任務(wù)調(diào)度引擎中,預(yù)先設(shè)置有用于存放連續(xù)失敗任務(wù)的連續(xù)失敗任務(wù)隊列,以及,任務(wù)連續(xù)失敗后自動轉(zhuǎn)入暫停狀態(tài)的次數(shù)閾值,和任務(wù)暫停后重新嘗試性探測的預(yù)設(shè)重試時間窗;該方法還包括: 在當前任務(wù)要執(zhí)行前,如果判斷出連續(xù)失敗任務(wù)隊列中存在該當前任務(wù),則獲取當前要執(zhí)行的任務(wù)的連續(xù)失敗次數(shù)和最后執(zhí)行時間; 在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與最后執(zhí)行時間的差小于重試時間窗時,退出當前任務(wù); 在連續(xù)失敗次數(shù)小于預(yù)設(shè)次數(shù)閾值時,執(zhí)行當前準備要執(zhí)行的任務(wù); 在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與最后執(zhí)行時間的差大于重試時間窗時,執(zhí)行當前準備要執(zhí)行的任務(wù)。
19.根據(jù)權(quán)利要求18所述的方法,其特征在于,在所述任務(wù)執(zhí)行成功后,該方法還包括:重置該任務(wù)的連續(xù)失敗次數(shù)清零,最后執(zhí)行時間設(shè)置為當前時間。
20.根據(jù)權(quán)利要求18所述的方法,其特征在于,在所述任務(wù)執(zhí)行失敗后,該方法還包括:將所述任務(wù)的連續(xù)失敗次數(shù)加一,最后執(zhí)行時間設(shè)置為當前時間。
21.一種實現(xiàn)任務(wù)調(diào)度的系統(tǒng),其特征在于,包括:接口與適配單元、任務(wù)調(diào)度引擎,以及任務(wù)實例單元,其中, 接口與適配單元,用于獲取來自外部的人工任務(wù); 任務(wù)實例單元,用于根據(jù)任務(wù)啟動時傳遞的參數(shù),并按照執(zhí)行-響應(yīng)的順序,完成賦予該任務(wù)的工作內(nèi)容;將任務(wù)執(zhí)行過程中的實時狀態(tài)與進度信息上報給任務(wù)調(diào)度引擎; 任務(wù)調(diào)度引擎,用于利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù),并根據(jù)任務(wù)的實時狀態(tài)對任務(wù)進行調(diào)度。
22.根據(jù)權(quán)利要求21所述的系統(tǒng),其特征在于,所述任務(wù)調(diào)度引擎包括任務(wù)創(chuàng)建模塊和任務(wù)執(zhí)行模塊,其中, 任務(wù)創(chuàng)建模塊,用于利用采用插件實現(xiàn)的任務(wù)模板創(chuàng)建任務(wù); 任務(wù)執(zhí)行模塊,具體用于根據(jù)創(chuàng)建的任務(wù)實例啟動工作線程,動態(tài)加載插件,任務(wù)成功執(zhí)行后結(jié)束工作線程并銷毀成功執(zhí)行的任務(wù)。
23.根據(jù)權(quán)利要求22所述的系統(tǒng),其特征在于,所述任務(wù)模板至少包括: 任務(wù)模板ID,用于唯一標識任務(wù)模板; 任務(wù)模板名稱,不同任務(wù)模板ID對應(yīng)不同的任務(wù)模板名稱;以及, 插件,用于通過任務(wù)調(diào)度動態(tài)加載任務(wù)。
24.根據(jù)權(quán)利要求23所述的系統(tǒng),其特征在于,所述任務(wù)模板還包括: 用于包含命令的組合的模板配置;和/或, 任務(wù)執(zhí)行時,通過執(zhí)行函數(shù)傳入的參數(shù)列表;和/或, 用于對插件工作的輸出進行分析的策略;和/或, 用于根據(jù)任務(wù)的執(zhí)行結(jié)果驅(qū)動任務(wù)的下一個環(huán)節(jié)的完成的結(jié)果響應(yīng)。
25.根據(jù)權(quán)利要求24所述的系統(tǒng),其特征在于,所述任務(wù)執(zhí)行模塊還用于,調(diào)用插件的執(zhí)行函數(shù),以傳遞模板配置參數(shù),和/或參數(shù)列表中的參數(shù),和/或策略信息,解析并處理參數(shù)。
26.根據(jù)權(quán)利要求22所述的系統(tǒng),其特征在于,所述任務(wù)執(zhí)行模塊配置有看門狗,還用于在看門狗的狀態(tài)為真時進入任務(wù)調(diào)度。
27.根據(jù)權(quán)利要求22所述的系統(tǒng),其特征在于,所述接口與適配單元還用于,接收來自外部對任務(wù)調(diào)度引擎的控制指令,獲取任務(wù)調(diào)度引擎的狀態(tài); 所述任務(wù)執(zhí)行模塊,還用于在接收到的來自接口和適配單元的控制指令為暫停時,不檢查自動任務(wù)隊列; 在接收到的來自接口和適配單元的控制指令為繼續(xù)時,檢查自動任務(wù)隊列并執(zhí)行時刻表中所有時刻不晚于當前時刻的任務(wù)。
28.根據(jù)權(quán)利要求22所述的系統(tǒng),其特征在于,所述任務(wù)執(zhí)行模塊,還用于在執(zhí)行一個新任務(wù)時,查詢當前正在執(zhí)行的任務(wù)隊列的長度,在當前的隊列長度小于預(yù)先設(shè)置的隊列長度閾值時,直接執(zhí)行該任務(wù);在當前隊列的長度已超過隊列長度閾值時,不執(zhí)行該任務(wù)。
29.根據(jù)權(quán)利要求22、26、27或28所述的系統(tǒng),其特征在于,所述任務(wù)調(diào)度引擎還包括任務(wù)監(jiān)測模塊,用于監(jiān)測正在執(zhí)行的任務(wù)的狀態(tài),記錄其進度和完成情況,在所述實時隊列中的任務(wù)執(zhí)行成功時,將該任務(wù)從實時隊列中刪除; 在所述實時隊列中的任務(wù)執(zhí)行失敗時,根據(jù)任務(wù)失敗的間隔時間以及重試次數(shù)的限制,決定是否重新執(zhí)行。
30.根據(jù)權(quán)利要求29所述的系統(tǒng),其特征在于,所述任務(wù)監(jiān)測模塊具體用于:在任務(wù)執(zhí)行失敗時, 判斷重試次數(shù)是否超過預(yù)設(shè)重試次數(shù)閾值,在未超過重試次數(shù)閾值時,進一步判斷間隔時間是否超過重試間隔閾值,如果超過重試間隔,重新執(zhí)行該任務(wù);如果判斷出該任務(wù)的重試次數(shù)已超過重試次數(shù)閾值,則不再執(zhí)行該任務(wù);如果判斷出該任務(wù)的重試次數(shù)未超過重試次數(shù)閾值且間隔時間也未超過重試間隔閾值,則暫時不執(zhí)行該任務(wù); 對于成功執(zhí)行的任務(wù),記錄任務(wù)及其執(zhí)行結(jié)果、銷毀任務(wù)實例,并將該任務(wù)從實時任務(wù)隊列中刪除,更新用于記錄任務(wù)執(zhí)行次數(shù)的計數(shù)器。
31.根據(jù)權(quán)利要求29所述的系統(tǒng),其特征在于,所述任務(wù)執(zhí)行模塊進一步用于,將所述不再執(zhí)行的任務(wù)的信息做鏡像處理,刪除該任務(wù)。
32.根據(jù)權(quán)利要求29所述的系統(tǒng),其特征在于,所述任務(wù)調(diào)度引擎還包括自動運維模塊;在自動運維模塊中,預(yù)先設(shè)置有用于存放連續(xù)失敗任務(wù)的連續(xù)失敗任務(wù)隊列,以及,任務(wù)連續(xù)失敗后自動轉(zhuǎn)入暫停狀態(tài)的次數(shù)閾值,和任務(wù)暫停后重新嘗試性探測的預(yù)設(shè)重試時間窗; 所述自動運維模塊用于, 在當前任務(wù)要執(zhí)行前,如果連續(xù)失敗任務(wù)隊列中存在該當前任務(wù),則獲取當前要執(zhí)行的任務(wù)的連續(xù)失敗次數(shù)和最后執(zhí)行時間, 在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與獲得的最后執(zhí)行時間的差小于重試時間窗時,退出當前任務(wù); 在連續(xù)失敗次數(shù)小于預(yù)設(shè)次數(shù)閾值時,執(zhí)行當前準備要執(zhí)行的任務(wù); 在連續(xù)失敗次數(shù)大于預(yù)設(shè)次數(shù)閾值,且當前時間與獲得的最后執(zhí)行時間的差大于重試時間窗時,執(zhí)行當前準備要執(zhí)行的任務(wù)。
33.根據(jù)權(quán)利要求32所述的系統(tǒng),其特征在于,所述自動運維模塊還用于,在任務(wù)執(zhí)行成功后,重置所述任務(wù)的連續(xù)失敗次數(shù)清零,最后執(zhí)行時間設(shè)置為當前時間。
34.根據(jù)權(quán)利要求32所述的系統(tǒng),其特征在于,所述自動運維模塊還用于,在任務(wù)執(zhí)行失敗后,將該所述任務(wù)的連續(xù)失敗次數(shù)加一,最后執(zhí)行時間設(shè)置為當前時間。
【文檔編號】G06F9/48GK104166590SQ201310187584
【公開日】2014年11月26日 申請日期:2013年5月20日 優(yōu)先權(quán)日:2013年5月20日
【發(fā)明者】段文國 申請人:阿里巴巴集團控股有限公司