亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種任務管理方法及系統(tǒng)與流程

文檔序號:11250697閱讀:399來源:國知局
一種任務管理方法及系統(tǒng)與流程

本發(fā)明涉及互聯(lián)網技術中的任務調度技術,尤其是一種任務管理方法及系統(tǒng)。



背景技術:

現(xiàn)有技術中,在對任務的管理中,最常見的是使用分布式部署方案(quartz),quartz的部署方式如圖1所示,其中,quartz集群中的每個節(jié)點都是一個獨立的quartz應用,各節(jié)點之間通過數(shù)據庫鎖可以實現(xiàn)同步,利用分布式協(xié)調服務(zookeeper)可以實現(xiàn)在某一時刻只有一個節(jié)點獲得鎖權限。

但是,quartz分布式集群中的節(jié)點觸發(fā)任務執(zhí)行時,缺乏任務的并發(fā)量控制。例如,當需要執(zhí)行的任務均為觸發(fā)執(zhí)行消耗大量系統(tǒng)資源的數(shù)據庫存儲過程、大數(shù)據計算的任務時,會消耗大量系統(tǒng)資源,達到系統(tǒng)負載的上限,此時若繼續(xù)觸發(fā)同類任務,會導致系統(tǒng)性能惡化,甚至崩潰。



技術實現(xiàn)要素:

有鑒于此,本發(fā)明實施例期望提供一種任務管理方法及系統(tǒng),能夠實現(xiàn)根據系統(tǒng)處理任務的能力動態(tài)地管理,節(jié)約系統(tǒng)資源。

為達到上述目的,本發(fā)明實施例的技術方案是這樣實現(xiàn)的:

本發(fā)明實施例提供了一種任務管理系統(tǒng),包括:

任務觸發(fā)模塊,用于觸發(fā)任務,并將已經觸發(fā)且未執(zhí)行的任務存儲在任務池中;

第一任務分發(fā)模塊,用于提取所述任務池中的任務,并根據所提取任務的資源類型將所提取的任務存儲在與所述資源類型對應的等待隊列中;

所述第一任務分發(fā)模塊,還用于判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中;

所述第一任務分發(fā)模塊,還用于從所述等待隊列中提取所述任務后,將所述任務發(fā)送至任務執(zhí)行模塊;

任務執(zhí)行模塊,用于執(zhí)行所述第一任務分發(fā)模塊發(fā)送的任務;

所述第一任務分發(fā)模塊,還用于所述任務執(zhí)行模塊執(zhí)行完成所發(fā)送的任務后,刪除所述任務表中的相應任務的信息。

上述方案中,所述第一任務分發(fā)模塊,還用于提取所述任務池中的至少一個所述任務之前,獲得來自分布式協(xié)調服務的唯一鎖權限。

上述方案中,所述系統(tǒng)還包括:

第二任務分發(fā)模塊,用于未獲得所述分布式協(xié)調服務的唯一鎖權限時,接收所述任務觸發(fā)模塊發(fā)送的第一通知消息,獲得所述任務池中的任務提取情況;

接收所述任務執(zhí)行模塊發(fā)送的第二通知消息,獲得所述任務執(zhí)行模塊中任務的執(zhí)行情況。

上述方案中,所述第二任務分發(fā)模塊,還用于當所述第二任務分發(fā)模塊因所述第一任務分發(fā)模塊釋放鎖權限而獲得所述來自分布式協(xié)調服務的唯一鎖權限時,接替所述第一任務分發(fā)模塊繼續(xù)從所述等待隊列中提取所述任務,并將所述任務發(fā)送至所述任務執(zhí)行模塊。

上述方案中,

所述任務觸發(fā)模塊具體用于:在所述任務池中建立數(shù)據庫表;將所述任務存儲在所述數(shù)據庫表中;

所述第一任務分發(fā)模塊,具體用于:提取所述數(shù)據庫表中的任務,并依據所提取任務的資源類型信息,將所提取的任務和所述任務的資源類型信息存儲在所述等待隊列中。

上述方案中,

