(以下內(nèi)容轉(zhuǎn)載自猿大俠)
這幾天和朋友聊天時,聊到了他們公司在統(tǒng)一更換分布式調(diào)度服務(wù)的事情。之前使用的是基于 LTS 魔改的分布式調(diào)度系統(tǒng),但是因為這個開源項目太久沒有更新,且現(xiàn)在遇到了一些問題,因此公司在推動替換為 PowerJob。
這倒是勾起了我的好奇心,因為前段時間用?xxl-job 替換掉了同樣不太好用的 QuartZ,那時候還沒有調(diào)研 PowerJob。于是這次研究了一番,發(fā)現(xiàn) PowerJob 確實是個很棒的框架,在這里推薦給大家。
為什么選擇PowerJob?
PowerJob是新一代分布式任務(wù)調(diào)度與計算框架,支持CRON、API、固定頻率、固定延遲等調(diào)度策略,提供工作流來編排任務(wù)解決依賴關(guān)系,能讓您輕松完成作業(yè)的調(diào)度與繁雜任務(wù)的分布式計算。
當(dāng)前市面上流行的作業(yè)調(diào)度框架有老牌的Quartz、基于Quartz的elastic-job和原先基于Quartz后面移除依賴的xxl-job,這里分別談一些這些框架現(xià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ù)雜的年代,急需一款更為強大的任務(wù)調(diào)度框架來解決上訴問題,而PowerJob因此應(yīng)運而生。
PowerJob可以被認(rèn)為是第三代任務(wù)調(diào)度框架,在任務(wù)調(diào)度的基礎(chǔ)上,還額外提供了分布式計算和工作流功能,其主要特性如下:
-
使用簡單:?提供前端Web界面,允許開發(fā)者可視化地完成調(diào)度任務(wù)的管理(增、刪、改、查)、任務(wù)運行狀態(tài)監(jiā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)用范圍廣。
-
運維便捷:?支持在線日志功能,執(zhí)行器產(chǎn)生的日志可以在前端控制臺頁面實時顯示,降低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ù)庫鎖的策略,實現(xiàn)了無鎖化調(diào)度。部署多個調(diào)度服務(wù)器可以同時實現(xiàn)高可用和性能的提升(支持無限的水平擴(kuò)展)。
-
故障轉(zhuǎn)移與恢復(fù):?任務(wù)執(zhí)行失敗后,可根據(jù)配置的重試策略完成重試,只要執(zhí)行器集群有足夠的計算節(jié)點,任務(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)
快速開始
PowerJob由調(diào)度服務(wù)器(powerjob-server)和執(zhí)行器(powerjob-worker)兩部分組成,powerjob-server負(fù)責(zé)提供Web服務(wù)和完成任務(wù)的調(diào)度,powerjob-worker則負(fù)責(zé)執(zhí)行用戶所編寫的任務(wù)代碼,同時提供分布式計算能力。
初始化項目
git?clone?https://github.com/KFCFans/PowerJob.git
導(dǎo)入 IDE,源碼結(jié)構(gòu)如下,我們需要啟動調(diào)度服務(wù)器(powerjob-server),同時在samples工程中編寫自己的處理器代碼
啟動調(diào)度服務(wù)器
創(chuàng)建數(shù)據(jù)庫 powerjob-daily
修改配置文件,配置文件的說明官方文檔寫的非常詳細(xì),此處不再贅述。需要修改的地方為數(shù)據(jù)庫配置spring.datasource.core.jdbc-url
、spring.datasource.core.username
和spring.datasource.core.password
,當(dāng)然,有mongoDB的同學(xué)也可以修改spring.data.mongodb.uri
以獲取完全版體驗。
oms.env=DAILY
logging.config=classpath:logback-dev.xml
#######?數(shù)據(jù)庫配置?#######
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8
spring.datasource.core.username=root
spring.datasource.core.password=No1Bug2Please3!
spring.datasource.core.hikari.maximum-pool-size=20
spring.datasource.core.hikari.minimum-idle=5
#######?mongoDB配置,非核心依賴,可移除?#######
spring.data.mongodb.uri=mongodb://remotehost:27017/powerjob-daily
#######?郵件配置(啟用郵件報警則需要)?#######
spring.mail.host=smtp.163.com
spring.mail.username=zqq
spring.mail.password=qqz
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
#######?資源清理配置?#######
oms.log.retention.local=1
oms.log.retention.remote=1
oms.container.retention.local=1
oms.container.retention.remote=-1
oms.instanceinfo.retention=1
#######?緩存配置?#######
oms.instance.metadata.cache.size=1024
完成配置文件的修改后,可以直接通過啟動類com.github.kfcfans.powerjob.server.OhMyApplication
啟動調(diào)度服務(wù)器,觀察啟動日志,查看是否啟動成功~啟動成功后,訪問?http://127.0.0.1:7700/
?,如果能順利出現(xiàn)Web界面,則說明調(diào)度服務(wù)器啟動成功!
注冊應(yīng)用:點擊主頁應(yīng)用注冊按鈕,填入 oms-test和控制臺密碼(用于進(jìn)入控制臺),注冊示例應(yīng)用(當(dāng)然你也可以注冊其他的appName,只是別忘記在示例程序中同步修改~)
編寫示例代碼
進(jìn)入示例工程(powerjob-worker-samples),修改配置文件連接powerjob-server并編寫自己的處理器代碼。
修改powerjob-worker-samples的啟動配置類com.github.kfcfans.powerjob.samples.OhMySchedulerConfig
,將AppName修改為剛剛在控制臺注冊的名稱。
@Configuration
public?class?OhMySchedulerConfig?{
????@Bean
????public?OhMyWorker?initOMS()?throws?Exception?{
????????//?服務(wù)器HTTP地址(端口號為?server.port,而不是?ActorSystem?port)
????????List<String>?serverAddress?=?Lists.newArrayList("127.0.0.1:7700");
????????//?1.?創(chuàng)建配置文件
????????OhMyConfig?config?=?new?OhMyConfig();
????????config.setPort(27777);
????????config.setAppName("oms-test");
????????config.setServerAddress(serverAddress);
????????//?如果沒有大型?Map/MapReduce?的需求,建議使用內(nèi)存來加速計算
????????config.setStoreStrategy(StoreStrategy.MEMORY);
????????//?2.?創(chuàng)建?Worker?對象,設(shè)置配置文件
????????OhMyWorker?ohMyWorker?=?new?OhMyWorker();
????????ohMyWorker.setConfig(config);
????????return?ohMyWorker;
????}
}
編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細(xì)),這里為了簡單演示,選擇使用單機(jī)處理器BasicProcessor,以下是代碼示例。
@Slf4j
@Component
public?class?StandaloneProcessorDemo?implements?BasicProcessor?{
????@Override
????public?ProcessResult?process(TaskContext?context)?throws?Exception?{
????????OmsLogger?omsLogger?=?context.getOmsLogger();
????????omsLogger.info("StandaloneProcessorDemo?start?process,context?is?{}.",?context);
????????System.out.println("jobParams?is?"?+?context.getJobParams());
????????
????????return?new?ProcessResult(true,?"process?successfully~");
????}
}
啟動示例程序,即直接運行主類com.github.kfcfans.powerjob.samples.SampleApplication
,觀察控制臺輸出信息,判斷是否啟動成功。
任務(wù)的配置與運行
調(diào)度服務(wù)器與示例工程都啟動完畢后,再次前往Web頁面(?http://127.0.0.1:7700/
?),進(jìn)行任務(wù)的配置與運行。
在首頁輸入框輸入配置的應(yīng)用名稱,成功操作后會正式進(jìn)入前端管理界面。
點擊任務(wù)管理 -> 新建任務(wù)(右上角),開始創(chuàng)建任務(wù)。
完成任務(wù)創(chuàng)建后,即可在控制臺看到剛才創(chuàng)建的任務(wù),如果覺得等待調(diào)度太過于漫長,可以直接點擊運行按鈕,立即運行本任務(wù)。
前往任務(wù)示例邊欄,查看任務(wù)的運行狀態(tài)和在線日志
基礎(chǔ)的教程到這里也就結(jié)束了~更多功能示例可見官方文檔,工作流、MapReduce、容器等高級特性等你來探索!
相關(guān)鏈接
項目地址:https://github.com/KFCFans/PowerJob
官方文檔:https://www.yuque.com/powerjob/guidence/ztn4i5
在線試用:https://www.yuque.com/powerjob/guidence/hnbskn文章來源:http://www.zghlxwxcb.cn/news/detail-409612.html
原文鏈接:blog.csdn.net/LY_624/article/details/106987036,編輯:沉默王二文章來源地址http://www.zghlxwxcb.cn/news/detail-409612.html
到了這里,關(guān)于第三代開源定時任務(wù)框架PowerJob-比xxl-job 更強大!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!