笑話:大廠都在用的任務調度框架我能不知道嗎???


前言

我之前的工作中一直在用 Elastic-Job 來做任務調度。這也是大家為什么能在我的書籍《Spring Cloud 微服務 入門 實戰與進階》中看到 Elastic-Job 的章節。

從 2017 的 2.1.5 版本之后 Elastic-Job 沒再更新過。我們在做技術選型的時候,對框架的使用范圍和社區的活躍度都會比較看重,當然首先是功能點能夠滿足業務需求。

今天給大家新推薦一個任務調度框架,也許很多人聽過甚至目前已經使用了很久。不過沒關系,這也不影響你今天閱讀本文章。

這個框架就是 XXL-JOB,一個輕量級分布式任務調度平台。最近在我的開源項目 Kitty-Cloud 中就采用了 XXL-JOB,還有一個原因是我目前任職的公司也一直在使用 XXL-JOB。

XXL-JOB 的前世今生

XXL-JOB 是一個分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。

2015-11 月,XXL-JOB RELEASE 了第一個大版本 V1.0,在后面的幾年里一直在更新。目前最新的版本是今年更新的 2.2.0。

功能特性

  • 調度中心 HA(中心式)
  • 執行器 HA(分布式)
  • 執行器彈性擴容縮容
  • 豐富的路由策略支持
  • 支持高度容錯故障轉移
  • 任務超時控制
  • 任務失敗重試
  • 任務失敗告警
  • 任務動態分片
  • 腳本任務
  • 等等。。。

豐富的 WEB 后台

運行報表

任務管理

WEB IDE

XXL-JOB 使用場景

  • 訂單超時取消
  • 用戶生日關懷短信發送
  • 定時進行數據異構
  • 每日商家結算
  • 定時刷新緩存
  • ....................

XXL-JOB 架構設計

XXL-JOB 將調度行為抽象形成“調度中心”公共平台,而平台自身並不承擔業務邏輯,“調度中心”負責發起調度請求。

將任務抽象成分散的 JobHandler,交由“執行器”統一管理,“執行器”負責接收調度請求並執行對應的 JobHandler 中業務邏輯。

調度 和 任務 兩部分可以相互解耦,提高系統整體穩定性和擴展性;

如下圖,任務和調度是分開的,相互解耦。

執行器嵌入在應用中,負責接收調度請求並執行任務邏輯。應用啟動的時候會注冊到調度中心,在后台有執行器管理功能,也可以手動添加執行器。

XXL-JOB 整體架構如下圖所示,調度中心分為任務管理,執行器管理,日志管理等模塊。

任務管理主要對任務的一些操作,包括添加任務,編輯任務,暫停任務,啟動任務等功能。

執行器管理主要對執行器的一些操作,查看機器列表,管理在線執行器等。

日志管理負責所有日志相關的存儲和展示。

其他模塊包括了一些任務執行的報表,任務失敗告警等功能。

執行器內部會暴露 Http 協議,調度中心在任務調度的時候,會向對應的執行器發起 Http 請求,執行器接收到請求后開始執行任務邏輯,執行器會回調調度中心,反饋任務執行的結果。

XXL-JOB 使用小技巧

日志自動清理

XXL-JOB 中有調度日志和任務執行日志。如果任務多,調度頻繁的話日志的數據量也挺大的,目前日志是存儲在 Mysql 中,對應的表是 xxl_job_log。

在一開始用的時候發現 XXL-JOB 的后台直接有清理日志的按鈕,直接在界面上操作非常即可,可以選擇時間段清理,也還算方便。

通過手動的方式去操作必然會帶來一個問題,就是忘記了,等到哪天卡的不行才會去清理一次,不智能。

當時就直接寫了一個清理日志的任務,直接對 xxl_job_log 這張表進行刪除操作,定時清理,這樣就不用人工干預了。

后面發現 XXL-JOB 居然有自動清理的配置,這就是沒仔細看文檔的后果呀,通過下面的配置來決定執行器日志文件保存天數。

xxl.job.executor.logretentiondays=30

任務自動注冊

默認情況下,我們開發了一個任務需要到 XXL-JOB 的后台手動去添加一個任務。如果你想偷點懶的話我教你一個方式。

可以自己定義一個注解,然后項目啟動的時候掃描注解,獲取注解里的配置,調用 XXL-JOB 后的 API 接口直接插入,這樣新加的任務在你啟動后就自動創建了。

擴展監控支持短信和釘釘

XXL-JOB 對任務的失敗告警默認只支持郵件的方式,但是提供了擴展的方式,需要對后台的代碼進行擴展才行。

可以自己動手擴展監控告警,比如支持釘釘消息,短信等告警方式。

擴展代碼位置:JobFailMonitorHelper.failAlarm

數據格式:

{
	"emails": ["xxx.mail.com", "xxx.mail.com"],
	"dingdings": [{
		"access_token": " ",
		"secret": ""
	}],
	"mobiles": ["18211110000"]
}

上面定義的 Json 數據格式我們可以直接用后台目前已有的監控郵箱的文本框進行輸入,然后在

JobFailMonitorHelper 進行解析,選擇對應的發送方式即可。

做的更友好的方式就直接把后台的那個編輯頁面改掉,增加幾個單獨的短信,釘釘文本輸入框。


免責聲明!

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



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