所述第一任務分發(fā)模塊還包括任務提交單元,所述任務提交單元用于:

建立與所述等待隊列對應的執(zhí)行哈希表,并在所述任務發(fā)送至所述任務執(zhí)行模塊執(zhí)行時,將所述任務的信息儲存在所述執(zhí)行哈希表中。

上述方案中,

所述任務提交單元還用于,根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;

所述任務提交單元還用于,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入所述執(zhí)行哈希表中。

上述方案中,

所述第一任務分發(fā)模塊還包括第一心跳監(jiān)控單元,用于將所述任務發(fā)送至所述任務執(zhí)行模塊前,根據所述任務執(zhí)行模塊的心跳信息選擇處于工作狀態(tài)的所述任務執(zhí)行模塊,由所述任務執(zhí)行模塊執(zhí)行所提取的任務。

本發(fā)明實施例還提供了一種任務管理方法,包括:

將已經觸發(fā)且還未執(zhí)行的任務存儲在任務池中;

提取所述任務池中的任務;并根據所提取任務的資源類型將所提取的任務存儲在與所述資源類型對應的等待隊列中;

判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中;

從所述等待隊列中提取任務并發(fā)送給執(zhí)行模塊執(zhí)行;

執(zhí)行完成所述任務后,刪除所述任務表中的相應任務的信息。

上述方案中,所述方法還包括:

提取所述任務池中的至少一個所述任務之前,獲得來自分布式協(xié)調服務的唯一鎖權限。

上述方案中,所述方法還包括:

未獲得所述分布式協(xié)調服務的唯一鎖權限時,接收第一通知消息,獲得所述任務池中的任務提取情況;

接收第二通知消息,獲得所述任務的執(zhí)行情況。

上述方案中,所述方法還包括:

重新獲得所述來自分布式協(xié)調服務的唯一鎖權限時,

從所述等待隊列中繼續(xù)提取任務并執(zhí)行所提取的任務。

上述方案中,所述將已經觸發(fā)且還未執(zhí)行的任務存儲在任務池中,具體包括:

在所述任務池中建立數(shù)據庫表;并將所述任務存儲在所述數(shù)據庫表中;

所述提取所述任務池中的任務具體包括:

提取所述數(shù)據庫表中的任務,并依據所提取任務的資源類型信息,將所提取的任務和所述任務的資源類型信息存儲在所述等待隊列中。

上述方案中,所述方法還包括:

建立與所述等待隊列對應的執(zhí)行哈希表,并在從所述等待隊列中提取所述任務并執(zhí)行所提取的任務時,將所述任務的信息儲存在所述執(zhí)行哈希表中。

上述方案中,所述方法還包括:

根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入所述執(zhí)行哈希表中。

上述方案中,所述方法還包括:

所述從所述等待隊列中提取任務之前,根據心跳信息選擇處于工作狀態(tài)的執(zhí)行模塊,由所述執(zhí)行模塊執(zhí)行所提取的任務。

本發(fā)明實施例提供的任務管理系統(tǒng)的第一任務分發(fā)模塊可以判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,僅在正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取并執(zhí)行任務,從而實現(xiàn)了對任務并發(fā)量的控制,因此可以避免現(xiàn)有技術中達到系統(tǒng)負載上限時,仍然繼續(xù)觸發(fā)任務的缺陷。

本發(fā)明實施例能夠直接實現(xiàn)對任務觸發(fā)和執(zhí)行的控制,不需要限定使用環(huán)境,實現(xiàn)簡單方便,適用范圍更廣,同時提高了用戶的體驗。

附圖說明

圖1為現(xiàn)有技術中quartz的部署方式示意圖;

圖2為本發(fā)明任務管理方法的實施例實現(xiàn)過程流程示意圖;

圖3為本發(fā)明任務管理系統(tǒng)的實施例組成結構示意圖;

圖4為本發(fā)明任務管理系統(tǒng)的實施一例組成結構示意圖;

圖5為本發(fā)明任務管理系統(tǒng)的實施二例組成結構示意圖。

具體實施方式

