鄭祥,顧丹鵬,陳肖勇

摘? 要: 隨著微服務架構成為主流,單體定時任務由于單點故障等問題漸漸無法滿足平時的業務需求。分布式定時任務通過集群的方式進行管理調度,大大降低了開發和維護成本。通過分布式部署,保證了系統的高可用,伸縮性,提高了容錯率。XXL-JOB擁有優秀的可視化界面,使用方便靈活高效。對比市場上的主流定時任務框架,基于XXL-JOB給出了一種分布式定時任務的解決方案,并在石塢實驗室項目進行了部署和使用。
關鍵詞: 微服務; 分布式; 定時任務; XXL-JOB
中圖分類號:TP399? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)06-80-03
Distributed timing task deployment based on XXL-JOB
Zheng Xiang1,2, Gu Danpeng1,2, Chen Xiaoyong1,2
(1. PowerchinaHuadong Engineering Corporation Limited, Hangzhou, Zhejiang 311122,China;
2. Zhejiang Huadong Engineering Digital Technology Co.Ltd)
Abstract: As the microservice architecture becoming the mainstream, the single timing task can not meet the usual business needs due to single point of failure and other problems. Distributed timing tasks are managed and scheduled by cluster, which greatly reduces the development and maintenance cost. Through distributed deployment, the high availability, scalability and fault tolerance of the system are ensured. XXL-JOB has an excellent visual interface, which can deploy and manage timing tasks through the console, and is convenient, flexible and efficient. Compared with the mainstream timing task framework in the market, a distributed timing task solution is given based on XXL-JOB, which is deployed and used in Shiwu laboratory project.
Key words: microservices; distributed; timing task; XXL-JOB
0 引言
隨著業務場景變得越來越復雜,定時任務在程序設計中存在廣泛應用。剛開始企業發展規模較小,業務范圍有限,所以定時任務的需求也很少,這時定時任務可以直接在單臺服務器節點上進行部署,而且基本不需要對這些任務進行控制和管理,任務也能順利執行[1]。當然,這種方式會導致單點故障的問題,所以企業一般就會采用多臺服務器節點進行備份來保證任務的成功執行。而隨著企業的發展規模越來越大,業務邏輯愈加復雜,導致定時任務的需求量也在不斷攀升。此時單個服務器節點已經無法承載眾多定時任務同時執行,需要部署多臺服務器節點來執行這些定時任務。而定時任務的調度問題也隨之而來,首先是定時任務的路由分配問題,即:應該由哪臺服務器執行這個任務。其次是在分布式部署的情況下,定時任務的調度信息,執行狀態的監控如何獲取。由于同時部署在多臺集群機器上,因此到達指定的定時時間時,多臺機器上的定時器可能會同時啟動,造成重復數據或者程序異常等問題。為了解決上述問題,市面上也誕生出了多種分布式事務解決方案,其中XXL-JOB便是其中之一。
1 分布式定時任務對比
1.1 XXL-JOB簡介
XXL-JOB將調度行為抽象形成“調度中心”公共平臺,而平臺自身并不承擔業務邏輯,“調度中心”負責發起調度請求[2]。將任務抽象成分散的Job Handler,交由“執行器”統一管理,“執行器”負責接收調度請求并執行對應的Job Handler中業務邏輯。因此,“調度”和“任務”兩部分可以相互解耦,提高系統整體穩定性和擴展性。
1.2 Elastic-JOB簡介
Elastic-JOB是面向互聯網生態和海量任務的分布式調度解決方案,由兩個相互獨立的子項目ElasticJob-Lite和ElasticJob-Cloud組成。它通過彈性調度、資源管控,以及作業治理的功能,打造一個適用于互聯網場景的分布式調度解決方案,并通過開放的架構設計,提供多元化的作業生態[3]。
1.3 Quartz簡介
Quartz是一個功能豐富的開源作業調度庫,可以用于創建簡單或復雜的調度,以執行數十個、數百個甚至數萬個作業;其任務被定義為標準Java組件的作業,可以執行幾乎任何可以對其進行編程的操作。Quartz調度器包括許多企業級特性,例如對JTA事務和集群的支持[4]。
上述三種定時任務框架的整體比較如表1所示。
2 XXL-JOB部署方案研究
2.1 部署方案的選擇
隨著微服務架構逐漸成為主流架構風格。同時,伴隨著Docker容器技術的發展,特別是各種Kubernetes系列開源產品的成熟化,使得微服務落地成為現實。工程數據管理平臺基于Rancher容器平臺給出了一種部署微服務系統的解決方案,并在石塢實驗室項目開發環境實現了微服務的整體部署[5]。
基于Rancher的Docker鏡像部署方式由于直接運行于宿主內核,無需啟動完整的操作系統,因此可以做到秒級,甚至毫秒級的啟動時間,大大的節約了開發測試部署的時間。而且Docker對系統資源的利用率較高,無論是應用執行速度,內存損耗或文件存儲速度,都要比傳統虛擬機技術更高效。因此此次部署也采用基于Rancher的Docker鏡像部署方式。
2.2 部署流程
XXL-JOB將調度和任務剝離解耦,分為調度中心和執行器,因此需要部署調度中心和執行器服務。
⑴ 調度中心端部署
將調度中心代碼編譯后,依據docker-maven-plugin依賴配置,打包成Docker鏡像后上傳到Harbor鏡像中心。在Rancher中新建服務配置該鏡像即可啟動調度中心,部署成功后訪問http://xxxx:8080/xxl-job-admin進入客戶端。
⑵ 執行項目端部署
每個任務只需要開發一個方法,并添加@XxlJob注解即可。同調度中心部署一致,將代碼編譯后打包成Docker鏡像,在Rancher中啟動之后,通過掃描@XxlJob將任務注入到容器中。
執行器部署成功之后,登錄調度中心客戶端,選擇對應服務的執行器并新建任務,任務的JobHandler名稱即為@XxlJob注解中的value所填的名稱。配置好之后,即可開始定時任務的使用。
3 XXL-JOB技術組件的應用
3.1 項目描述
工程數據管理平臺致力于統一各行業BIM模型標準與工程數據標準,系統地提升多類型、多格式數據管理能力,實現數據多方位管控,改善數據質量,使企業真正獲得工程數據管理能力。平臺系統提供了一站式數據服務。
⑴ 主數據管理:包括主數據標準管理、主數據管理、主數據校驗管理等。為工程項目提供約束定義,記錄工程數據的全生命周期。
⑵ 服務管理:對石塢實驗室發布的所有工程數據服務進行管理和分發,以服務的形式收集、校驗、分發和管理工程數據
⑶ 數據集成:提供快速靈活的數據集成方案,通過批量同步和在線同步兩種方式,把不同性質的數據有機地集成到數據管理平臺。
⑷ BIM標準:建立各行業BIM標準,提供BIM標準階段、構件分類、構件屬性及屬性校驗的管理功能,解決BIM模型的屬性缺失和錯誤問題。
⑸ 編碼管理:提供基于場景、元碼和元碼組編碼理論的通用編碼工具,可創建用于不同編碼規則、屬性管理及應用的編碼功能。
3.2 組件應用
XXL-JOB定時任務在工程數據管理平臺應用廣泛,為石塢實驗室提供了靈活的任務管理方式。依據微服務模塊可分為五大類,分別為系統管理模塊,云服務模塊,數據服務模塊,審計服務模塊,主數據校驗模塊。
各模塊定時任務功能應用如下。
⑴ 系統管理模塊:包括License證書臨過期提醒;判斷用戶密碼是否過期,并在過期前發送短信通知,并在密碼到期后禁止用戶登錄;判斷用戶賬號是否到期,并在到期前發送短信通知,并在賬戶到期后休眠用戶;將一年未登錄的用戶休眠;統計上一天的系統訪問量。
⑵ 云服務模塊:統計每天的接口調用總數;統計每五分鐘的接口調用總數。
⑶ 數據服務模塊:執行任務失效已過期的應用;統計每天所有服務的調用總次數;每天統計一次一個服務在所有應用下的訪問次數、正確率、平均響應時間;每5分鐘統計一次一個服務在所有應用下的累加訪問次數、正確率、平均響應時間;每小時統計一次接口并發峰值。
⑷ 審計服務模塊:審計日志達到設定預警值通知審計員;審計日志達到設定最高值通知審計員;根據設置備份周期自動備份用戶查看日志;根據設置備份周期自動刪除日志備份;根據設置周期刪除過期日志;審計日志按功能統計每小時折線圖數據統計;審計日志按等級統計每小時折線圖數據統計;審計日志按類型統計每小時折線圖數據統計;刪除三種統計圖昨天的記錄數據。
⑸ 主數據校驗模塊:主數據校驗每天校驗次數統計。
4 結束語
本文重點介紹了基于XXL-JOB的分布式定時任務的部署和應用的研究,并概述了在石塢實驗室項目上的實踐。通過使用了XXL-JOB定時任務,解決了單體定時任務的單點故障等問題,同時保證了系統的高可用性、伸縮性、負載均衡,并提高了容錯性。基于以上概述,可以看到XXL-JOB對任務的定時執行的穩定性,執行狀態的跟進追蹤有很大的提升,在很大程度上減少了開發人員的時間和精力,同時也為項目履約提供了進一步的技術保障。但同時由于所有的定時任務都需要在界面進行維護,對需要動態生成的定時任務則顯得無能為力,比如某采集功能,需要根據設定的執行周期動態生成定時任務,這些是接下來要解決的問題。
參考文獻(References):
[1] 孫巖.基于分布式架構的高可用定時任務調度系統的設計與實現[D]. 哈爾濱工業大學碩士論文,2018
[2] 分布式任務調度平臺XXL-JOB(xuxueli.com)
[3] ElasticJob-Distributed scheduled job solution (apache.org)
[4] http://www.quartz-scheduler.org/documentation/
[5] 蔡永健.基于Rancher的微服務部署[J].計算機時代,2021.6:1-4,8