除了 xxl-job,有一款更棒的分佈式任務調度框架-
大家好,我是 Tom 哥。
PowerJob 是新一代分佈式任務調度與計算框架,支持 CRON、API、固定頻率、固定延遲等調度策略,提供工作流來編排任務解決依賴關係,能讓您輕鬆完成作業的調度與繁雜任務的分佈式計算。
爲什麼選擇 PowerJob?
當前市面上流行的作業調度框架有老牌的 Quartz、基於 Quartz 的 elastic-job 和原先基於 Quartz 後面移除依賴的 xxl-job,這裏分別談一些這些框架現存的缺點。
Quartz 可以視爲第一代任務調度框架,基本上是現有所有分佈式調度框架的 “祖宗”。由於歷史原因,它不提供 Web 界面,只能通過 API 完成任務的配置,使用起來不夠方便和靈活,同時它僅支持單機執行,無法有效利用整個集羣的計算能力。
xxl-job 可以視爲第二代任務調度框架,在一定程度上解決了 Quartz 的不足,在過去幾年中是個非常優秀的調度框架,不過放到今天來看,還是存在着一些不足的,具體如下:
-
數據庫支持單一:僅支持 MySQL,使用其他 DB 需要自己魔改代碼
-
有限的分佈式計算能力:僅支持靜態分片,無法很好的完成複雜任務的計算
-
不支持工作流:無法配置各個任務之間的依賴關係,不適用於有 DAG 需求的場景
原文:
blog.csdn.net/LY_624/article/details/106987036
正所謂長江後浪推前浪,在如今這個數據量日益增長、業務越來越複雜的年代,急需一款更爲強大的任務調度框架來解決上訴問題,而 PowerJob 因此應運而生。
PowerJob 可以被認爲是第三代任務調度框架,在任務調度的基礎上,還額外提供了分佈式計算和工作流功能,其主要特性如下:
-
使用簡單:提供前端 Web 界面,允許開發者可視化地完成調度任務的管理(增、刪、改、查)、任務運行狀態監控和運行日誌查看等功能。
-
定時策略完善:支持 CRON 表達式、固定頻率、固定延遲和 API 四種定時調度策略。
-
執行模式豐富:支持單機、廣播、Map、MapReduce 四種執行模式,其中 Map/MapReduce 處理器能使開發者寥寥數行代碼便獲得集羣分佈式計算的能力。
-
DAG 工作流支持:支持在線配置任務依賴關係,可視化得對任務進行編排,同時還支持上下游任務間的數據傳遞
-
執行器支持廣泛:支持 Spring Bean、內置 / 外置 Java 類、Shell、Python 等處理器,應用範圍廣。
-
運維便捷:支持在線日誌功能,執行器產生的日誌可以在前端控制檯頁面實時顯示,降低 debug 成本,極大地提高開發效率。
-
依賴精簡:最小僅依賴關係型數據庫(MySQL/PostgreSQL/Oracle/MS SQLServer…),同時支持所有 Spring Data JPA 所支持的關係型數據庫。
-
高可用 & 高性能:調度服務器經過精心設計,一改其他調度框架基於數據庫鎖的策略,實現了無鎖化調度。部署多個調度服務器可以同時實現高可用和性能的提升(支持無限的水平擴展)。
-
故障轉移與恢復:任務執行失敗後,可根據配置的重試策略完成重試,只要執行器集羣有足夠的計算節點,任務就能順利完成。
同類產品對比
適用場景
-
有定時執行需求的業務場景:如每天凌晨全量同步數據、生成業務報表等。
-
有需要全部機器一同執行的業務場景:如使用廣播執行模式清理集羣日誌。
-
有需要分佈式處理的業務場景:比如需要更新一大批數據,單機執行耗時非常長,可以使用 Map/MapReduce 處理器完成任務的分發,調動整個集羣加速計算。
整體架構
相關鏈接
-
項目地址:https://github.com/KFCFans/PowerJob
-
官方文檔:https://www.yuque.com/powerjob/guidence/intro
-
在線試用:https://www.yuque.com/powerjob/guidence/trial
快速開始
PowerJob 由調度服務器(powerjob-server)和執行器 (powerjob-worker) 兩部分組成,powerjob-server 負責提供 Web 服務和完成任務的調度,powerjob-worker 則負責執行用戶所編寫的任務代碼,同時提供分佈式計算能力。
初始化項目
1、克隆項目到本地
git clone https://github.com/KFCFans/PowerJob.git
2、導入 IDE,源碼結構如下,我們需要啓動調度服務器(powerjob-server),同時在 samples 工程中編寫自己的處理器代碼
啓動調度服務器
1、創建數據庫 powerjob-daily
2、修改配置文件,配置文件的說明官方文檔寫的非常詳細,此處不再贅述。需要修改的地方爲數據庫配置spring.datasource.core.jdbc-url
、spring.datasource.core.username
和spring.datasource.core.password
,當然,有 mongoDB 的同學也可以修改spring.data.mongodb.uri
以獲取完全版體驗。
3、完成配置文件的修改後,可以直接通過啓動類com.github.kfcfans.powerjob.server.OhMyApplication
啓動調度服務器,觀察啓動日誌,查看是否啓動成功~啓動成功後,訪問 http://127.0.0.1:7700/ ,如果能順利出現 Web 界面,則說明調度服務器啓動成功!
4、註冊應用:點擊主頁應用註冊按鈕,填入 oms-test
和控制檯密碼(用於進入控制檯),註冊示例應用(當然你也可以註冊其他的 appName,只是別忘記在示例程序中同步修改~)
編寫示例代碼
進入示例工程(powerjob-worker-samples),修改配置文件連接 powerjob-server 並編寫自己的處理器代碼。
1、修改 powerjob-worker-samples 的啓動配置類com.github.kfcfans.powerjob.samples.OhMySchedulerConfig
,將AppName
修改爲剛剛在控制檯註冊的名稱。
2、編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細),這裏爲了簡單演示,選擇使用單機處理器BasicProcessor
,以下是代碼示例。
3、啓動示例程序,即直接運行主類com.github.kfcfans.powerjob.samples.SampleApplication
,觀察控制檯輸出信息,判斷是否啓動成功。
任務的配置與運行
調度服務器與示例工程都啓動完畢後,再次前往 Web 頁面( http://127.0.0.1:7700/ ),進行任務的配置與運行。
1、在首頁輸入框輸入配置的應用名稱,成功操作後會正式進入前端管理界面。
2、點擊任務管理 -> 新建任務(右上角),開始創建任務。
3、完成任務創建後,即可在控制檯看到剛纔創建的任務,如果覺得等待調度太過於漫長,可以直接點擊運行按鈕,立即運行本任務。
4、前往任務示例邊欄,查看任務的運行狀態和在線日誌
基礎的教程到這裏也就結束了~更多功能示例可見官方文檔,工作流、MapReduce、容器等高級特性等你來探索!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/1sNBX0W-5Z7PJWaKUWwHJw