引言
今天跟大家分享一個能夠在工業(yè)物聯網系統(tǒng)內實現接入設備的定時任務調度框架——PowerJob,此框架主要功能如下:
1. 使用簡單:提供前端Web界面,允許開發(fā)者可視化地完成調度任務的管理(增、刪、改、查)、任務運行狀態(tài)監(jiān)控和運行日志查看等功能。
2. 定時策略完善:支持 CRON 表達式、固定頻率、固定延遲和API四種定時調度策略。
3. 執(zhí)行模式豐富:支持單機、廣播、Map、MapReduce 四種執(zhí)行模式,其中 Map/MapReduce 處理器能使開發(fā)者寥寥數行代碼便獲得集群分布式計算的能力。
4. 工作流支持:支持在線配置任務依賴關系(DAG),以可視化的方式對任務進行編排,同時還支持上下游任務間的數據傳遞,以及多種節(jié)點類型(判斷節(jié)點 & 嵌套工作流節(jié)點)。
5. 執(zhí)行器支持廣泛:支持 Spring Bean、內置/外置 Java 類,另外可以通過引入官方提供的依賴包,一鍵集成 Shell、Python、HTTP、SQL 等處理器,應用范圍廣。
6. 運維便捷:支持在線日志功能,執(zhí)行器產生的日志可以在前端控制臺頁面實時顯示,降低 debug 成本,極大地提高開發(fā)效率。
7. 依賴精簡:最小僅依賴關系型數據庫(MySQL/PostgreSQL/Oracle/MS SQLServer...)。
8. 高可用 & 高性能:調度服務器經過精心設計,一改其他調度框架基于數據庫鎖的策略,實現了無鎖化調度。部署多個調度服務器可以同時實現高可用和性能的提升(支持無限的水平擴展)。
9. 故障轉移與恢復:任務執(zhí)行失敗后,可根據配置的重試策略完成重試,只要執(zhí)行器集群有足夠的計算節(jié)點,任務就能順利完成。
同類型產品對比
快速入門
1. 初始化項目
可通過git拉取官方demo工程進行學習,地址:git clone https://github.com/PowerJob/PowerJob.git。
2. 導入idea
3. 基礎架構
如上圖所示,拉取工程之后其中powerjob-server是調度服務器,提供任務調度以及web端管理頁面功能,powerjob-worker-samples,為官方已經編寫好的實例程序不做過多贅述,其中powerjob-work是我們需要編寫辨析任務邏輯的模塊。
4. 修改配置
在啟動powerjob-server是需要修改其中application.properties文件。
5. 調度器,執(zhí)行器,處理器
修改完配置文件后,便可以在powerjob-work模塊中編寫代碼,整個框架,主要是分為調度器(server),執(zhí)行器(work),處理器(processor),其中我們所需要執(zhí)行的任務邏輯代碼便是在執(zhí)行器work工程中,創(chuàng)建類并繼承BasicProcessor ,BroadcastProcessor ,MapReduceProcessor ,三種處理器各有不同特性,分別為:
(1)單機處理器:單機執(zhí)行的策略下,server 會在所有可用 worker 中選取健康度最佳的機器進行執(zhí)行。
(2)廣播處理器:廣播執(zhí)行的策略下,所有機器都會被調度執(zhí)行該任務。為了便于資源的準備和釋放,廣播處理器在`BasicProcessor` 的基礎上額外增加了 `preProcess` 和 `postProcess` 方法,分別在整個集群開始之前/結束之后選一臺機器執(zhí)行相關方法。
(3) 并行處理器:MapReduce 是最復雜也是最強大的一種執(zhí)行器,它允許開發(fā)者完成任務的拆分,將子任務派發(fā)到集群中其他Worker 執(zhí)行,是執(zhí)行大批量處理任務的不二之選。
本文為演示作用,采用單機處理器BasicProcessor
編寫完處理器邏輯代碼之后便可以,啟動work工程模塊,并且登錄web任務管理頁面創(chuàng)建任務,并選定處理器執(zhí)行任務。
6.web管理頁面
新建任務
可按照下圖配置任務信息
任務運行
前往任務實例頁面便可以查看任務詳細運行情況