為了能夠更加詳盡地了解本發(fā)明實施例的特點與技術內容,下面結合附圖對本發(fā)明實施例的實現(xiàn)進行詳細闡述,所附附圖僅供參考說明之用,并非用來限定本發(fā)明。

在本發(fā)明實施例記載中,需要說明的是,除非另有說明和限定,需本發(fā)明實施例所涉及的術語“第一\第二”僅僅是是區(qū)別類似的對象,不代表針對對象的特定排序,可以理解地,“第一\第二”在允許的情況下可以互換特定的順序或先后次序。應該理解“第一\第二”區(qū)分的對象在適當情況下可以互換,以使這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。

對本發(fā)明進行進一步詳細說明之前,對本發(fā)明實施例中涉及的名詞和術語進行說明,本發(fā)明實施例中涉及的名詞和術語適用于如下的解釋。

quartz,quartz允許開發(fā)人員根據時間間隔來調度作業(yè)。quartz實現(xiàn)了作業(yè)和觸發(fā)器的多對多關系,還能把多個作業(yè)與不同的觸發(fā)器關聯(lián)。quartz只需要在系統(tǒng)中通過改變配置信息就可以實現(xiàn)對任務的管理。

zookeeper,提供了分布式鎖服務,獲得來自分布式協(xié)調服務唯一鎖權限的節(jié)點為主節(jié)點,未獲得唯一鎖權限的節(jié)點為備用節(jié)點,可以實現(xiàn)主備部署,保證系統(tǒng)的穩(wěn)定性。

圖2為本發(fā)明任務管理方法的實施例實現(xiàn)過程流程示意圖,如圖2所示,本發(fā)明任務管理方法的實施例實現(xiàn)過程包括以下步驟:

步驟201:將已經觸發(fā)且還未執(zhí)行的任務存儲在任務池中;

步驟202:提取所述任務池中的任務,并根據所提取任務的資源類型將所提取的任務存儲在與所述資源類型對應的等待隊列(waittinglist)中;

步驟203:判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,如果是,執(zhí)行步驟204,否則,執(zhí)行步驟205;

步驟204:暫停提取任務;

步驟205:從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中;

步驟206:執(zhí)行從所述等待隊列中提取的任務;

步驟207:執(zhí)行完成所述任務后,刪除所述任務表中的相應任務的信息。

實際應用中,提取所述任務池中的至少一個所述任務之前,需要獲得來自分布式協(xié)調服務zookeeper的唯一鎖權限,如果未獲得所述分布式協(xié)調服務的唯一鎖權限時,需要接收第一通知消息,獲得所述任務池中的任務提取情況;并接收第二通知消息,獲得所述任務的執(zhí)行情況,保證重新獲得所述來自分布式協(xié)調服務的唯一鎖權限時,能夠立即從所述等待隊列中繼續(xù)提取任務并執(zhí)行所提取的任務。

步驟201中所述將已經觸發(fā)且還未執(zhí)行的任務存儲在任務池中具體包括:在所述任務池中建立數(shù)據庫表;并將所述任務存儲在所述數(shù)據庫表中;

所述提取所述任務池中的任務具體包括:提取所述數(shù)據庫表中的任務,優(yōu)選的,所述數(shù)據庫表的種類為關系型數(shù)據庫表,在使用關系型數(shù)據庫表時,可以將所述任務和所述任務的信息以索引的形式存儲在所述關系型數(shù)據庫表中;

所述任務的信息至少包括:任務地址信息(jobid)和系統(tǒng)資源類型信息(resourcetype),其中,所述任務地址信息與所述任務一一對應,每個所述任務都有且只有一個任務地址信息,所述系統(tǒng)資源類型信息表示執(zhí)行所述任務時所需要消耗的系統(tǒng)資源的類型,例如執(zhí)行所述任務時需要調用oracle數(shù)據庫、大數(shù)據計算集群等資源;

