不只有 xxl-job,這款分布式任務(wù)調(diào)度框架更強(qiáng)大更好用!
點(diǎn)擊關(guān)注公眾號,Java干貨及時送達(dá)
Java面試指南網(wǎng)站:javaguide.cn
來源:https://blog.csdn.net/LY_624/article/details/106987036
概述

PowerJob 是新一代分布式任務(wù)調(diào)度與計算框架,支持 CRON、API、固定頻率、固定延遲等調(diào)度策略,提供工作流來編排任務(wù)解決依賴關(guān)系,能讓您輕松完成作業(yè)的調(diào)度與繁雜任務(wù)的分布式計算。
早前我發(fā)了一篇文章總結(jié)定時任務(wù)解決方案,其中就有提到今天要介紹的 PowerJob ,文章傳送門:再見 Spring Task,這個定時任務(wù)框架真香!。
為什么選擇 PowerJob?
當(dāng)前市面上流行的作業(yè)調(diào)度框架有老牌的 Quartz、基于 Quartz 的 elastic-job 和原先基于 Quartz 后面移除依賴的 xxl-job,這里分別談一些這些框架現(xiàn)存的缺點(diǎn)。
Quartz 可以視為第一代任務(wù)調(diào)度框架,基本上是現(xiàn)有所有分布式調(diào)度框架的“祖宗”。由于歷史原因,它不提供 Web 界面,只能通過 API 完成任務(wù)的配置,使用起來不夠方便和靈活,同時它僅支持單機(jī)執(zhí)行,無法有效利用整個集群的計算能力。
xxl-job 可以視為第二代任務(wù)調(diào)度框架,在一定程度上解決了 Quartz 的不足,在過去幾年中是個非常優(yōu)秀的調(diào)度框架,不過放到今天來看,還是存在著一些不足的,具體如下:
數(shù)據(jù)庫支持單一:僅支持 MySQL,使用其他 DB 需要自己魔改代碼 有限的分布式計算能力:僅支持靜態(tài)分片,無法很好的完成復(fù)雜任務(wù)的計算 不支持工作流:無法配置各個任務(wù)之間的依賴關(guān)系,不適用于有 DAG 需求的場景
正所謂長江后浪推前浪,在如今這個數(shù)據(jù)量日益增長、業(yè)務(wù)越來越復(fù)雜的年代,急需一款更為強(qiáng)大的任務(wù)調(diào)度框架來解決上訴問題,而 PowerJob 因此應(yīng)運(yùn)而生。

PowerJob 可以被認(rèn)為是第三代任務(wù)調(diào)度框架,在任務(wù)調(diào)度的基礎(chǔ)上,還額外提供了分布式計算和工作流功能,其主要特性如下:
使用簡單:提供前端 Web 界面,允許開發(fā)者可視化地完成調(diào)度任務(wù)的管理(增、刪、改、查)、任務(wù)運(yùn)行狀態(tài)監(jiān)控和運(yùn)行日志查看等功能。 定時策略完善:支持 CRON 表達(dá)式、固定頻率、固定延遲和 API 四種定時調(diào)度策略。 執(zhí)行模式豐富:支持單機(jī)、廣播、Map、MapReduce 四種執(zhí)行模式,其中 Map/MapReduce 處理器能使開發(fā)者寥寥數(shù)行代碼便獲得集群分布式計算的能力。 DAG 工作流支持:支持在線配置任務(wù)依賴關(guān)系,可視化得對任務(wù)進(jìn)行編排,同時還支持上下游任務(wù)間的數(shù)據(jù)傳遞 執(zhí)行器支持廣泛:支持 Spring Bean、內(nèi)置/外置 Java 類、Shell、Python 等處理器,應(yīng)用范圍廣。 運(yùn)維便捷:支持在線日志功能,執(zhí)行器產(chǎn)生的日志可以在前端控制臺頁面實(shí)時顯示,降低 debug 成本,極大地提高開發(fā)效率。 依賴精簡:最小僅依賴關(guān)系型數(shù)據(jù)庫(MySQL/PostgreSQL/Oracle/MS SQLServer…),同時支持所有 Spring Data JPA 所支持的關(guān)系型數(shù)據(jù)庫。 高可用&高性能:調(diào)度服務(wù)器經(jīng)過精心設(shè)計,一改其他調(diào)度框架基于數(shù)據(jù)庫鎖的策略,實(shí)現(xiàn)了無鎖化調(diào)度。部署多個調(diào)度服務(wù)器可以同時實(shí)現(xiàn)高可用和性能的提升(支持無限的水平擴(kuò)展)。 故障轉(zhuǎn)移與恢復(fù):任務(wù)執(zhí)行失敗后,可根據(jù)配置的重試策略完成重試,只要執(zhí)行器集群有足夠的計算節(jié)點(diǎn),任務(wù)就能順利完成。
同類產(chǎn)品對比

