向 勇,陳 康,朱應(yīng)堅
(1.中國電信股份有限公司廣州研究院 廣州510630;2.中國電信股份有限公司廣東分公司 廣州510081)
任務(wù)調(diào)度,在企業(yè)數(shù)據(jù)生產(chǎn)、運營和管理中具有非常重要的地位,是企業(yè)運營數(shù)據(jù)及時交付、支撐企業(yè)進行經(jīng)營決策和業(yè)務(wù)活動的重要保障,承擔了數(shù)據(jù)采集、ETL、數(shù)據(jù)匯總等大量任務(wù)的調(diào)度工作。然而,當前大部分調(diào)度功能都分散在各個IT支撐系統(tǒng)中且任務(wù)關(guān)聯(lián)信息不完整,這不僅增大了任務(wù)運維、管理人員的工作量和工作難度,而且讓相關(guān)人員無法便捷、準確地掌握企業(yè)數(shù)據(jù)生產(chǎn)中的所有任務(wù),更談不上統(tǒng)籌調(diào)度。
另外,現(xiàn)有任務(wù)調(diào)度系統(tǒng),在處理大規(guī)模任務(wù)調(diào)度時存在一些明顯不足,如下所述。
·任務(wù)調(diào)度、管理智能化程度不足,如任務(wù)之間的關(guān)系需要人工配置和維護,當需要管理的任務(wù)數(shù)量較多時,不僅維護工作量大,而且容易操作失誤;
·現(xiàn)有調(diào)度系統(tǒng)基本都采用靜態(tài)任務(wù)優(yōu)先級來控制任務(wù)的調(diào)度順序,而任務(wù)的重要性和緊急性在任務(wù)的全生命周期是動態(tài)變化的,因此其調(diào)度控制合理性較差。
為了解決上述問題,筆者根據(jù)多年的數(shù)據(jù)分析與應(yīng)用經(jīng)驗,提出了一種基于SPA(single point of access)模型和BSA(browser server agent)架構(gòu)的大規(guī)模統(tǒng)一任務(wù)調(diào)度設(shè)計方案,并在中國電信股份有限公司廣東分公司(以下簡稱廣東電信)得到驗證和應(yīng)用。
SPA模型,即單點訪問信息模型,如圖1所示。通過將任務(wù)與人員、任務(wù)動作、其他任務(wù)、輸入輸出信息、日志和資源關(guān)聯(lián),使任務(wù)調(diào)度運維人員只需要訪問一個任務(wù),就能了解到與這個任務(wù)相關(guān)的其他所有信息。
圖1 SPA模型
·關(guān)聯(lián)人員:用來關(guān)聯(lián)設(shè)置任務(wù)的運維者(責任人)、任務(wù)的關(guān)注者(哪些人會關(guān)注該任務(wù))以及任務(wù)的信息訂閱者(訂閱任務(wù)告警、任務(wù)日志等)。
·關(guān)聯(lián)動作:任務(wù)可以關(guān)聯(lián)設(shè)置一個或者多個動作。每個動作,對應(yīng)一段代碼或一個程序,負責處理一定的業(yè)務(wù)邏輯。動作之間只有先后關(guān)系,即任務(wù)中的多個動作將依次串行調(diào)度執(zhí)行。
·關(guān)聯(lián)任務(wù):任務(wù)可以與其他任務(wù)關(guān)聯(lián)(依賴關(guān)系和互斥關(guān)系),用來控制任務(wù)與任務(wù)之間的調(diào)度順序以及避免任務(wù)之間出現(xiàn)干擾。
·關(guān)聯(lián)數(shù)據(jù):設(shè)置任務(wù)的輸入輸出信息(任務(wù)需要哪些輸入信息,如數(shù)據(jù)源文件信息;會產(chǎn)生哪些輸出信息,如目標輸出文件信息),使任務(wù)運維和管理人員可以方便了解到與這個任務(wù)有關(guān)的輸入輸出信息。
·關(guān)聯(lián)日志:任務(wù)運維人員在任務(wù)調(diào)度運維過程中,除了關(guān)心任務(wù)本身的調(diào)度日志信息外,還需要關(guān)注被調(diào)度任務(wù)的外部日志信息,如數(shù)據(jù)采集程序生成的詳細日志信息。因此,關(guān)聯(lián)日志,負責建立外部日志的通道,使任務(wù)運維人員可以單點看到外部日志內(nèi)容。
·關(guān)聯(lián)資源:任務(wù)調(diào)度運維人員在任務(wù)調(diào)度運維過程中,需要了解任務(wù)執(zhí)行服務(wù)器上的CPU、內(nèi)存、網(wǎng)絡(luò)等資源占用情況。同時,任務(wù)調(diào)度平臺本身,也需要根據(jù)當前任務(wù)執(zhí)行服務(wù)器上的資源狀況進行合理調(diào)度。
為了滿足大規(guī)模作業(yè)環(huán)境下任務(wù)的統(tǒng)一調(diào)度和管理需求,需滿足以下設(shè)計原則和目標:
·良好的可擴展性和系統(tǒng)處理能力,能夠隨時將需要的任務(wù)納入系統(tǒng)統(tǒng)一調(diào)度、管理;
·良好的調(diào)度優(yōu)化策略控制,保證任務(wù)調(diào)度的合理性和高效性;
·良好的任務(wù)管理界面,方便任務(wù)調(diào)度、管理人員查看和維護任務(wù);
·良好的跨平臺支持能力和任務(wù)兼容性,使任務(wù)調(diào)度系統(tǒng)能夠運行在任何主流操作系統(tǒng)上,并能夠?qū)θ我饪蓤?zhí)行的腳本或程序進行調(diào)度、管理;
·良好的任務(wù)觸發(fā)機制,使任務(wù)調(diào)度人員可以根據(jù)生產(chǎn)調(diào)度需要,靈活地管理任務(wù)的調(diào)度運行。
為了實現(xiàn)上述目的,本文提出一種基于SPA模型和BSA架構(gòu)的大規(guī)模統(tǒng)一任務(wù)調(diào)度設(shè)計方案——統(tǒng)一任務(wù)調(diào)度(UTS),具體如下。
統(tǒng)一任務(wù)調(diào)度架構(gòu)如圖2所示。
大規(guī)模統(tǒng)一任務(wù)調(diào)度平臺,主要由任務(wù)調(diào)度服務(wù)端、任務(wù)代理和任務(wù)配置數(shù)據(jù)庫幾部分構(gòu)成。
·任務(wù)調(diào)度服務(wù)端:負責任務(wù)的調(diào)度及展現(xiàn)服務(wù),采用純Java編程,支持Linux、Windows、UNIX等主流操作系統(tǒng)。
·任務(wù)代理:負責任務(wù)接收、任務(wù)執(zhí)行(外部程序或命令調(diào)用)、結(jié)果上報等,采用純Java編程,支持Linux、Windows、UNIX等主流操作系統(tǒng)。
·任務(wù)配置數(shù)據(jù)庫:用于存放任務(wù)配置信息、調(diào)度記錄、任務(wù)代理監(jiān)控數(shù)據(jù)等信息,支持Oracle、MySQL等主流數(shù)據(jù)庫。
從圖3可以看出,系統(tǒng)整體上可以劃分為任務(wù)配置、任務(wù)監(jiān)控與展現(xiàn)、任務(wù)查詢與統(tǒng)計、任務(wù)調(diào)度與控制、任務(wù)代理以及系統(tǒng)管理等模塊。
圖2 統(tǒng)一任務(wù)調(diào)度系統(tǒng)架構(gòu)
3.2.1 任務(wù)配置
包括任務(wù)的新建、修改和刪除等以及任務(wù)關(guān)聯(lián)關(guān)系定義、任務(wù)類型管理和應(yīng)用系統(tǒng)管理等功能。
任務(wù)屬性,如SPA模型所示,主要由任務(wù)的基本信息、調(diào)度機制、關(guān)聯(lián)動作、關(guān)聯(lián)日志、關(guān)聯(lián)輸入輸出信息、關(guān)聯(lián)人員等構(gòu)成。
·任務(wù)基本信息:主要包括任務(wù)名稱、所屬應(yīng)用系統(tǒng)、類型、出錯處理策略(繼續(xù)/結(jié)束)、任務(wù)描述等。
·任務(wù)調(diào)度機制:包括定時觸發(fā)、事件觸發(fā)。
·任務(wù)關(guān)聯(lián)動作:指任務(wù)具體要執(zhí)行的程序或命令,可以有多個;多個動作可以是順序執(zhí)行,也可以是并發(fā)執(zhí)行。
·任務(wù)關(guān)聯(lián)日志:可以設(shè)置需要關(guān)聯(lián)查看的其他日志信息,如被調(diào)度執(zhí)行程序或命令所產(chǎn)生的日志信息。
·任務(wù)關(guān)聯(lián)輸入輸出:可以手工設(shè)置或自動分析出任務(wù)所依賴的輸入和輸出信息。
圖3 統(tǒng)一任務(wù)調(diào)度功能框架
·任務(wù)管理人員:可以設(shè)置任務(wù)對哪些人可見以及需要對哪些人推動任務(wù)調(diào)度信息,如調(diào)度成功與否等。
3.2.2 任務(wù)監(jiān)控與展現(xiàn)
提供圖形化方式、比較直觀的任務(wù)管理、維護界面,包括任務(wù)拓撲圖、任務(wù)列表等多種展現(xiàn)方式,并提供實時的任務(wù)代理狀態(tài)監(jiān)控能力。
3.2.3 任務(wù)查詢與統(tǒng)計
提供任務(wù)查詢、統(tǒng)計功能,如任務(wù)平均耗時統(tǒng)計、耗時最長任務(wù)鏈分析、關(guān)鍵任務(wù)分析等。
3.2.4 任務(wù)調(diào)度與控制
提供豐富的任務(wù)控制能力,包括任務(wù)開始、暫停、繼續(xù)、結(jié)束等,特別是任務(wù)結(jié)束功能,可以避免調(diào)度人員人工登錄到相應(yīng)任務(wù)主機上結(jié)束任務(wù)對應(yīng)的進程。
3.2.5 任務(wù)代理
與調(diào)度服務(wù)端保持心跳連接,實時上報其運行狀態(tài)。同時,接收調(diào)度服務(wù)端下發(fā)的任務(wù),在所在主機本地調(diào)用執(zhí)行任務(wù)中的動作(即可執(zhí)行程序、腳本或命令),并將執(zhí)行結(jié)果上報給調(diào)度服務(wù)端。
除了滿足上述功能外,任務(wù)代理還具備以下兩大關(guān)鍵能力和指標。
可控的系統(tǒng)負載:一方面是任務(wù)代理自身帶來的系統(tǒng)開銷要盡可能小,從而避免對任務(wù)主機造成較大影響;另一方面,任務(wù)代理能調(diào)度執(zhí)行的任務(wù)也可控,包括任務(wù)數(shù)量以及執(zhí)行任務(wù)時的系統(tǒng)總負荷(通常指CPU利用率)。
現(xiàn)場恢復(fù)能力:當任務(wù)代理因各種原因掛起或者關(guān)閉時,在重啟任務(wù)代理后,能夠?qū)惓0l(fā)生前正在執(zhí)行的任務(wù)及任務(wù)狀態(tài)恢復(fù)回來,包括任務(wù)接續(xù)等,從而可以避免重新調(diào)度執(zhí)行這些任務(wù)。
3.2.6 系統(tǒng)管理
除了提供了常規(guī)的用戶管理、角色管理、權(quán)限管理、備份與恢復(fù)等功能外,還提供現(xiàn)場恢復(fù)功能,即當任務(wù)調(diào)度服務(wù)端異常重啟后,能夠恢復(fù)到異常前的狀態(tài)。
隨著數(shù)據(jù)庫,特別是分布式并行數(shù)據(jù)庫性能的不斷提升,越來越多的數(shù)據(jù)分析任務(wù)都在數(shù)據(jù)庫中完成。而這些分析任務(wù)基本都采用SQL腳本來實現(xiàn)。通過對SQL腳本涉及的數(shù)據(jù)輸入/輸出表、表字段信息的提取,就可以分析出SQL腳本任務(wù)之間的依賴關(guān)系。例如任務(wù)A的SQL腳本中,數(shù)據(jù)輸入表為A、B,數(shù)據(jù)輸出表為C,而任務(wù)B的SQL腳本中,數(shù)據(jù)輸入表為C、D,數(shù)據(jù)輸出表為E,那么,則可以得出結(jié)論,任務(wù)B依賴于任務(wù)A的完成,從而避免人工定義任務(wù)之間的依賴關(guān)系,這樣不僅可以顯著降低運維人員工作量,同時還可以提高任務(wù)依賴關(guān)系的準確性。
如何更加合理地安排大規(guī)模任務(wù)調(diào)度的優(yōu)先順序、提高資源的合理利用、確保緊急且重要的任務(wù)能被優(yōu)先調(diào)度等成為任務(wù)調(diào)度人員目前關(guān)注的焦點問題。
目前,現(xiàn)有技術(shù)主要通過預(yù)先配置好的靜態(tài)優(yōu)先級來控制任務(wù)調(diào)度的優(yōu)先順序,但這種方法存在如下不足。
首先,靜態(tài)優(yōu)先級包含較多的主觀因素,不能真實、客觀地反映任務(wù)的重要程度。因為每個人都會認為自己負責的那部分任務(wù)是最重要和緊急的,這樣很容易導(dǎo)致任務(wù)優(yōu)先級失去意義。
其次,任務(wù)的重要性在任務(wù)的整個生命周期內(nèi)是動態(tài)變化的,今天很重要,但也許明天就不那么重要了,而靜態(tài)優(yōu)先級則無法體現(xiàn)這種變化。
當然,也可以通過手工方式及時修改任務(wù)的靜態(tài)優(yōu)先級,但當任務(wù)規(guī)模很大的時候,維護工作就會變得比較困難。
為了解決上述問題,本文提出一種動態(tài)計算任務(wù)優(yōu)先級的方法。
具體如下。
假設(shè)任務(wù)的靜態(tài)優(yōu)先級為Ps(通常為非零正整數(shù),用Pmax表示靜態(tài)優(yōu)先級的最大值),任務(wù)輸出物利用率(即某個時間范圍內(nèi)任務(wù)執(zhí)行結(jié)果,如數(shù)據(jù)庫表、數(shù)據(jù)文件等,被訪問次數(shù),用整數(shù)表示,最小值為0,最大值為Vmax)為Fv,任務(wù)調(diào)度頻度(即某個時間范圍內(nèi)被調(diào)度的次數(shù),用整數(shù)表示,最小值為0,最大值為Smax)為Fs,則任務(wù)的動態(tài)優(yōu)先級Pd的計算式為:
其中,Cp為任務(wù)靜態(tài)優(yōu)先級的權(quán)重因子,Cv為任務(wù)輸出物利用率的權(quán)重因子,Cs為任務(wù)調(diào)度頻度的權(quán)重因子,并且Cp+Cv+Cs=100%;ceil表示向上取整。
Pmax為靜態(tài)優(yōu)先級的最大值,為靜態(tài)值,通常在任務(wù)調(diào)度系統(tǒng)程序初始化時就已經(jīng)確定,例如,1~10表示將任務(wù)優(yōu)先級分為10個等級,10為最高優(yōu)先級。
Vmax表示當前系統(tǒng)中指定周期內(nèi)所有任務(wù)輸出物利用率中的最大值,例如,系統(tǒng)中總共配置了5個任務(wù),在指定周期內(nèi)(例如1個月)被訪問的次數(shù)分別為1、2、6、10、30,那么Vmax為30,需要注意的是,Vmax是動態(tài)變化的,在下一個指定周期內(nèi)可能就變成了15或60。
Smax表示當前系統(tǒng)中指定周期(例如1個月)內(nèi)所有任務(wù)被調(diào)度次數(shù)中的最大值,例如,系統(tǒng)中共配置了5個任務(wù),其1個月內(nèi)被調(diào)度的次數(shù)分別為1、3、4、30、720,則Smax為720。同樣,Smax也是動態(tài)變化的,在下一個指定周期內(nèi)可能變?yōu)?或者30。
下面具體介紹任務(wù)動態(tài)優(yōu)先級的計算過程。
任務(wù)依賴關(guān)系層級示意如圖4所示,任務(wù)B、C需要等任務(wù)A執(zhí)行完成后才能被調(diào)度執(zhí)行,任務(wù)D需要等任務(wù)E執(zhí)行完成后才能被調(diào)度執(zhí)行;而任務(wù)A、E都需要等任務(wù)F執(zhí)行完成后才能被調(diào)度執(zhí)行;任務(wù)F需要等任務(wù)G執(zhí)行完成后才能被調(diào)度執(zhí)行。
圖4 任務(wù)依賴關(guān)系層級示意
假設(shè)任務(wù)F被觸發(fā),進入調(diào)度等待隊列并準備分派、調(diào)度執(zhí)行,則將執(zhí)行以下計算流程。
(1)檢查任務(wù)F是否已經(jīng)計算或賦值了動態(tài)優(yōu)先級,如果已處理,則不需要重新計算任務(wù)的動態(tài)優(yōu)先級,結(jié)束計算過程。
(2)檢查任務(wù)A當前周期內(nèi)是否已經(jīng)計算或賦值動態(tài)優(yōu)先級。如果已處理,則結(jié)束該關(guān)聯(lián)分支的處理。
(3)檢查任務(wù)B、C當前周期內(nèi)是否已經(jīng)計算或賦值動態(tài)優(yōu)先級。如果沒有,則按上述計算式計算任務(wù)B、C的動態(tài)優(yōu)先級,取任務(wù)B、C兩者中的動態(tài)任務(wù)優(yōu)先級最大值賦給任務(wù)A。
(4)按照同樣方法計算任務(wù)D、E的動態(tài)任務(wù)優(yōu)先級。
(5)最后,取任務(wù)A和E兩者中的動態(tài)任務(wù)優(yōu)先級最大值賦予任務(wù)F,整個計算過程結(jié)束。
通過上述計算方法,可以充分反映任務(wù)的真實重要性,從而進行更加合理的調(diào)度。
本文提出的大規(guī)模任務(wù)調(diào)度技術(shù)方案在廣東電信大數(shù)據(jù)處理平臺以及營銷支撐門戶等系統(tǒng)中得到應(yīng)用,取得了較好的效果。但是,隨著電信運營商業(yè)務(wù)發(fā)展規(guī)模的不斷壯大、集約化程度的不斷提高,任務(wù)調(diào)度將面臨更高的要求和挑戰(zhàn)。如何提高設(shè)備資源的利用率,進一步提高任務(wù)調(diào)度的合理性及調(diào)度智能性,將是下一步研究的重點內(nèi)容。
1 周學(xué)功,梁樑,黃勛章等.可重構(gòu)系統(tǒng)中的實時任務(wù)在線調(diào)度與放置算法.計算機學(xué)報,2007(11)
2 袁祿來,曾國蓀,姜黎立等.網(wǎng)格環(huán)境下基于信任模型的動態(tài)級調(diào)度.計算機學(xué)報,2006(7)
3 金鋒,吳澄.大規(guī)模生產(chǎn)調(diào)度問題的研究現(xiàn)狀與展望.計算機集成制造系統(tǒng),2006(2)
4 王永炎,王強,王宏安等.基于優(yōu)先級表的實時調(diào)度算法及其實現(xiàn).軟件學(xué)報,2004(3)
5 齊驥,李曦,于海晨等.一種面向動態(tài)可重構(gòu)計算的調(diào)度算法.計算機研究與發(fā)展,2007(8)
6 劉民.基于數(shù)據(jù)的生產(chǎn)過程調(diào)度方法研究綜述.自動化學(xué)報,2009(6)