集群定時調度任務的控制方法
【專利摘要】本申請公開了一種集群定時調度任務的控制方法,在進行任務的調度時考慮將任務的執(zhí)行時間間隔控制在一定的范圍內,數據庫中只需要對每個定時調度任務維護調度時間、鎖定狀態(tài)信等信息,并且定時調度并不限于由某個節(jié)點執(zhí)行。采用本發(fā)明可以避免由于機器時間不同步所致的定時調度任務多次被執(zhí)行的問題,充分發(fā)揮集群系統(tǒng)的高并發(fā)、穩(wěn)定性的優(yōu)點,同時還可以大幅度降低應用的嵌入度。
【專利說明】集群定時調度任務的控制方法
【技術領域】
[0001]本發(fā)明涉及集群系統(tǒng)的任務調度技術,特別是涉及一種集群定時調度任務的控制方法。
【背景技術】
[0002]隨著計算機技術的發(fā)展,越來越多的服務和應用需要部署在服務器集群中,也就是說一個應用會被部署到多臺機器上或者一臺機器部署多個同樣的應用實例(又稱為節(jié)點)。而另一方面,在應用中常常需要進行定時調度處理,如銀行每天凌晨I點進行利息結算,或者電商系統(tǒng)每隔幾個小時對商品銷售進行統(tǒng)計。 [0003]以上兩個場景結合就出現這樣的問題:通常定時調度任務在一指定的調度時間只能執(zhí)行一次(例如,利息結算調度任務需要在凌晨I點進行一次利息結算),但是每個應用節(jié)點如果沒有任務鎖定機制,到指定時間點都會觸發(fā)定時調度任務的執(zhí)行。任務被多次執(zhí)行不僅浪費性能,而且還有可能造成數據錯誤。
[0004]針對上述問題,目前在集群系統(tǒng)中采用下述兩種定時調度任務的控制方法,一種是通過參數配置,只在一個節(jié)點上啟動定時調度任務,另一種是采用Quartz定時調度服務自有的集群控制方案,該方案中QUARTZ為實現多節(jié)點部署下,定時調度任務的單次執(zhí)行,需要將程序運行的java對象,以二進制的形式保存到數據庫,數據庫作為一個數據共享中心來供多個節(jié)點進行數據通信。QUARTZ的任務(TASK)以12張表(各表的功能具體如下表I所示)的形式實例化到數據庫中,基于數據庫引擎及High-Available的策略(集群的一種策略)自動協(xié)調每個節(jié)點的QUARTZ,當任一一節(jié)點的QUARTZ非正常關閉或出錯時,另幾個節(jié)點的QUARTZ會自動啟動。
[0005]
【權利要求】
1.一種集群定時調度任務的控制方法,其特征在于,包括: a、集群節(jié)點在自身內部署的定時調度任務的執(zhí)行時刻到達時,向數據庫請求執(zhí)行所述定時調度任務;其中,同時部署所述定時調度任務的集群節(jié)點數量大于一; b、所述數據庫根據所述請求,判斷所述定時調度任務當前是否被鎖定,如果是,則執(zhí)行步驟e,否則,執(zhí)行步驟c ; C、所述數據庫判斷當前時刻與所述定時調度任務最近一次被執(zhí)行的相關時刻之間的時間間隔是否小于預設的最小間隔閾值,如果是,則執(zhí)行步驟e,否則執(zhí)行步驟d ; d、所述數據庫鎖定所述定時調度任務,并觸發(fā)所述集群節(jié)點執(zhí)行所述定時調度任務;當所述定時調度任務的執(zhí)行結束時,所述集群節(jié)點觸發(fā)所述數據庫釋放所述鎖定;結束所述方法; e、所述數據庫拒絕所述請求。
2.根據權利要求1所述的方法,其特征在于,所述最近一次被執(zhí)行的相關時刻為所述定時調度任務最近一次被執(zhí)行的起始時刻。
3.根據權利要求1所述的方法,其特征在于,所述方法進一步包括:對于所述定時調度任務,所述數據庫實時維護該任務的調度信息;所述調度信息包括調度任務標識信息、最近一次執(zhí)行的起始時刻和/或完成時刻信息以及用于指示當前是否被鎖定的任務狀態(tài)信息。
4.根據權利要求3所述的方法,其特征在于,步驟b中判斷所述定時調度任務當前是否被鎖定包括: 所述數據庫查詢當前維護的所述定時調度任務的調度信息,如果該調度信息中的任務狀態(tài)信息指示為鎖定狀態(tài),則判定所述定時調度任務當前被鎖定,否則,判定為未被鎖定。
【文檔編號】G06F9/48GK103761148SQ201410037858
【公開日】2014年4月30日 申請日期:2014年1月26日 優(yōu)先權日:2014年1月26日
【發(fā)明者】張世彬 申請人:北京京東尚科信息技術有限公司, 北京京東世紀貿易有限公司