適用場景
有定時執(zhí)行需求的業(yè)務(wù)場景:如每天凌晨全量同步數(shù)據(jù)、生成業(yè)務(wù)報表等。 有需要全部機(jī)器一同執(zhí)行的業(yè)務(wù)場景:如使用廣播執(zhí)行模式清理集群日志。 有需要分布式處理的業(yè)務(wù)場景:比如需要更新一大批數(shù)據(jù),單機(jī)執(zhí)行耗時非常長,可以使用 Map/MapReduce 處理器完成任務(wù)的分發(fā),調(diào)動整個集群加速計算。
整體架構(gòu)

相關(guān)鏈接
項目地址:https://github.com/KFCFans/PowerJob 官方文檔:https://www.yuque.com/powerjob/guidence/intro 在線試用:https://www.yuque.com/powerjob/guidence/trial
快速開始
PowerJob 由調(diào)度服務(wù)器(powerjob-server)和執(zhí)行器(powerjob-worker)兩部分組成,powerjob-server 負(fù)責(zé)提供 Web 服務(wù)和完成任務(wù)的調(diào)度,powerjob-worker 則負(fù)責(zé)執(zhí)行用戶所編寫的任務(wù)代碼,同時提供分布式計算能力。
初始化項目
1、克隆項目到本地
git clone https://github.com/KFCFans/PowerJob.git
2、導(dǎo)入 IDE,源碼結(jié)構(gòu)如下,我們需要啟動調(diào)度服務(wù)器(powerjob-server),同時在 samples 工程中編寫自己的處理器代碼

啟動調(diào)度服務(wù)器
1、創(chuàng)建數(shù)據(jù)庫 powerjob-daily
2、修改配置文件,配置文件的說明官方文檔寫的非常詳細(xì),此處不再贅述。需要修改的地方為數(shù)據(jù)庫配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,當(dāng)然,有 mongoDB 的同學(xué)也可以修改spring.data.mongodb.uri以獲取完全版體驗(yàn)。

3、完成配置文件的修改后,可以直接通過啟動類com.github.kfcfans.powerjob.server.OhMyApplication啟動調(diào)度服務(wù)器,觀察啟動日志,查看是否啟動成功~啟動成功后,訪問http://127.0.0.1:7700/,如果能順利出現(xiàn) Web 界面,則說明調(diào)度服務(wù)器啟動成功!
4、注冊應(yīng)用:點(diǎn)擊主頁應(yīng)用注冊按鈕,填入oms-test和控制臺密碼(用于進(jìn)入控制臺),注冊示例應(yīng)用(當(dāng)然你也可以注冊其他的 appName,只是別忘記在示例程序中同步修改~)

編寫示例代碼
進(jìn)入示例工程(powerjob-worker-samples),修改配置文件連接 powerjob-server 并編寫自己的處理器代碼。
1、修改 powerjob-worker-samples 的啟動配置類com.github.kfcfans.powerjob.samples.OhMySchedulerConfig,將AppName修改為剛剛在控制臺注冊的名稱。

2、編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細(xì)),這里為了簡單演示,選擇使用單機(jī)處理器BasicProcessor,以下是代碼示例。

3、啟動示例程序,即直接運(yùn)行主類com.github.kfcfans.powerjob.samples.SampleApplication,觀察控制臺輸出信息,判斷是否啟動成功。
任務(wù)的配置與運(yùn)行
調(diào)度服務(wù)器與示例工程都啟動完畢后,再次前往 Web 頁面(http://127.0.0.1:7700/),進(jìn)行任務(wù)的配置與運(yùn)行。
1、在首頁輸入框輸入配置的應(yīng)用名稱,成功操作后會正式進(jìn)入前端管理界面。

2、點(diǎn)擊任務(wù)管理 -> 新建任務(wù)(右上角),開始創(chuàng)建任務(wù)。

3、完成任務(wù)創(chuàng)建后,即可在控制臺看到剛才創(chuàng)建的任務(wù),如果覺得等待調(diào)度太過于漫長,可以直接點(diǎn)擊運(yùn)行按鈕,立即運(yùn)行本任務(wù)。

4、前往任務(wù)示例邊欄,查看任務(wù)的運(yùn)行狀態(tài)和在線日志

基礎(chǔ)的教程到這里也就結(jié)束了~更多功能示例可見官方文檔,工作流、MapReduce、容器等高級特性等你來探索!

往 期 推 薦
3、互聯(lián)網(wǎng)人為什么學(xué)不會擺爛
4、為什么國外JetBrains做 IDE 就可以養(yǎng)活自己,國內(nèi)不行?區(qū)別在哪?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看





