第三代分布式任務(wù)調(diào)度框架:PowerJob
Te_Fuir
發(fā)布于 云南 2024-07-24 · 3.7w瀏覽 1贊

為什么選擇PowerJob作為你的任務(wù)調(diào)度神器?

想象一下,市面上有很多任務(wù)調(diào)度的“老司機(jī)”,比如Quartz、elastic-job和xxl-job,它們各有各的本事,但也有一些讓人頭疼的小毛病。咱們來聊聊這些“前輩”的不足,再看看為什么PowerJob成了新寵。

Quartz: 這是最早的一批任務(wù)調(diào)度員,技術(shù)扎實但有點“古董味”。它沒有漂亮的Web界面,操作起來得靠寫代碼,不夠直觀。而且,它只能一個人干活,沒法利用整個團(tuán)隊的力量(單機(jī)執(zhí)行)。

xxl-job: 算是第二代中的佼佼者,改進(jìn)了不少,但還是有局限。比如,它只和MySQL玩得來,換個數(shù)據(jù)庫朋友就得改代碼。而且,它雖然能分布式干活,但方式比較固定,復(fù)雜的任務(wù)處理起來有點吃力。最頭疼的是,它不支持任務(wù)之間的“接力賽”(工作流),有時候業(yè)務(wù)需要任務(wù)一個接一個完成,它就有點力不從心了。

這時候,PowerJob閃亮登場!

PowerJob: 這就是咱們說的第三代任務(wù)調(diào)度高手,它不僅能調(diào)度任務(wù),還能分布式計算,甚至能幫你規(guī)劃任務(wù)之間的“劇本”(工作流)。來看看它的超能力:

操作簡便:有Web界面,點幾下鼠標(biāo)就能管理任務(wù),還能看到任務(wù)跑得咋樣,日志一目了然。

定時靈活:想啥時候跑就啥時候跑,支持多種定時方式,比如定時間隔、固定時間等。

執(zhí)行模式多樣:單機(jī)、廣播、Map、MapReduce,總有一款適合你。特別是Map/MapReduce,讓你的代碼輕松享受集群的力量。

工作流強(qiáng)大:任務(wù)之間可以手拉手,一個接一個地完成,還能傳遞數(shù)據(jù),特別適合復(fù)雜的業(yè)務(wù)場景。

執(zhí)行器廣泛:不管你是Spring Bean、Java類、Shell腳本還是Python腳本,都能輕松接入。

運維輕松:日志實時顯示,出問題快速定位,開發(fā)效率嗖嗖提升。

依賴少而精:支持多種主流數(shù)據(jù)庫,讓你的選擇更多樣。

高可用&高性能:調(diào)度服務(wù)器設(shè)計巧妙,不用數(shù)據(jù)庫鎖也能高效工作,還支持水平擴(kuò)展,性能杠杠的。

故障恢復(fù)強(qiáng):任務(wù)失敗了?不怕,根據(jù)設(shè)置自動重試,直到成功為止。

同類產(chǎn)品對比

相較于傳統(tǒng)的定時任務(wù)框架,PowerJob顯著擴(kuò)展了定時任務(wù)類型的支持范圍,提供了更為靈活和多樣化的調(diào)度選項,以滿足不同業(yè)務(wù)場景的需求。具體而言:

API觸發(fā):PowerJob支持通過客戶端提供的API接口直接觸發(fā)任務(wù),這種非主動調(diào)度的方式特別適用于那些需要與業(yè)務(wù)服務(wù)緊密集成或僅需單次調(diào)度的場景,為開發(fā)者提供了更高的靈活性和控制力。

CRON表達(dá)式:作為定時任務(wù)調(diào)度的經(jīng)典方式,PowerJob同樣支持CRON表達(dá)式,使得用戶能夠輕松設(shè)置復(fù)雜的定時規(guī)則,如每天凌晨執(zhí)行、每周特定時間運行等,這一特性在多數(shù)定時任務(wù)框架中都是標(biāo)配。

固定頻率執(zhí)行:除了傳統(tǒng)的CRON調(diào)度外,PowerJob還引入了固定頻率執(zhí)行模式,允許用戶指定任務(wù)每隔多少毫秒執(zhí)行一次,這種方式對于需要周期性執(zhí)行但時間間隔較為固定的任務(wù)尤為適用。

固定延遲執(zhí)行:為滿足特定場景下的需求,PowerJob還提供了固定延遲執(zhí)行選項,即任務(wù)在指定時間后延遲多少毫秒執(zhí)行一次。這種調(diào)度方式在處理延遲任務(wù)或避免任務(wù)同時啟動導(dǎo)致的資源競爭時非常有用。

工作流集成:PowerJob的一大亮點是其強(qiáng)大的工作流支持功能。當(dāng)任務(wù)被配置為工作流的一部分時,它可以根據(jù)工作流的執(zhí)行邏輯被動態(tài)調(diào)度。服務(wù)端不會主動觸發(fā)這些任務(wù),而是等待工作流引擎在達(dá)到特定節(jié)點時自動執(zhí)行,這種方式極大地提高了任務(wù)調(diào)度的靈活性和自動化程度。