此外,所述任務信息還可以包括:任務類型信息(jobtype)、任務狀態(tài)信息(jobstatus)和任務參數(shù)信息(jobcontent),其中,所述任務類型信息用于加載并啟動相應的任務處理插件;所述任務狀態(tài)信息用于表示所述任務處于已創(chuàng)建狀態(tài)、等待執(zhí)行狀態(tài)、正在執(zhí)行狀態(tài)、正常結束狀態(tài)或者異常結束狀態(tài);所述任務參數(shù)信息用于以js對象標記(json,javascriptobjectnotation)字符串格式,將所述任務執(zhí)行時必要的參數(shù)提供給任務處理插件使用。

步驟202中所述提取所述任務池中的任務,并根據所提取任務的資源類型將所提取的任務存儲在與所述資源類型對應的等待隊列中,具體包括:可以輪詢所述任務池中的數(shù)據庫表,從所述數(shù)據庫表中提取每個任務,然后把任務存儲到所述任務的系統(tǒng)資源類型信息對應的等待隊列中,其中,每一種系統(tǒng)資源類型信息對應一種等待隊列。

步驟205中所述從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中,優(yōu)選的,首先建立與所述等待隊列對應的執(zhí)行哈希表,并在從所述等待隊列中提取所述任務并執(zhí)行所提取的任務時,將所述任務的信息儲存在所述執(zhí)行哈希表中,根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入所述執(zhí)行哈希表中,如果正在執(zhí)行的任務的數(shù)量已達到過預設的最大執(zhí)行任務數(shù)量時,則暫停從所述等待隊列中提取任務,在步驟205之前,還可以根據心跳信息選擇處于工作狀態(tài)的執(zhí)行器。

圖3為本發(fā)明任務管理系統(tǒng)的實施例組成結構示意圖,如圖3所示,本發(fā)明任務管理系統(tǒng)的實施例組成結構包括:

任務觸發(fā)模塊301、第一任務分發(fā)模塊302、任務執(zhí)行模塊303,其中,

所述任務觸發(fā)模塊301,用于觸發(fā)任務,并將已經觸發(fā)且未執(zhí)行的任務存儲在任務池中;

所述第一任務分發(fā)模塊302,用于提取所述任務池中的任務,并根據所提取任務的資源類型將所提取的任務存儲在與所述資源類型對應的等待隊列中;

所述第一任務分發(fā)模塊302,還用于判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中;

所述第一任務分發(fā)模塊302,還用于從所述等待隊列中提取所述任務后,將所述任務發(fā)送至任務執(zhí)行模塊;

任務執(zhí)行模塊303,用于執(zhí)行所述第一任務分發(fā)模塊發(fā)送的任務;

所述第一任務分發(fā)模塊302,還用于所述任務執(zhí)行模塊執(zhí)行完成所發(fā)送的任務后,刪除所述任務表中的相應任務的信息。

實際應用,所述第一任務分發(fā)模塊302,用于提取所述任務池中的至少一個所述任務之前,需要獲得來自分布式協(xié)調服務的唯一鎖權限。

所述系統(tǒng)還包括:第二任務分發(fā)模塊,所述第二任務分發(fā)模塊,用于未獲得所述分布式協(xié)調服務的唯一鎖權限時,接收所述任務觸發(fā)模塊301發(fā)送的第一通知消息,獲得所述任務池中的任務提取情況;并接收所述任務執(zhí)行模塊303發(fā)送的第二通知消息,獲得所述任務執(zhí)行模塊303中任務的執(zhí)行情況。所述第二任務分發(fā)模塊,還用于當所述第二任務分發(fā)模塊因所述第一任務分發(fā)模塊釋放鎖權限而獲得所述來自分布式協(xié)調服務的唯一鎖權限時,接替所述第一任務分發(fā)模塊繼續(xù)從所述等待隊列中提取所述任務,并將所述任務發(fā)送至所述任務執(zhí)行模塊。

