只会用 xxl-job?更强大的新一代分布式任务调度框架来了!
點擊關注公眾號,實用技術文章及時了解
概述
PowerJob是新一代分布式任務調度與計算框架,支持CRON、API、固定頻率、固定延遲等調度策略,提供工作流來編排任務解決依賴關系,能讓您輕松完成作業的調度與繁雜任務的分布式計算。
為什么選擇PowerJob?
當前市面上流行的作業調度框架有老牌的Quartz、基于Quartz的elastic-job和原先基于Quartz后面移除依賴的xxl-job,這里分別談一些這些框架現存的缺點。
Quartz可以視為第一代任務調度框架,基本上是現有所有分布式調度框架的“祖宗”。由于歷史原因,它不提供Web界面,只能通過API完成任務的配置,使用起來不夠方便和靈活,同時它僅支持單機執行,無法有效利用整個集群的計算能力。
xxl-job可以視為第二代任務調度框架,在一定程度上解決了Quartz的不足,在過去幾年中是個非常優秀的調度框架,不過放到今天來看,還是存在著一些不足的,具體如下:
數據庫支持單一: 僅支持MySQL,使用其他DB需要自己魔改代碼
有限的分布式計算能力: 僅支持靜態分片,無法很好的完成復雜任務的計算
不支持工作流: 無法配置各個任務之間的依賴關系,不適用于有DAG需求的場景
正所謂長江后浪推前浪,在如今這個數據量日益增長、業務越來越復雜的年代,急需一款更為強大的任務調度框架來解決上訴問題,而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處理器完成任務的分發,調動整個集群加速計算。
整體架構
快速開始
PowerJob由調度服務器(powerjob-server)和執行器(powerjob-worker)兩部分組成,powerjob-server負責提供Web服務和完成任務的調度,powerjob-worker則負責執行用戶所編寫的任務代碼,同時提供分布式計算能力。推薦:Java面試題
初始化項目
git?clone?https://github.com/KFCFans/PowerJob.git導入 IDE,源碼結構如下,我們需要啟動調度服務器(powerjob-server),同時在samples工程中編寫自己的處理器代碼
啟動調度服務器
創建數據庫 powerjob-daily
修改配置文件,配置文件的說明官方文檔寫的非常詳細,此處不再贅述。需要修改的地方為數據庫配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,當然,有mongoDB的同學也可以修改spring.data.mongodb.uri以獲取完全版體驗。
oms.env=DAILY logging.config=classpath:logback-dev.xml#######?數據庫配置?####### 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啟動調度服務器,觀察啟動日志,查看是否啟動成功~啟動成功后,訪問 http://127.0.0.1:7700/ ,如果能順利出現Web界面,則說明調度服務器啟動成功!
注冊應用:點擊主頁應用注冊按鈕,填入 oms-test和控制臺密碼(用于進入控制臺),注冊示例應用(當然你也可以注冊其他的appName,只是別忘記在示例程序中同步修改~)
編寫示例代碼
進入示例工程(powerjob-worker-samples),修改配置文件連接powerjob-server并編寫自己的處理器代碼。
修改powerjob-worker-samples的啟動配置類com.github.kfcfans.powerjob.samples.OhMySchedulerConfig,將AppName修改為剛剛在控制臺注冊的名稱。
@Configuration public?class?OhMySchedulerConfig?{@Beanpublic?OhMyWorker?initOMS()?throws?Exception?{//?服務器HTTP地址(端口號為?server.port,而不是?ActorSystem?port)List<String>?serverAddress?=?Lists.newArrayList("127.0.0.1:7700");//?1.?創建配置文件OhMyConfig?config?=?new?OhMyConfig();config.setPort(27777);config.setAppName("oms-test");config.setServerAddress(serverAddress);//?如果沒有大型?Map/MapReduce?的需求,建議使用內存來加速計算config.setStoreStrategy(StoreStrategy.MEMORY);//?2.?創建?Worker?對象,設置配置文件OhMyWorker?ohMyWorker?=?new?OhMyWorker();ohMyWorker.setConfig(config);return?ohMyWorker;} }編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細),這里為了簡單演示,選擇使用單機處理器BasicProcessor,以下是代碼示例。
@Slf4j @Component public?class?StandaloneProcessorDemo?implements?BasicProcessor?{@Overridepublic?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,觀察控制臺輸出信息,判斷是否啟動成功。推薦:Java面試題
任務的配置與運行
調度服務器與示例工程都啟動完畢后,再次前往Web頁面( http://127.0.0.1:7700/ ),進行任務的配置與運行。
在首頁輸入框輸入配置的應用名稱,成功操作后會正式進入前端管理界面。
點擊任務管理 -> 新建任務(右上角),開始創建任務。
完成任務創建后,即可在控制臺看到剛才創建的任務,如果覺得等待調度太過于漫長,可以直接點擊運行按鈕,立即運行本任務。
前往任務示例邊欄,查看任務的運行狀態和在線日志
基礎的教程到這里也就結束了~更多功能示例可見官方文檔,工作流、MapReduce、容器等高級特性等你來探索!
相關鏈接
項目地址:
https://github.com/KFCFans/PowerJob
官方文檔:
https://www.yuque.com/powerjob/guidence/ztn4i5
在線試用:
https://www.yuque.com/powerjob/guidence/hnbskn
來源:blog.csdn.net/LY_624/article/details/106987036
推薦
Java面試題寶典
技術內卷群,一起來學習!!
PS:因為公眾號平臺更改了推送規則,如果不想錯過內容,記得讀完點一下“在看”,加個“星標”,這樣每次新文章推送才會第一時間出現在你的訂閱列表里。點“在看”支持我們吧!
總結
以上是生活随笔為你收集整理的只会用 xxl-job?更强大的新一代分布式任务调度框架来了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 狂神 redis笔记 docker
- 下一篇: 4、全连接神经网络