快速開始

PowerJob框架由兩大核心組件構(gòu)成:調(diào)度服務(wù)器(powerjob-server)和執(zhí)行器(powerjob-worker)。這兩部分緊密協(xié)作,共同實現(xiàn)了高效、靈活的任務(wù)調(diào)度與分布式計算能力。

調(diào)度服務(wù)器(powerjob-server):

作為PowerJob框架的中樞,調(diào)度服務(wù)器主要負(fù)責(zé)提供Web服務(wù)接口,通過這些接口,用戶可以方便地進(jìn)行任務(wù)的增、刪、改、查操作,以及監(jiān)控任務(wù)運行狀態(tài)和查看運行日志。同時,調(diào)度服務(wù)器還承擔(dān)著任務(wù)調(diào)度的核心職責(zé),它根據(jù)用戶設(shè)定的定時策略(如CRON表達(dá)式、固定頻率、固定延遲等)或工作流配置,智能地安排任務(wù)的執(zhí)行時機(jī),確保任務(wù)能夠按照預(yù)期的時間表或業(yè)務(wù)邏輯順利運行。

執(zhí)行器(powerjob-worker):

執(zhí)行器是PowerJob框架中負(fù)責(zé)執(zhí)行任務(wù)代碼的關(guān)鍵組件。它部署在集群的多個節(jié)點上,能夠接收來自調(diào)度服務(wù)器的任務(wù)執(zhí)行指令,并調(diào)用用戶編寫的任務(wù)代碼進(jìn)行實際的處理工作。執(zhí)行器不僅支持傳統(tǒng)的單機(jī)執(zhí)行模式,還具備強(qiáng)大的分布式計算能力,能夠利用Map/MapReduce等模式,將復(fù)雜的任務(wù)拆解成多個子任務(wù),在集群的不同節(jié)點上并行執(zhí)行,從而顯著提高任務(wù)處理的效率和吞吐量。此外,執(zhí)行器還負(fù)責(zé)記錄任務(wù)執(zhí)行過程中的日志信息,并實時反饋給調(diào)度服務(wù)器,以便用戶進(jìn)行監(jiān)控和調(diào)試。

初始化項目

git clone https://github.com/KFCFans/PowerJob.git

在IDE中打開后,我們powerjob-server就是我們要的服務(wù)端源碼,可以直接編譯,而powerjob-worker-samples就是springboot下的使用示例。

在運行編譯服務(wù)端之前,我們需要先創(chuàng)建數(shù)據(jù)庫,在指定的數(shù)據(jù)庫下創(chuàng)建即可

CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4

然后將powerjob-server/powerjob-server-starter下的application-daily.properties配置文件中的數(shù)據(jù)庫配置改成你服務(wù)器的,其中daily,pre,product 表示日常、預(yù)生產(chǎn)、生產(chǎn)環(huán)境下的配置,與我們常見的dev, test, prod類似,可以根據(jù)需要進(jìn)行調(diào)整

運行啟動類PowerJobServerApplication一下試試,啟動成功后,訪問http://localhost:7700,出現(xiàn)登陸頁則說明運行成功

先注冊一個執(zhí)行器,注意這里的應(yīng)用名稱不能順便取,下文在客戶端的配置的app-name要與該名稱保持一致

然后用該執(zhí)行器名和密碼登錄

定時任務(wù)創(chuàng)建

1、創(chuàng)建一個springboot項目,用于定時任務(wù)客戶端,引入客戶端依賴,如果是spring或其他java項目引入,可參考官網(wǎng)文檔:https://www.yuque.com/powerjob/guidence/ygonln

 

2、修改配置文件

3、啟動類上添加注解@EnableScheduling

4、通過申明BasicProcessor接口,實現(xiàn)process方法來書寫一個簡單的定時任務(wù)示例類,注意要聲明為bean

5、啟動客戶端項目,運行成功后,可以在服務(wù)端首頁看到機(jī)器實例

6、服務(wù)端任務(wù)管理點擊新建任務(wù)

其中處理器配置是通過書寫處理器的全類路徑名來聲明的,比如我這里是com.example.powerjobdemo.job.SimpleJobServer

7、創(chuàng)建成功后,可以在列表看到新建的任務(wù)

8、打開客戶端控制臺,也能看到輸出的參數(shù)和執(zhí)行打印,說明任務(wù)執(zhí)行成功也可以在運行記錄中看到執(zhí)行日志

至此,我們已經(jīng)完成了對PowerJob的最基礎(chǔ)使用介紹。

Te_Fuir
獨自上岸 自我救贖
瀏覽 3.7w
1
相關(guān)推薦
最新評論
贊過的人 1
評論加載中...

暫無評論,快來評論吧!