所述任務觸發(fā)模塊301具體用于:在所述任務池中建立數(shù)據庫表;將所述任務存儲在所述數(shù)據庫表中,優(yōu)選的,所述數(shù)據庫表的種類為關系型數(shù)據庫表,在使用關系型數(shù)據庫表時,所述任務觸發(fā)模塊301可以將所述任務和所述任務的信息以索引的形式存儲在所述關系型數(shù)據庫表中,所述任務的信息至少包括:任務地址信息和系統(tǒng)資源類型信息,其中,所述任務地址信息與所述任務一一對應,每個所述任務都有且只有一個任務地址信息,所述系統(tǒng)資源類型信息表示執(zhí)行所述任務時所需要消耗的系統(tǒng)資源的類型,例如執(zhí)行所述任務時需要調用oracle數(shù)據庫、大數(shù)據計算集群等資源;此外,所述任務信息還可以包括但不限于以下信息:任務類型信息、任務狀態(tài)信息和任務參數(shù)信息,其中,所述任務類型信息用于加載并啟動相應的任務處理插件;所述任務狀態(tài)信息用于表示所述任務處于已創(chuàng)建狀態(tài)、等待執(zhí)行狀態(tài)、正在執(zhí)行狀態(tài)、正常結束狀態(tài)或者異常結束狀態(tài);所述任務參數(shù)信息用于以json字符串格式,將所述任務執(zhí)行時必要的參數(shù)提供給任務處理插件使用。所述第一任務分發(fā)模塊302,具體用于:提取所述數(shù)據庫表中的任務,并依據所提取任務的資源類型信息,將所提取的任務和所述任務的資源類型信息存儲在所述等待隊列中,具體的,所述第一任務分發(fā)模塊302可以輪詢所述任務池中的數(shù)據庫表,從所述數(shù)據庫表中提取每個任務,然后把任務存儲到所述任務的系統(tǒng)資源類型信息對應的等待隊列中,其中,每一種系統(tǒng)資源類型信息對應一種等待隊列。

所述第一任務分發(fā)模塊302,還用于判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中,優(yōu)選的,第一任務分發(fā)模塊302還包括任務提交單元,具體用于:建立與所述等待隊列對應的執(zhí)行哈希表,并在所述任務發(fā)送至所述任務執(zhí)行模塊執(zhí)行時,將所述任務的信息儲存在所述執(zhí)行哈希表中,所述任務提交單元還用于,根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;所述任務提交單元還用于,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入所述執(zhí)行哈希表中。

所述第一任務分發(fā)模塊302還包括第一心跳監(jiān)控單元,用于將所述任務發(fā)送至所述任務執(zhí)行模塊前,根據所述任務執(zhí)行模塊的心跳信息選擇處于工作狀態(tài)的所述任務執(zhí)行模塊303。

圖4為本發(fā)明任務管理系統(tǒng)的實施一例組成結構示意圖,如圖4所示,本發(fā)明任務管理系統(tǒng)的實施一例組成結構包括:

任務觸發(fā)模塊401、任務分發(fā)模塊402、任務執(zhí)行模塊403,其中,

所述任務觸發(fā)模塊401包括:任務觸發(fā)單元4011、任務觸發(fā)單元4012,

所述任務分發(fā)模塊402包括:任務分配單元4021、任務提交單元4022、任務提交單元4023、任務處理結果檢查單元4024、心跳監(jiān)控單元4025;

所述任務執(zhí)行模塊403包括:任務執(zhí)行單元4031、任務執(zhí)行單元4032、任務執(zhí)行單元4033、任務執(zhí)行單元4034。

本發(fā)明實施例的任務管理系統(tǒng)在工作時,工作過程包括以下步驟:

步驟1:所述任務觸發(fā)單元4011和任務觸發(fā)單元4012觸發(fā)任務,并將已經觸發(fā)且未執(zhí)行的任務存儲在任務池中;

