任務調度平臺Cuckoo-Schedule
任務調度平臺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