第三代分布式任務(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,它們各有各的本事,但也有一些讓人頭疼的小毛病。咱們來(lái)聊聊這些“前輩”的不足,再看看為什么PowerJob成了新寵。

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

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

這時(shí)候,PowerJob閃亮登場(chǎng)!

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

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

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

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

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

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

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

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

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

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

同類產(chǎn)品對(duì)比

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

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

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

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

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

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

快速開始

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

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

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

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

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

初始化項(xiàng)目

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

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

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

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

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

運(yùn)行啟動(dòng)類PowerJobServerApplication一下試試,啟動(dòng)成功后,訪問(wèn)http://localhost:7700,出現(xiàn)登陸頁(yè)則說(shuō)明運(yùn)行成功

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

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

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

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

 

2、修改配置文件

3、啟動(dòng)類上添加注解@EnableScheduling

4、通過(guò)申明BasicProcessor接口,實(shí)現(xiàn)process方法來(lái)書寫一個(gè)簡(jiǎn)單的定時(shí)任務(wù)示例類,注意要聲明為bean

5、啟動(dòng)客戶端項(xiàng)目,運(yùn)行成功后,可以在服務(wù)端首頁(yè)看到機(jī)器實(shí)例

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

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

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

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

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

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

暫無(wú)評(píng)論,快來(lái)評(píng)論吧!