所述任務觸發(fā)模塊401在實際應用中可以由任務觸發(fā)簇(jobtriggercluster)采用quartz集群實現(xiàn),具體的,所述任務觸發(fā)單元4011和任務觸發(fā)單元4012在所述任務池中建立數(shù)據庫表,將所述任務存儲在所述數(shù)據庫表中,優(yōu)選的,所述數(shù)據庫表的種類為關系型數(shù)據庫表,在使用關系型數(shù)據庫表時,可以將所述任務和所述任務的信息以索引的形式存儲在所述關系型數(shù)據庫表中,所述任務的信息至少包括:任務地址信息和系統(tǒng)資源類型信息,其中,所述任務地址信息與所述任務一一對應,每個所述任務都有且只有一個任務地址信息,所述系統(tǒng)資源類型信息表示執(zhí)行所述任務時所需要消耗的系統(tǒng)資源的類型,例如執(zhí)行所述任務時需要調用oracle數(shù)據庫、大數(shù)據計算集群等資源;此外,所述任務信息還可以包括但不限于以下信息:任務類型信息、任務狀態(tài)信息和任務參數(shù)信息,其中,所述任務類型信息用于加載并啟動相應的任務處理插件;所述任務狀態(tài)信息用于表示所述任務處于已創(chuàng)建狀態(tài)、等待執(zhí)行狀態(tài)、正在執(zhí)行狀態(tài)、正常結束狀態(tài)或者異常結束狀態(tài);所述任務參數(shù)信息用于以json字符串格式,將所述任務執(zhí)行時必要的參數(shù)提供給任務處理插件使用。

步驟2:所述任務分配單元4021從所述任務池中提取任務;

具體的,所述任務分配單元4021可以輪詢所述任務池中的數(shù)據庫表,從所述數(shù)據庫表中提取每個任務,所述任務分配單元在實際應用中可以表現(xiàn)為任務分派線程(dispatcher);

步驟3:所述任務分配單元4021將提取的任務放入等待隊列中;

具體的,所述任務分配單元4021可以把任務存儲到所述任務的系統(tǒng)資源類型信息對應的等待隊列中,其中,每一種系統(tǒng)資源類型信息對應一種等待隊列;

步驟4:任務提交單元4022從所述等待隊列中提取任務;

具體的,所述任務提交單元4022從所述等待隊列中提取任務之前首先要判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中,如果正在執(zhí)行的任務的數(shù)量已經超過預設的最大執(zhí)行任務數(shù)量時,則停止從所述等待隊列中提取任務,從而實現(xiàn)了對這種系統(tǒng)資源類型信息對應的任務的并發(fā)量控制。實施例一中所述任務提交單元4022首先建立與所述等待隊列對應的執(zhí)行哈希表,并在所述任務發(fā)送至所述任務執(zhí)行模塊403執(zhí)行時,將所述任務的信息儲存在所述執(zhí)行哈希表中,所述任務提交單元根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;所述執(zhí)行哈希表的hash的key為jobid,value為以json字符串格式存儲的所述任務的信息,本實施例一中所述執(zhí)行哈希表和等待隊列存儲在redis中;

步驟5:所述任務提交單元4022將任務發(fā)送至任務執(zhí)行模塊403執(zhí)行;

具體的,所述心跳監(jiān)控單元4025根據心跳信息,處于不間斷地監(jiān)控所述任務執(zhí)行單元4031、任務執(zhí)行單元4032、任務執(zhí)行單元4033、任務執(zhí)行單元4034的工作狀態(tài),僅選擇處于工作狀態(tài)的任務執(zhí)行單元;所述任務提交單元4022將任務發(fā)送至任務執(zhí)行模塊403執(zhí)行時還可以按照負載均衡策略,以遠程調用(rpc)的調用方式,將所述任務交給某個任務執(zhí)行單元執(zhí)行,所述任務執(zhí)行模塊403在實際應用中,可以由任務執(zhí)行器簇(jobrunnercluster)實現(xiàn),具體的,所述任務執(zhí)行器簇采用集群部署的方式,以框架和插件設計,可以根據所述任務的類型,加載并啟動相應的任務處理插件;

步驟6:任務提交單元4022將所述任務的信息存儲在所述執(zhí)行哈希表中;

具體的,所述任務提交單元4022將所述任務發(fā)送至所述任務執(zhí)行模塊403時,可以立刻將所述任務的信息存儲在所述執(zhí)行哈希表中;

步驟7:任務執(zhí)行模塊403將所述任務的執(zhí)行結果存儲在所述任務執(zhí)行結果隊列中;

