分布式定時任務調度系統的製作方法
2023-12-07 07:23:01
分布式定時任務調度系統的製作方法
【專利摘要】本發明提供了一種分布式定時任務調度方法,包括如下步驟:a)任務分發者系統啟動,監聽任務提交者系統的提交任務和任務執行者系統中的任務執行者的註冊;b)所述任務執行者系統啟動,自動向所述任務分發者系統註冊;c)所述任務提交者系統向所述任務分發者系統提交任務;d)所述任務分發者系統收到任務後,通知所述任務執行者系統中的已註冊的與所述任務對應的任務執行者來取走所述任務;e)所述與所述任務對應的任務執行者取走所述任務並執行所述任務。利用本發明的分布式定時任務調度系統具有管理簡單、操作方便等特點,能夠解決程序數目較多,且管理混亂等問題。
【專利說明】分布式定時任務調度系統
【技術領域】
[0001]本發明涉及客戶端/伺服器系統的任務管理,特別涉及一種基於客戶端/伺服器系統分布式定時任務調度系統。
【背景技術】
[0002]客戶端/伺服器結構(即Client/Server結構,簡稱C/S結構)是計算機領域中熟知的一種客戶機和伺服器結構。這是一種軟體系統體系結構,可以充分利用客戶機和伺服器兩端的硬體環境的優勢,將任務合理分配到客戶機(Client)端和伺服器(Server)端來實現,從而降低了系統的通訊開銷。伺服器端通常採用高性能的PC、工作站或小型機,並採用大型資料庫系統,如ORACLE、SYBASE、InfORMix或SQL Server。客戶端需要安裝專用的客戶端軟體。C/S結構的優點是能充分發揮客戶端PC的處理能力,很多工作可以在客戶端處理後再提交給伺服器。而且,數據的儲存管理功能較為透明。目前大多數應用軟體系統都是Client/Server形式的兩層結構。
[0003]在客戶端/伺服器結構的系統中,經常會有許多需要重複執行的任務或程序。如:生成周報的程序需要每周執行一次、發送郵件的程序需要每天凌晨3點執行一次、分析日誌的程序需要每天凌晨I點執行一次、信息採集的程序需要每兩小時執行一次等等。還有一些程序需要在特定的情況下手動觸發執行。
[0004]這些以周期性重複執行的任務或程序具有如下一些相同點:需要重複執行、需要定時執行、編寫程序時需要考慮定時邏輯等。如果在客戶端/伺服器結構的系統中這樣的任務或程序數目較多,就會使得客戶端/伺服器結構的系統的管理十分複雜混亂,容易出錯,造成系統不穩定等問題。
[0005]在現有技術中,為了解決這類重複執行的任務或程序的分配和管理問題,可以將這些需要定時重複執行的任務部署在一臺伺服器上,那麼這個定時任務就是整個系統的單點。然而,在單點模式下如果這臺伺服器出現故障的話會影響整個服務。對於可以冗餘的任務(重複運行不影響服務),也可以部署在多臺伺服器上,讓它們同時執行,這樣就可以很簡單的避免單點。但是如果任務不允許冗餘,最多只能有一臺伺服器執行任務,會產生互斥任務的單點問題。
[0006]因此,需要一種能夠解決定時重複執行的任務的管理問題,以達到管理簡單,操作方便的目的分布式定時任務調度方法和系統。
【發明內容】
[0007]本發明的目的是提供一種分布式定時任務調度方法,包括如下步驟:a)任務分發者系統啟動,監聽任務提交者系統的提交任務和任務執行者系統中的任務執行者的註冊;b)所述任務執行者系統啟動,自動向所述任務分發者系統註冊;c)所述任務提交者系統向所述任務分發者系統提交任務;d)所述任務分發者系統收到任務後,通知所述任務執行者系統中的已註冊的與所述任務對應的任務執行者來取走所述任務;e)所述與所述任務對應的任務執行者取走所述任務並執行所述任務。
[0008]優選地,還包括關閉所述任務分發者系統的步驟如下:h)所述任務提交者系統向任務分發者系統發送表示關閉任務分發者系統的命令;i)所述任務分發者系統停止接受任務;j)所述任務分發者系統向所述任務執行者系統發送任務集群命令;k)所述任務執行者系統將現有任務轉入集群;1)所述任務執行者系統將包括現有任務的集群返回所述任務分發者;m)所述任務分發者系統關機。
[0009]優選地,在步驟b中,所述任務提交者系統向所述任務分發者系統註冊的信息包括:每個所述任務執行者的功能信息、唯一標示、最大負載、及輸入輸出參數。
[0010]優選地,在步驟C中,所述任務提交者系統定時提交任務。
[0011]優選地,在步驟e之後,向所述任務分發者系統返回包括表示任務執行成功或任務異常的信息。
[0012]優選地,從步驟a至步驟m都採用Gearman傳輸協議,請求和響應被封裝成二進位數據包,所述二進位數據包包含一個文件頭以及數據內容。
[0013]優選地,所述二進位數據包僅包含數據內容。
[0014]優選地,所述文件頭的格式如下:所述文件頭為12個Byte,由4byte的MagicCode、4byte的消息類型和4byte的數據大小信息組成。
[0015]優選地,所述任務提交者系統包括2個任務提交者,所述任務分發者系統包括2個任務分發者。
[0016]優選地,所述任務提交者系統具有用戶界面接口。
[0017]利用本發明的分布式定時任務調度系統具有管理簡單、操作方便等特點,能夠解決程序數目較多,且管理混亂等問題。
【專利附圖】
【附圖說明】
[0018]參考隨附的附圖,本發明更多的目的、功能和優點將通過本發明實施方式的如下描述得以闡明,其中:
[0019]圖1示意性地示出了本發明的分布式定時任務調度系統的系統框圖;
[0020]圖2示意性地示出了本發明的分布式定時任務調度系統的方法流程圖。
[0021]圖3示意性地示出了本發明的分布式定時任務調度系統的關閉伺服器的方法流程圖。
【具體實施方式】
[0022]通過參考示範性實施例,本發明的目的和功能以及用於實現這些目的和功能的方法將得以闡明。然而,本發明並不受限於以下所公開的示範性實施例;可以通過不同形式來對其加以實現。說明書的實質僅僅是幫助相關領域技術人員綜合理解本發明的具體細節。
[0023]在下文中,將參考附圖描述本發明的實施例。在附圖中,相同的附圖標記代表相同或類似的部件,或者相同或類似的步驟。
[0024]圖1示意性地示出了本發明的分布式定時任務調度系統的系統框圖。本發明的分布式定時任務調度系統100包括3個子系統:任務提交者系統110、任務分發者系統120和任務執行者系統130。各子系統之間基於自定義協議(基於TCP/IP網絡通信協議)通信。[0025]下面關於自定義協議進行解釋。本系統的自定義協議的通信規則步驟為:
[0026]步驟1,任務分發者系統120啟動,監聽任務提交者系統110的提交任務和任務執行者系統130中的任務執行者的註冊;
[0027]步驟2,任務執行者系統130啟動,自動向任務分發者系統120註冊,告知自己能做的哪些任務和自己的編號;
[0028]步驟3,任務提交者系統110向任務分發者系統120提交任務;
[0029]步驟4,任務分發者系統120收到後,通知任務執行者系統130中的已註冊的能做該任務的任務執行者來取走任務;
[0030]步驟5,其中一個任務執行者取走任務,執行,並告知任務分發者系統120完成或異常。
[0031]以上五個步驟每個步驟都採用的Gearman傳輸協議,請求和響應被封裝成二進位數據包,該二進位數據包包含一個文件頭以及數據內容。文件頭格式如下:文件頭為12個Byte,分別有4byte的Magic Code、4byte的消息類型和4byte的數據大小信息組成。優選地,該二進位數據包也可以僅包含數據內容。
[0032]例如:MagicCode 分別為,〃\0REQ〃 或 〃\0RES〃,〃\0REQ〃 代表請求,〃\0RES〃 代表響應。
[0033]優選地,本系統將三個子系統,即任務提交者系統110、任務分發者系統120,以及任務執行者系統130完全解耦。從而方便系統的擴展與升級,避免單點故障,提高工作效率。
[0034]該自定義協議優選設置為,通信內容以命令+數據的方式在各子系統間傳送。例如,在任務執行者系統130啟動時,會向任務分發者系統120註冊,使用SET_CLIENT_ID命令,並加上自己的ID號發送給任務分發者端。此處的向任務分發者系統120註冊的含義為,將任務執行者系統130中的各任務執行者能夠處理的任務以及各任務執行者的編號告知任務分發者。
[0035]任務提交者系統110具有用戶界面接口,例如以web方式呈現的交互式頁面。用戶或管理員可以通過任務提交者系統110發起添加新任務,任務提交者系統110會將任務數據存入資料庫113。當需要提取任務數據時,任務提交者系統110會從資料庫113取出任務數據,並按時將任務數據提交至任務分發者系統120。
[0036]優選地,在任務即將執行之前,任務提交者系統110提前一定時間地將任務數據加載到內存,以實現準時投遞。例如,若某任務需要在10:00執行,則任務提交者系統110在9:50將需要執行的任務數據從硬碟加載至內存,並將該任務數據加入延時隊列,在10:00時,任務數據會從延遲隊列被提取至任務提交者系統110,從而能夠在10:00準時地向任務分發者系統120提交任務數據。延時隊列是一種具有定時器和觸發器的隊列,從而能夠按時傳送數據。
[0037]作為具有用戶界面接口的任務提交者系統110,在需要的情況下,能夠顯示從任務分發者系統120返回的包含表示任務執行成功與否的信息。例如,當任務分發者系統120接收到從任務執行者系統130傳來的任務失敗的信息時,任務分發者系統120會向任務提交者系統110發送顯示任務失敗的提示信息以及報警命令。此時,任務提交者系統110將會通過用戶界面接口,將任務失敗的提示信息顯示出來。又例如,在進行任務分發者系統120的關閉操作時,任務提交者系統110接收從任務分發者系統返回的執行結果,並將該執行結果通過用戶界面接口顯示出來。
[0038]任務分發者系統120接收從任務提交者系統110提交的任務數據,並將任務數據分發至任務執行者系統130。在任務分發者系統120中的任務分發者都具有任務調度的功能。當任務執行者系統130啟動後會向任務分發者系統120註冊自己的信息,比如任務執行者的唯一標示,最大負載,輸入輸出參數等。任務分發者在接受到任務提交者提交上來的任務後,會根據任務的唯一標示找到可以接受該任務的任務執行者。
[0039]根據本發明的分布式定時任務調度系統100優選各具有至少兩個任務提交者和任務分發者,這樣可以防止單點故障。例如由某個機器宕機而引起系統服務中斷就屬於單點故障。如圖1所示,任務提交者系統Iio至少包括第一任務提交者111和第二任務提交者112。任務分發者系統120至少包括第一任務分發者121和第二任務分發者122。
[0040]當有某任務需要提交時,在正常的工作狀態下,該任務可以由任務提交者系統110中的任意一個任務提交者(例如任務提交者111)隨機地向任務分發者系統120中的任意一個任務分發者(例如任務分發者121)提交;若有任務提交者(例如任務提交者111)宕機,則該任務會由任務提交者112隨機地向任務分發者系統120中的任意一個任務分發者(例如任務分發者121)提交;若有任務分發者(例如任務分發者121)宕機,則任務提交者系統110將該任務向任務分發者系統120中的任務分發者122提交。另外,任務提交者系統110中的任務提交者以及任務分發者系統120中的任務分發者的個數可以大於兩個,但考慮到成本及效果的平衡,2個任務提交者及任務分發者是最合適的。
[0041]當任務執行者發生單點故障時,例如任務執行者系統130的某臺機器宕機時,任務分發者系統120會檢測到該宕機的機器的心跳停止,因此不會把任務發送給該機器的任務執行者來執行任務。
[0042]任務執行者系統130處理從任務分發者系統120接收到的任務數據。在任務執行者系統中可以至少包含一個任務執行者,圖1中僅示意性地示出了第一任務執行者131、第二任務執行者132和第n任務執行者139。為了保證系統效率,相同任務的任務執行者可以有多個。如果提交的任務較多,則任務分發者系統120默認將任務平均隨機分配給任務執行者系統130中的多個任務執行者來執行。
[0043]在各子系統之間,使用自定義的序列化實現數據在傳輸上的編碼的與解碼。每個任務有自己所需的參數,這些參數在任務提交者端序列化為字節,發送到任務分發者端,再分發到任務執行者端,任務執行者解析,並使用。
[0044]下面舉2個自定義的序列化的例子,任務執行者系統130中的某個任務執行者若準備好執行任務時,則向任務分發者系統120發送一個協議包,表示隨時可以接受任務,該協議包如下:
[0045]Magic: REQ
[0046]Type: CAN—DO
[0047]任務執行者系統130中的某個任務執行者若不能接受新任務時,則向任務分發者系統120發送一個協議包,該協議包如下:
[0048]Magic: REQ
[0049]Type: CANT—DO[0050]圖2示意性地示出了本發明的分布式定時任務調度系統的方法流程圖。如圖2所示,首先,任務分發者系統120啟動,接收來自任務執行者系統130的註冊,從而任務分發者系統120得到任務執行者系統130中每個任務執行者能夠處理的任務以及其編號(205)。若接收到任務提交者系統110提交的任務(210),任務分發者系統120將會根據任務的類型找到能夠處理該任務的相應的任務執行者(215)。然後將該任務分發給任務執行者系統110中能夠處理該任務的任務執行者(220)。在接收到任務之後,被分配任務的任務執行者處理該任務(225)。
[0051]優選地,在步驟225之後存在以下步驟,任務執行者將包含表示執行成功與否的結果返回給任務分發者(226),任務分發者判斷該執行是否成功(227),若成功則將包含表示執行成功與否的結果經由任務分發者系統120及任務提交者系統110返回至資料庫
(228),若不成功則通知任務發布者進行消息報警,並通知任務提交者系統重新提交任務
(229)。
[0052]優選地,當需要關閉任務分發者系統時(例如任務分發者重啟或升級時),通過使用自定義命令實現任務分發者系統關機前的剩餘任務處理,從而防止現有任務的丟失。
[0053]圖3示意性地示出了本發明的分布式定時任務調度系統的關閉伺服器的方法流程圖。如圖3所不:
[0054]當需要關閉任務分發者系統120時,通過任務提交者系統110向任務分發者系統120發送KILL_SERVER命令,該命令為使任務分發者系統120關機的命令(305),收到命令的任務分發者系統120首先停止接受新任務(310),並向任務執行者系統130發送現有任務的集群命令。集群命令的目的是通知任務執行者系統130收集現有任務並將其反饋給任務分發者系統120,當任務分發者系統120再次開機時就可以重新分發本次集群收集到的現有任務,從而避免因任務分發者系統120關機導致現有任務的丟失。現有任務是指任務分發者系統120正在向任務執行者系統130分發的任務,以及任務執行者系統130正在處理的任務(315)。收到命令的任務執行者系統130將現有任務轉入集群(320),並將集群返回任務分發者系統120(325),然後任務分發者系統120關機(330)。
[0055]當需要關閉任務分發者系統120時,例如,可以由管理員通過任務提交者系統110向任務分發者系統120發送KILL_SERVER命令。但是不限於,例如也可以通過在向任務提交者系統110設置定時指令來向任務分發者系統120發送KILL_SERVER命令。
[0056]優選地,在步驟255之後存在將關閉任務分發者系統的執行結果,例如是否成功關閉,發送至任務提交者。
[0057]利用本發明的分布式定時任務調度系統具有管理簡單、操作方便等特點,能夠解決程序數目較多,且管理混亂等問題。
[0058]結合這裡披露的本發明的說明和實踐,本發明的其他實施例對於本領域技術人員都是易於想到和理解的。說明和實施例僅被認為是示例性的,本發明的真正範圍和主旨均由權利要求所限定。
【權利要求】
1.一種分布式定時任務調度方法,其特徵在於,包括如下步驟: a)任務分發者系統啟動,監聽任務提交者系統的提交任務和任務執行者系統中的任務執行者的註冊; b)所述任務執行者系統啟動,自動向所述任務分發者系統註冊; c)所述任務提交者系統向所述任務分發者系統提交任務; d)所述任務分發者系統收到任務後,通知所述任務執行者系統中的已註冊的與所述任務對應的任務執行者來取走所述任務; e)所述與所述任務對應的任務執行者取走所述任務並執行所述任務。
2.根據權利要求1所述的方法,其特徵在於,還包括關閉所述任務分發者系統的步驟如下: h)所述任務提交者系統向任務分發者系統發送表示關閉任務分發者系統的命令; i)所述任務分發者系統停止接受任務; j)所述任務分發者系統向所述任務執行者系統發送任務集群命令; k)所述任務執行者系統將現有任務轉入集群; I)所述任務執行者系統將包括現有任務的集群返回所述任務分發者; m)所述任務分發者系統關機。
3.根據權利要求1所述的方法,其特徵在於,在步驟b中,所述任務提交者系統向所述任務分發者系統註冊的信息包括:每個所述任務執行者的功能信息、唯一標示、最大負載、及輸入輸出參數。
4.根據權利要求1所述的方法,其特徵在於,在步驟c中,所述任務提交者系統定時提交任務。
5.根據權利要求1所述的方法,其特徵在於,在步驟e之後,向所述任務分發者系統返回包括表示任務執行成功或任務異常的信息。
6.根據權利要求1和2所述的方法,其特徵在於,從步驟a至步驟m都採用Gearman傳輸協議,請求和響應被封裝成二進位數據包,所述二進位數據包包含一個文件頭以及數據內容。
7.根據權利要求6所述的方法,其特徵在於,所述二進位數據包僅包含數據內容。
8.根據權利要求6所述的方法,其特徵在於,所述文件頭的格式如下:所述文件頭為12個Byte,由4byte的Magic Code、4byte的消息類型和4byte的數據大小信息組成。
9.根據權利要求1所述的方法,其特徵在於,所述任務提交者系統包括2個任務提交者,所述任務分發者系統包括2個任務分發者。
10.根據權利要求1所述的方法,其特徵在於,所述任務提交者系統具有用戶界面接□。
【文檔編號】G06F9/46GK103577256SQ201310593626
【公開日】2014年2月12日 申請日期:2013年11月21日 優先權日:2013年11月21日
【發明者】廖祿平, 朱廷發, 蔡敏, 何正軍 申請人:五八同城信息技術有限公司