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