步驟8:任務處理結果檢查單元4024從所述任務執(zhí)行結果隊列中提取所述任務的執(zhí)行結果;

步驟9:任務處理結果檢查單元4024根據所述任務的執(zhí)行結果刪除所述執(zhí)行哈希表中的所述任務的信息。

圖5為本發(fā)明任務管理系統(tǒng)的實施二例組成結構示意圖,如圖5所示,本發(fā)明任務管理系統(tǒng)的實施二例組成結構包括:

任務觸發(fā)模塊501、第一任務分發(fā)模塊502、任務執(zhí)行模塊503、第二任務分發(fā)模塊504,其中,

所述任務觸發(fā)模塊501包括:任務觸發(fā)單元5011、任務觸發(fā)單元5012,

所述第一任務分發(fā)模塊502包括:任務分配單元5021、任務提交單元5022、任務提交單元5023、任務處理結果檢查單元5024、心跳監(jiān)控單元5025;

所述任務執(zhí)行模塊503包括:任務執(zhí)行單元5031、任務執(zhí)行單元5032、任務執(zhí)行單元5033、任務執(zhí)行單元5034;

所述第二任務執(zhí)行模塊504包括:任務執(zhí)行單元5041、任務執(zhí)行單元5042、任務執(zhí)行單元5043、任務執(zhí)行單元5044、心跳監(jiān)控單元5045。

本發(fā)明實施例二的任務管理系統(tǒng)在工作時,工作過程包括以下步驟:

步驟1:所述任務觸發(fā)單元5011和任務觸發(fā)單元5012觸發(fā)任務,并將已經觸發(fā)且未執(zhí)行的任務存儲在任務池中;

所述任務觸發(fā)模塊501在實際應用中可以由任務觸發(fā)簇采用quartz集群實現(xiàn),具體的,所述任務觸發(fā)單元5011和任務觸發(fā)單元5012在所述任務池中建立數(shù)據庫表,將所述任務存儲在所述數(shù)據庫表中,優(yōu)選的,所述數(shù)據庫表的種類為關系型數(shù)據庫表,在使用關系型數(shù)據庫表時,可以將所述任務和所述任務的信息以索引的形式存儲在所述關系型數(shù)據庫表中,所述任務的信息至少包括:任務地址信息和系統(tǒng)資源類型信息,其中,所述任務地址信息與所述任務一一對應,每個所述任務都有且只有一個任務地址信息,所述系統(tǒng)資源類型信息表示執(zhí)行所述任務時所需要消耗的系統(tǒng)資源的類型,例如執(zhí)行所述任務時需要調用oracle數(shù)據庫、大數(shù)據計算集群等資源;此外,所述任務信息還可以包括但不限于以下信息:任務類型信息、任務狀態(tài)信息和任務參數(shù)信息,其中,所述任務類型信息用于加載并啟動相應的任務處理插件;所述任務狀態(tài)信息用于表示所述任務處于已創(chuàng)建狀態(tài)、等待執(zhí)行狀態(tài)、正在執(zhí)行狀態(tài)、正常結束狀態(tài)或者異常結束狀態(tài);所述任務參數(shù)信息用于以json字符串格式,將所述任務執(zhí)行時必要的參數(shù)提供給任務處理插件使用;

所述任務觸發(fā)單元5011和任務觸發(fā)單元5012還可以向所述第二任務分發(fā)模塊504發(fā)送第一通知消息,所述第一通知消息用于將所述任務池中的任務提取情況通知所述第二任務分發(fā)模塊504;

步驟2:所述任務分配單元5021從所述任務池中提取任務;

具體的,所述任務分配單元5021可以輪詢所述任務池中的數(shù)據庫表,從所述數(shù)據庫表中提取每個任務,所述任務分配單元在實際應用中可以表現(xiàn)為任務分派線程;由于使用了分布式協(xié)調服務,因此,所述任務分配單元5021從所述任務池中提取任務之前,需要獲得來自所述分布式協(xié)調服務的唯一鎖權限,同時,所述第二任務分發(fā)模塊504也在不斷申請獲得所述來自分布式協(xié)調服務的鎖權限;

