介紹一種很好用的任務調度平台


1 總體設計

分布式任務調度平台是什么

XXL-JOB是一個輕量級分布式任務調度平台,和quartz相似,但是XXL-JOB將調度中心與執行器解耦,彌補了quartz的不足(使用API方式操作任務,不人性化;系統侵入性嚴重等)

其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。

文檔我這邊可以給。

源碼目錄介紹

  • /xxl-job-admin :調度中心,項目源碼
  • /xxl-job-core :公共Jar依賴
  • /xxl-job-executor-samples :執行器,Sample示例項目(大家可以在該項目上進行開發,也可以將現有項目改造-生成

“調度數據庫”配置

XXL-JOB調度模塊基於Quartz集群實現,其“調度數據庫”是在Quartz的11張集群mysql表基礎上擴展而成。

XXL-JOB首先定制了Quartz原生表結構前綴(XXL_JOB_QRTZ_)。我們代碼配置和源碼配置一樣

img

在此基礎上新增了幾張張擴展表。正常情況下總共16張表

- XXL_JOB_QRTZ_TRIGGER_GROUP:執行器信息表,維護任務執行器信息;
- XXL_JOB_QRTZ_TRIGGER_REGISTRY:執行器注冊表,維護在線的執行器和調度中心機器地址信息;
- XXL_JOB_QRTZ_TRIGGER_INFO:調度擴展信息表: 用於保存XXL-JOB調度任務的擴展信息,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等;
- XXL_JOB_QRTZ_TRIGGER_LOG:調度日志表: 用於保存XXL-JOB任務調度的歷史信息,如調度結果、執行結果、調度入參、調度機器和執行器等等;
- XXL_JOB_QRTZ_TRIGGER_LOGGLUE:任務GLUE日志:用於保存GLUE更新歷史,用於支持GLUE的版本回溯功能;

所有表(若想詳細了解可以查看文檔):
數據庫表

架構設計

設計思想

“調度中心”負責發起調度請求。

“執行器”負責接收調度請求並執行對應的JobHandler中業務邏輯。

系統組成

  • 調度模塊(調度中心)

    負責管理調度信息,按照調度配置發出調度請求,自身不承擔業務代碼。調度系統與任務解耦,提高了系統可用性和穩定性,同時調度系統性能不再受限於任務模塊;
    支持可視化、簡單且動態的管理調度信息,包括任務新建,更新,刪除,GLUE開發和任務報警等,所有上述操作都會實時生效,同時支持監控調度結果以及執行日志,支持執行器Failover。

    img

    輸入圖片說明

    GLUE模式(java)

    查看日志

  • 執行模塊(執行器)

    負責接收調度請求並執行任務邏輯。任務模塊專注於任務的執行等操作,開發和維護更加簡單和高效;
    接收“調度中心”的執行請求、終止請求和日志請求等。

    主要分為GLUE模式(java)、BEAN模式,查看(任務詳解)

    GLUE模式(java)

    ​ 任務以源碼方式維護在調度中心,支持通過Web IDE在線更新,實時編譯和生效,因此不需要指定JobHandler。

    輸入圖片說明

    輸入圖片說明

    BEAN模式:

    ​ 需要繼承IJobHandler類開發,在源碼找到模板,根據模板開發。並在調度中心中,新建調度任務

    輸入圖片說明

一次完整的任務調度通訊流程

  • 1、“調度中心”向“執行器”發送http調度請求: “執行器”中接收請求的服務,實際上是一台內嵌jetty服務器,默認端口9999;
  • 2、“執行器”執行任務邏輯;
  • 3、“執行器”http回調“調度中心”調度結果: “調度中心”中接收回調的服務,是針對執行器開放一套API服務;

任務詳解

配置屬性詳細說明:

執行器:任務的綁定的執行器,任務觸發調度時將會自動發現注冊成功的執行器, 實現任務自動發現功能;

路由策略:當執行器集群部署時,提供豐富的路由策略,包括:

  • FIRST(第一個):固定選擇第一個機器;
  • LAST(最后一個):固定選擇最后一個機器;
  • ROUND(輪詢):;
  • RANDOM(隨機):隨機選擇在線的機器;
  • 等等

運行模式:

  • BEAN模式:任務以JobHandler方式維護在執行器端;需要結合 "JobHandler" 屬性匹配執行器中任務;
  • GLUE模式(Java):任務以源碼方式維護在調度中心;該模式的任務實際上是一段繼承自IJobHandler的Java類代碼並 "groovy" 源碼方式維護,它在執行器項目中運行,可使用@Resource/@Autowire注入執行器里中的其他服務;是一段java代碼

JobHandler:運行模式為 "BEAN模式" 時生效,對應執行器中新開發的JobHandler類“@JobHandler”注解自定義的value值;

阻塞處理策略:調度過於密集執行器來不及處理時的處理策略;

子任務:每個任務都擁有一個唯一的任務ID(任務ID可以從任務列表獲取),當本任務執行結束並且執行成功時,將會觸發子任務ID所對應的任務的一次主動調度。

BEAN模式

任務邏輯以JobHandler的形式存在於“執行器”所在項目中,開發流程如下:

步驟一:執行器項目中,開發JobHandler:

安裝下面代碼的模板即可開發執行器。

輸入圖片說明

步驟二:調度中心,新建調度任務

運行模式選中 "BEAN模式",JobHandler屬性填寫任務注解“@JobHandler”中定義的值

為方便用戶參考與快速實用,示例執行器內原生提供多個Bean模式任務Handler,可以直接配置實用。

  • demoJobHandler:簡單示例任務,任務內部模擬耗時任務邏輯,用戶可在線體驗Rolling Log等功能;
  • shardingJobHandler:分片示例任務,任務內部模擬處理分片參數,可參考熟悉分片任務;
  • httpJobHandler:通用HTTP任務Handler;業務方只需要提供HTTP鏈接即可,不限制語言、平台;
  • commandJobHandler:通用命令行任務Handler;業務方只需要提供命令行即可;如 “pwd”命令;

GLUE模式(java)

任務以源碼方式維護在調度中心,支持通過Web IDE在線更新,實時編譯和生效,因此不需要指定JobHandler。

步驟一:調度中心,新建調度任務:

輸入圖片說明

步驟二:開發任務代碼:

輸入圖片說明

issxxl-job 中的一些參數

調度中心地址:http://10.202.117.55:8080/xxl-job-admin-1.9.0/jobinfo

調度中心有兩條BEAN模式調用:

  • BEAN模式:tranShipPointHandler(使用http發送post請求)
  • BEAN模式:branchScheduleHandler(使用http發送post請求)

2 操作指南

配置執行器

輸入圖片說明

點擊按鈕 "+新增執行器" ,可新增執行器

輸入圖片說明

AppName: 是每個執行器集群的唯一標示AppName, 執行器會周期性以AppName為對象進行自動注冊。可通過該配置自動發現注冊成功的執行器, 供任務調度時使用;
名稱: 執行器的名稱,
排序: 執行器的排序, 系統中需要執行器的地方,如任務新增, 將會按照該排序讀取可用的執行器列表;
注冊方式:調度中心獲取執行器地址的方式;
​ 自動注冊:執行器自動進行執行器注冊,調度中心通過底層注冊表可以動態發現執行器機器地址;
​ 手動錄入:人工手動錄入執行器的地址信息,多地址逗號分隔,供調度中心使用;
機器地址:"注冊方式"為"手動錄入"時有效,支持人工維護執行器的地址信息;

其他操作

新建任務、編輯任務、編輯GLUE代碼、啟動、停止任務、手動觸發一次調度,查看調度日志、刪除執行日志

輸入圖片說明

輸入圖片說明

用戶管理

進入 "用戶管理" 界面,可查看和管理用戶信息;

目前用戶分為兩種角色:

  • 管理員:擁有全量權限,支持在線管理用戶信息,為用戶分配權限,權限分配粒度為執行器;
  • 普通用戶:僅擁有被分配權限的執行器,及相關任務的操作權限;

輸入圖片說明

輸入圖片說明

3 快速開發

任務調度中心源碼結構

我們使用到的是Spring-boot版本。

配置部署調度中心

調度中心項目:xxl-job-admin
作用:統一管理任務調度平台上調度任務,負責觸發調度執行,並且提供任務管理平台。

步驟一:調度中心配置:

地址:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties

詳細配置文檔中有,主要包含調度中心數據庫連接的配置、報警郵箱的配置、登陸賬號的配置

步驟二:部署項目

項目運行后,訪問地址http://localhost:8080/xxl-job-admin,該地址執行器將會使用到,作為回掉地址。登陸后的界面如下。

至此“調度中心”部署成功。

配置部署“執行器”

“執行器”項目:xxl-job-executor-sample-springboot

作用:負責接收“調度中心”的調度並執行;可直接部署執行器,也可以將執行器集成到現有業務項目中。

步驟一:maven依賴

確認pom文件中引入了“xxl-job-core”的maven依賴;

步驟二:執行器配置

配置地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

執行器配置,配置內容說明:

### 調度中心部署跟地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

在我們自己的項目中,調度中心部署地址在下行,源碼中的調度中心沒有用。

xxl.job.admin.addresses=http://10.202.117.55:8080/xxl-job-admin-1.9.0

主要了解這一個點,其他的可以查看文檔。

步驟三:執行器組件配置

配置文件地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

步驟四:部署執行器項目

xxl-job-executor-sample-springboot:項目編譯打包成springboot類型的可執行JAR包,命令啟動即可;

至此“執行器項目”部署結束。

開發第一個任務“Hello World”

本示例以新建一個 “GLUE模式(Java)” 運行模式的任務為例。( “GLUE模式(Java)”的執行代碼托管到調度中心在線維護,相比“Bean模式任務”需要在執行器項目開發部署上線,更加簡便輕量)

前提:請確認“調度中心”和“執行器”項目已經成功部署並啟動;

步驟一:新建任務:

輸入圖片說明

步驟二:“GLUE模式(java)”任務開發:

“GLUE模式(Java)” 運行模式的任務實際上是一段繼承自IJobHandler的Java類代碼,它在執行器項目中運行,可使用@Resource/@Autowire注入執行器里中的其他服務,詳細介紹請查看第三章節

輸入圖片說明

步驟三:觸發執行:

點擊任務右側 “執行” 按鈕,可手動觸發一次任務執行(通常情況下,通過配置Cron表達式進行任務調度出發)。

步驟四:查看日志:

請點擊任務右側 “日志” 按鈕,可前往任務日志界面查看任務日志。運行中的任務點擊右側的“執行日志”按鈕,可進入日志控制台查看實時執行日志。

輸入圖片說明

在日志控制台,可以實時監控任務進度:

輸入圖片說明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM