<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          只會用 xxl-job?一款更強大、新一代分布式任務(wù)調(diào)度框架來了!

          共 7458字,需瀏覽 15分鐘

           ·

          2023-02-15 01:04

          4e2431e7b65cd0a7bd13621b610a22ab.webp程序員的成長之路互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享? 關(guān)注


          閱讀本文大概需要 7?分鐘。

          來自:blog.csdn.net/LY_624/article/details/106987036

          • 概述
          • 為什么選擇PowerJob?
          • 同類產(chǎn)品對比
          • 適用場景
          • 整體架構(gòu)
          • 快速開始
          • 初始化項目
          • 啟動調(diào)度服務(wù)器
          • 編寫示例代碼
          • 任務(wù)的配置與運行
          • 相關(guān)鏈接

          概述

          PowerJob是新一代分布式任務(wù)調(diào)度與計算框架,支持CRON、API、固定頻率、固定延遲等調(diào)度策略,提供工作流來編排任務(wù)解決依賴關(guān)系,能讓您輕松完成作業(yè)的調(diào)度與繁雜任務(wù)的分布式計算。

          為什么選擇PowerJob?

          當(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ù)的配置,使用起來不夠方便和靈活,同時它僅支持單機執(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可以被認為是第三代任務(wù)調(diào)度框架,在任務(wù)調(diào)度的基礎(chǔ)上,還額外提供了分布式計算和工作流功能,其主要特性如下:
          • 使用簡單:?提供前端Web界面,允許開發(fā)者可視化地完成調(diào)度任務(wù)的管理(增、刪、改、查)、任務(wù)運行狀態(tài)監(jiān)控和運行日志查看等功能。
          • 定時策略完善:?支持CRON表達式、固定頻率、固定延遲和API四種定時調(diào)度策略。
          • 執(zhí)行模式豐富:?支持單機、廣播、Map、MapReduce四種執(zhí)行模式,其中Map/MapReduce處理器能使開發(fā)者寥寥數(shù)行代碼便獲得集群分布式計算的能力。
          • DAG工作流支持:?支持在線配置任務(wù)依賴關(guān)系,可視化得對任務(wù)進行編排,同時還支持上下游任務(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)高可用和性能的提升(支持無限的水平擴展)。
          • 故障轉(zhuǎn)移與恢復(fù):?任務(wù)執(zhí)行失敗后,可根據(jù)配置的重試策略完成重試,只要執(zhí)行器集群有足夠的計算節(jié)點,任務(wù)就能順利完成。

          同類產(chǎn)品對比


          QuartZ xxl-job SchedulerX 2.0 PowerJob
          定時類型 CRON CRON CRON、固定頻率、固定延遲、OpenAPI CRON、固定頻率、固定延遲、OpenAPI
          任務(wù)類型 內(nèi)置Java 內(nèi)置Java、GLUE Java、Shell、Python等腳本 內(nèi)置Java、外置Java(FatJar)、Shell、Python等腳本 內(nèi)置Java、外置Java(容器)、Shell、Python等腳本
          分布式任務(wù) 靜態(tài)分片 MapReduce動態(tài)分片 MapReduce動態(tài)分片
          在線任務(wù)治理 不支持 支持 支持 支持
          日志白屏化 不支持 支持 不支持 支持
          調(diào)度方式及性能 基于數(shù)據(jù)庫鎖,有性能瓶頸 基于數(shù)據(jù)庫鎖,有性能瓶頸 不詳 無鎖化設(shè)計,性能強勁無上限
          報警監(jiān)控 郵件 短信 郵件,提供接口允許開發(fā)者擴展
          系統(tǒng)依賴 JDBC支持的關(guān)系型數(shù)據(jù)庫(MySQL、Oracle…) MySQL 人民幣(公測期間免費,哎,幫打個廣告吧) 任意Spring Data Jpa支持的關(guān)系型數(shù)據(jù)庫(MySQL、Oracle…)
          DAG工作流 不支持 不支持 支持 支持

          適用場景

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

          整體架構(gòu)

          fbfa5ef5f3e8cc44d94b8f256ad8b4de.webp圖片

          快速開始

          PowerJob由調(diào)度服務(wù)器(powerjob-server)和執(zhí)行器(powerjob-worker)兩部分組成,powerjob-server負責(zé)提供Web服務(wù)和完成任務(wù)的調(diào)度,powerjob-worker則負責(zé)執(zhí)行用戶所編寫的任務(wù)代碼,同時提供分布式計算能力。

          初始化項目

              

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

          導(dǎo)入 IDE,源碼結(jié)構(gòu)如下,我們需要啟動調(diào)度服務(wù)器(powerjob-server),同時在samples工程中編寫自己的處理器代碼750dd52781a3c068fd4d026a113f236b.webp圖片

          啟動調(diào)度服務(wù)器

          創(chuàng)建數(shù)據(jù)庫 powerjob-daily修改配置文件,配置文件的說明官方文檔寫的非常詳細,此處不再贅述。需要修改的地方為數(shù)據(jù)庫配置spring.datasource.core.jdbc-url、spring.datasource.core.usernamespring.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和控制臺密碼(用于進入控制臺),注冊示例應(yīng)用(當(dāng)然你也可以注冊其他的appName,只是別忘記在示例程序中同步修改~)2f66a4122f1da03894b0ae3d07a356b4.webp圖片

          編寫示例代碼

          進入示例工程(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;
          ????}
          }

          編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細),這里為了簡單演示,選擇使用單機處理器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/?),進行任務(wù)的配置與運行。在首頁輸入框輸入配置的應(yīng)用名稱,成功操作后會正式進入前端管理界面。0c56c4b0edccae39f51bdc9b977ef884.webp圖片點擊任務(wù)管理 -> 新建任務(wù)(右上角),開始創(chuàng)建任務(wù)。d0d4430a848cd0b2c64f4dcfeabffdc6.webp圖片完成任務(wù)創(chuàng)建后,即可在控制臺看到剛才創(chuàng)建的任務(wù),如果覺得等待調(diào)度太過于漫長,可以直接點擊運行按鈕,立即運行本任務(wù)。c92dcc821377e8d783294f6f566b7b65.webp圖片前往任務(wù)示例邊欄,查看任務(wù)的運行狀態(tài)和在線日志b31408e3c103bc3a32cc80b85c917219.webp圖片基礎(chǔ)的教程到這里也就結(jié)束了~更多功能示例可見官方文檔,工作流、MapReduce、容器等高級特性等你來探索!

          相關(guān)鏈接

          項目地址:
          • https://github.com/KFCFans/PowerJob
          官方文檔:
          • https://www.yuque.com/powerjob/guidence/ztn4i5
          在線試用:
          • https://www.yuque.com/powerjob/guidence/hnbskn
          <END>

          推薦閱讀:

          終于搞懂了 @Configuration 和 @Component 的區(qū)別 !

          熱議:ChatGPT 的出現(xiàn)會不會導(dǎo)致底層程序員失業(yè)?

              
                  互聯(lián)網(wǎng)初中高級大廠面試題(9個G)
                
              

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)??! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱? c520d4a59a6ed6bab7897b4b45d35d35.webp

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  热99免费视频 | 欧美日韩肏逼 | 自拍啪啪免费 | 殴美一级黑人 | 开心激情站 |