步驟3:所述任務分配單元5021將提取的任務放入等待隊列中;

具體的,所述任務分配單元5021可以把任務存儲到所述任務的系統(tǒng)資源類型信息對應的等待隊列中,其中,每一種系統(tǒng)資源類型信息對應一種等待隊列;

步驟4:任務提交單元5022從所述等待隊列中提取任務;

具體的,所述任務提交單元5022從所述等待隊列中提取任務之前首先要判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量,在所述正在執(zhí)行的任務的數(shù)量未超過預設的最大執(zhí)行任務數(shù)量時,從所述等待隊列中提取任務,并將所提取任務的信息放入任務表中,如果正在執(zhí)行的任務的數(shù)量已經超過預設的最大執(zhí)行任務數(shù)量時,則停止從所述等待隊列中提取任務,從而實現(xiàn)了對這種系統(tǒng)資源類型信息對應的任務的并發(fā)量控制。實施例一中所述任務提交單元5022首先建立與所述等待隊列對應的執(zhí)行哈希表,并在所述任務發(fā)送至所述任務執(zhí)行模塊503執(zhí)行時,將所述任務的信息儲存在所述執(zhí)行哈希表中,所述任務提交單元根據所述執(zhí)行哈希表的長度判斷正在執(zhí)行的任務的數(shù)量是否超過預設的最大執(zhí)行任務數(shù)量;所述執(zhí)行哈希表的hash的key為jobid,value為以json字符串格式存儲的所述任務的信息,本實施例一中所述執(zhí)行哈希表和等待隊列存儲在redis中;

步驟5:所述任務提交單元5022將任務發(fā)送至任務執(zhí)行模塊503執(zhí)行;

具體的,所述心跳監(jiān)控單元5025根據心跳信息,處于不間斷地監(jiān)控所述任務執(zhí)行單元5031、任務執(zhí)行單元5032、任務執(zhí)行單元5033、任務執(zhí)行單元5034的工作狀態(tài),僅選擇處于工作狀態(tài)的任務執(zhí)行單元;所述任務提交單元5022將任務發(fā)送至任務執(zhí)行模塊503執(zhí)行時還可以按照負載均衡策略,以遠程調用的調用方式,將所述任務交給某個任務執(zhí)行單元執(zhí)行,所述任務執(zhí)行模塊503在實際應用中,可以由任務執(zhí)行器簇實現(xiàn),具體的,所述任務執(zhí)行器簇采用集群部署的方式,以框架和插件設計,可以根據所述任務的類型,加載并啟動相應的任務處理插件;所述任務執(zhí)行模塊503還可以向所述第二任務分發(fā)模塊504發(fā)送第二通知消息,所述第二通知消息用于將所述任務的執(zhí)行情況通知所述第二任務分發(fā)模塊504;

步驟6:任務提交單元5022將所述任務的信息存儲在所述執(zhí)行哈希表中;

具體的,所述任務提交單元5022將所述任務發(fā)送至所述任務執(zhí)行模塊503時,可以立刻將所述任務的信息存儲在所述執(zhí)行哈希表中;

步驟7:任務執(zhí)行模塊503將所述任務的執(zhí)行結果存儲在所述任務執(zhí)行結果隊列中;

步驟8:任務處理結果檢查單元5024從所述任務執(zhí)行結果隊列中提取所述任務的執(zhí)行結果;

步驟9:任務處理結果檢查單元5024根據所述任務的執(zhí)行結果刪除所述執(zhí)行哈希表中的所述任務的信息。

當所述第一任務分發(fā)模塊502崩潰時,所述第二任務分發(fā)模塊504立即獲得來自所述分布式協(xié)調服務的唯一鎖權限,可以繼續(xù)從所述任務池中提取任務,保證了系統(tǒng)的穩(wěn)定性。

本領域內的技術人員應明白,本發(fā)明實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本發(fā)明實施例可采用硬件實施例、軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明實施例可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產品的形式。

本發(fā)明實施例是參照根據本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數(shù)據處理設備的處理器執(zhí)行的指令產生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1