1. 程式人生 > >任務調度平臺Cuckoo-Schedule

任務調度平臺Cuckoo-Schedule

for 消息格式 prop 接收 hce test 動態擴容 針對 是否

任務調度平臺Cuckoo-Schedule

1 概述

1.1 平臺概述

  Cuckoo-Schedule是基於Quartz-Schedule的輕量級任務調度框架,具有易學習、易上手、開發高效穩定的特點。Demo地址:http://cuckoo.hellosr.com,測試用戶:guest,密碼:123456。

  Cuckoo-Schedule對調度模塊與執行模塊進行解耦,調度模塊支持集部署、任務分組、任務依賴、權限管理、郵件告警、調度日誌記錄等功能,並提供WEB頁面對任務進行管理,支持任務實時調度情況的查看、變更以及任務手動執行回溯、暫停等管理功能。執行模塊支持客戶端切面、腳本代碼,實現客戶端任務的零代碼侵入。

技術分享

1.2 功能介紹

l 調度集群

  Cuckoo-Schedule的分布式策略是以數據庫作為邊界資源的並發策略,每個集群節點遵守相同的調度規範,集群節點可動態擴容、刪除。

l 任務依賴

  Cuckoo-Schedule支持任務的依賴於觸發,從而使得任務執行有先後順序。任務可以定時觸發,也可以通過上級任務觸發。同時一個任務的執行可以依賴多個任務的完成狀態。

l 任務分類

  Cuckoo-Schedule既可以支持日切任務(每日執行任務),有可以支持數據流任務(按時間間隔執行),日切任務依賴組執行的日切業務時間在執行時保持一致,數據流任務依賴住執行的數據開始時間戳和結束時間戳保持一致。

例如:

  有任務A/B/C任務技術分享,如果依賴組是日切任務,那麽這三個任務有相同的業務執行日期。如果依賴組是數據流任務,那麽這三個任務有相同的開始時間戳和結束時間戳。

l 任務分片

  針對數據量超大的任務,需要制定分片策略,將任務拆解成多個小任務通過不同的客戶端執行,達到提供任務調度速率的目標。Cuckoo-Schedule可以針對任務層級設置任務執行參數,作為參數傳遞給客戶端並進行任務分片執行。

l 任務執行查看

  Cuckoo-Schedule支持任務執行日誌情況查看,也支持任務執行依賴關系執行情況查看,便於任務執行異常情況下排查問題原因。

l 任務重跑

  當任務執行失敗後,支持手工對任務進行重跑操作,重跑是可以選擇是否執行觸發任務。

l 任務暫停

  當客戶端某個系統需要上線或者重啟操作時,可以通過控制臺手工暫停客戶端任務的調度,避免由於服務重啟的情況下,造成任務失敗。

l 任務告警

  由於客戶端系統上線、服務宕機、網絡波動等問題會造成任務執行過程中的中斷、超時等情況,Cuckoo-Schedule可以設置告警郵件接收列表,以及任務層級設定告警超時提醒時間。

l 任務配置

  任務配置支持管理界面進行配置,也支持通過SQL的形式將任務導入。通過這兩種方式,可以做到,在開發環境通過頁面配置任務,在測試與線上環境是,通過將開發環境配置好的SQL導入到系統中。保證各個環境任務一直,避免人工操作造成的不一致情況發生。

l 客戶端分類

  客戶端通過appName區分不同的客戶端類型,不同的定時任務由不同類型的客戶端執行。有助於在微(多)服務架構中,各個服務執行自己的任務。

l 客戶端切面

  在支持Spring的客戶端服務中,可以通過引入Cuckoo-Client配置,通過註解的形式織入Cuckoo任務調度邏輯,開發簡單易上手。

l 客戶端腳本任務

  Cuckoo-Schedule支持執行各類腳本,例如:shell、python、node、perl、curl等

2 快速搭建

2.1 下載

  GitHub地址:https://github.com/suyin58/cuckoo-schedule

  QQ群討論組:639066328

2.2 工程搭建

2.2.1 數據庫配置

  工程下載完成後,依次執行工程目錄下的《00.quartz-core.sql》、《01.cuckoo-shcedule.sql》、《02.data-for-test.sql》

2.2.2 服務端搭建(web工程)

  修改resources下service.properties配置文件的數據庫連接配置、郵件發送配置,以及cuckoo.server.tcpPort(用於客戶端連接)

2.2.3 客戶端搭建(web工程)

  修改resources下spring-mvc-context.xml的配置,服務器集群註意server配置為服務器cuckoo.server.tcpPort的值,appName用於區分不同的應用,clientTag用於區分客戶端實例。

2.2.4 查看任務調度情況

  啟動服務端工程和客戶端工程,訪問服務端Web服務,查看啟動效果

3 模塊介紹

3.1 核心調度模塊

  技術分享

核心調度模塊基於Quartz-Schedule進行調度管理,任務的觸發有quartz進行觸發,任務執行完成後,如果存在下級任務,那麽會觸發下級任務的執行。

3.2 註冊模塊

  技術分享

3.3 通信模塊

  服務端和客戶端的通信采用mina框架構建TCP消息通信,通過自定義的消息格式對消息進行傳遞與處理。

3.4 權限管理

  權限管理分為三部分,

  權限角色:管理員(擁有查看執行權限,可以將任務分組權限再次分配給普通用戶)、普通用戶(僅擁有自己創建的任務分組權限,可以將自己創建的任務權限分配給其他用戶)、遊客(僅用於演示用:擁有所有分組的查看權限,沒有操作和再次分配權限)。

  任務分組:權限的控制維度到分組層級,一個任務分組可以包含多種任務。

  權限分類:分配權限 > 操作權限 > 只讀權限。每個用戶都任務分組都有不同的權限分類,只讀權限,只能查看任務分組、操作權限,可以查看任務分組,並且可以對分組下任務進行增刪改查以及重跑調度操作等權限、分配權限可以將任務分組的權限分配給其他用戶。

3.5 客戶端執行模塊

  技術分享

上圖為Cuckoo任務類型的Spring切面執行方式,僅通過註解的方式,將切面織入到應用層面上即可。如果是Script任務類型,那麽客戶端會調用Runtime.process的方式執行腳本命令。

  

4 高級功能

4.1 參數傳遞

  調度模塊調用客戶端執行模塊的時候,會傳遞如下參數:

Cuckoo任務

  需要註解支持,可以通過方法獲得對應的參數

    執行參數:JobInfoBean.getCuckooParallelJobArgs()

    日切任務參數:JobInfoBean.getTxDate()

    非日期任務參數:JobInfoBean.getFlowLastTime(); JobInfoBean.getFlowCurrTime();

客戶端腳本執行

  自動追加參數:script 執行參數 配置參數(日切:txDate【yyyyMMdd】 / 非日切:flowLastTime【時間戳Long】 flowCurTime【時間戳Long】)

    例如:日切任務--< sh /home/job/execdaily.sh 執行參數 20150101

      非日切任務-->< sh /home/job/execundaily.sh 執行參數 1490926800000 1490926800000

4.2 其他待補充

任務調度平臺Cuckoo-Schedule