鄭祥,顧丹鵬,陳肖勇
摘? 要: 隨著微服務(wù)架構(gòu)成為主流,單體定時任務(wù)由于單點故障等問題漸漸無法滿足平時的業(yè)務(wù)需求。分布式定時任務(wù)通過集群的方式進行管理調(diào)度,大大降低了開發(fā)和維護成本。通過分布式部署,保證了系統(tǒng)的高可用,伸縮性,提高了容錯率。XXL-JOB擁有優(yōu)秀的可視化界面,使用方便靈活高效。對比市場上的主流定時任務(wù)框架,基于XXL-JOB給出了一種分布式定時任務(wù)的解決方案,并在石塢實驗室項目進行了部署和使用。
關(guān)鍵詞: 微服務(wù); 分布式; 定時任務(wù); XXL-JOB
中圖分類號:TP399? ? ? ? ? 文獻標(biāo)識碼: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 引言
隨著業(yè)務(wù)場景變得越來越復(fù)雜,定時任務(wù)在程序設(shè)計中存在廣泛應(yīng)用。剛開始企業(yè)發(fā)展規(guī)模較小,業(yè)務(wù)范圍有限,所以定時任務(wù)的需求也很少,這時定時任務(wù)可以直接在單臺服務(wù)器節(jié)點上進行部署,而且基本不需要對這些任務(wù)進行控制和管理,任務(wù)也能順利執(zhí)行[1]。當(dāng)然,這種方式會導(dǎo)致單點故障的問題,所以企業(yè)一般就會采用多臺服務(wù)器節(jié)點進行備份來保證任務(wù)的成功執(zhí)行。而隨著企業(yè)的發(fā)展規(guī)模越來越大,業(yè)務(wù)邏輯愈加復(fù)雜,導(dǎo)致定時任務(wù)的需求量也在不斷攀升。此時單個服務(wù)器節(jié)點已經(jīng)無法承載眾多定時任務(wù)同時執(zhí)行,需要部署多臺服務(wù)器節(jié)點來執(zhí)行這些定時任務(wù)。而定時任務(wù)的調(diào)度問題也隨之而來,首先是定時任務(wù)的路由分配問題,即:應(yīng)該由哪臺服務(wù)器執(zhí)行這個任務(wù)。其次是在分布式部署的情況下,定時任務(wù)的調(diào)度信息,執(zhí)行狀態(tài)的監(jiān)控如何獲取。由于同時部署在多臺集群機器上,因此到達指定的定時時間時,多臺機器上的定時器可能會同時啟動,造成重復(fù)數(shù)據(jù)或者程序異常等問題。為了解決上述問題,市面上也誕生出了多種分布式事務(wù)解決方案,其中XXL-JOB便是其中之一。
1 分布式定時任務(wù)對比
1.1 XXL-JOB簡介
XXL-JOB將調(diào)度行為抽象形成“調(diào)度中心”公共平臺,而平臺自身并不承擔(dān)業(yè)務(wù)邏輯,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請求[2]。將任務(wù)抽象成分散的Job Handler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請求并執(zhí)行對應(yīng)的Job Handler中業(yè)務(wù)邏輯。因此,“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴展性。
1.2 Elastic-JOB簡介
Elastic-JOB是面向互聯(lián)網(wǎng)生態(tài)和海量任務(wù)的分布式調(diào)度解決方案,由兩個相互獨立的子項目ElasticJob-Lite和ElasticJob-Cloud組成。它通過彈性調(diào)度、資源管控,以及作業(yè)治理的功能,打造一個適用于互聯(lián)網(wǎng)場景的分布式調(diào)度解決方案,并通過開放的架構(gòu)設(shè)計,提供多元化的作業(yè)生態(tài)[3]。
1.3 Quartz簡介
Quartz是一個功能豐富的開源作業(yè)調(diào)度庫,可以用于創(chuàng)建簡單或復(fù)雜的調(diào)度,以執(zhí)行數(shù)十個、數(shù)百個甚至數(shù)萬個作業(yè);其任務(wù)被定義為標(biāo)準(zhǔn)Java組件的作業(yè),可以執(zhí)行幾乎任何可以對其進行編程的操作。Quartz調(diào)度器包括許多企業(yè)級特性,例如對JTA事務(wù)和集群的支持[4]。
上述三種定時任務(wù)框架的整體比較如表1所示。
2 XXL-JOB部署方案研究
2.1 部署方案的選擇
隨著微服務(wù)架構(gòu)逐漸成為主流架構(gòu)風(fēng)格。同時,伴隨著Docker容器技術(shù)的發(fā)展,特別是各種Kubernetes系列開源產(chǎn)品的成熟化,使得微服務(wù)落地成為現(xiàn)實。工程數(shù)據(jù)管理平臺基于Rancher容器平臺給出了一種部署微服務(wù)系統(tǒng)的解決方案,并在石塢實驗室項目開發(fā)環(huán)境實現(xiàn)了微服務(wù)的整體部署[5]。
基于Rancher的Docker鏡像部署方式由于直接運行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒級,甚至毫秒級的啟動時間,大大的節(jié)約了開發(fā)測試部署的時間。而且Docker對系統(tǒng)資源的利用率較高,無論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或文件存儲速度,都要比傳統(tǒng)虛擬機技術(shù)更高效。因此此次部署也采用基于Rancher的Docker鏡像部署方式。
2.2 部署流程
XXL-JOB將調(diào)度和任務(wù)剝離解耦,分為調(diào)度中心和執(zhí)行器,因此需要部署調(diào)度中心和執(zhí)行器服務(wù)。
⑴ 調(diào)度中心端部署
將調(diào)度中心代碼編譯后,依據(jù)docker-maven-plugin依賴配置,打包成Docker鏡像后上傳到Harbor鏡像中心。在Rancher中新建服務(wù)配置該鏡像即可啟動調(diào)度中心,部署成功后訪問http://xxxx:8080/xxl-job-admin進入客戶端。
⑵ 執(zhí)行項目端部署
每個任務(wù)只需要開發(fā)一個方法,并添加@XxlJob注解即可。同調(diào)度中心部署一致,將代碼編譯后打包成Docker鏡像,在Rancher中啟動之后,通過掃描@XxlJob將任務(wù)注入到容器中。
執(zhí)行器部署成功之后,登錄調(diào)度中心客戶端,選擇對應(yīng)服務(wù)的執(zhí)行器并新建任務(wù),任務(wù)的JobHandler名稱即為@XxlJob注解中的value所填的名稱。配置好之后,即可開始定時任務(wù)的使用。
3 XXL-JOB技術(shù)組件的應(yīng)用
3.1 項目描述
工程數(shù)據(jù)管理平臺致力于統(tǒng)一各行業(yè)BIM模型標(biāo)準(zhǔn)與工程數(shù)據(jù)標(biāo)準(zhǔn),系統(tǒng)地提升多類型、多格式數(shù)據(jù)管理能力,實現(xiàn)數(shù)據(jù)多方位管控,改善數(shù)據(jù)質(zhì)量,使企業(yè)真正獲得工程數(shù)據(jù)管理能力。平臺系統(tǒng)提供了一站式數(shù)據(jù)服務(wù)。
⑴ 主數(shù)據(jù)管理:包括主數(shù)據(jù)標(biāo)準(zhǔn)管理、主數(shù)據(jù)管理、主數(shù)據(jù)校驗管理等。為工程項目提供約束定義,記錄工程數(shù)據(jù)的全生命周期。
⑵ 服務(wù)管理:對石塢實驗室發(fā)布的所有工程數(shù)據(jù)服務(wù)進行管理和分發(fā),以服務(wù)的形式收集、校驗、分發(fā)和管理工程數(shù)據(jù)
⑶ 數(shù)據(jù)集成:提供快速靈活的數(shù)據(jù)集成方案,通過批量同步和在線同步兩種方式,把不同性質(zhì)的數(shù)據(jù)有機地集成到數(shù)據(jù)管理平臺。
⑷ BIM標(biāo)準(zhǔn):建立各行業(yè)BIM標(biāo)準(zhǔn),提供BIM標(biāo)準(zhǔn)階段、構(gòu)件分類、構(gòu)件屬性及屬性校驗的管理功能,解決BIM模型的屬性缺失和錯誤問題。
⑸ 編碼管理:提供基于場景、元碼和元碼組編碼理論的通用編碼工具,可創(chuàng)建用于不同編碼規(guī)則、屬性管理及應(yīng)用的編碼功能。
3.2 組件應(yīng)用
XXL-JOB定時任務(wù)在工程數(shù)據(jù)管理平臺應(yīng)用廣泛,為石塢實驗室提供了靈活的任務(wù)管理方式。依據(jù)微服務(wù)模塊可分為五大類,分別為系統(tǒng)管理模塊,云服務(wù)模塊,數(shù)據(jù)服務(wù)模塊,審計服務(wù)模塊,主數(shù)據(jù)校驗?zāi)K。
各模塊定時任務(wù)功能應(yīng)用如下。
⑴ 系統(tǒng)管理模塊:包括License證書臨過期提醒;判斷用戶密碼是否過期,并在過期前發(fā)送短信通知,并在密碼到期后禁止用戶登錄;判斷用戶賬號是否到期,并在到期前發(fā)送短信通知,并在賬戶到期后休眠用戶;將一年未登錄的用戶休眠;統(tǒng)計上一天的系統(tǒng)訪問量。
⑵ 云服務(wù)模塊:統(tǒng)計每天的接口調(diào)用總數(shù);統(tǒng)計每五分鐘的接口調(diào)用總數(shù)。
⑶ 數(shù)據(jù)服務(wù)模塊:執(zhí)行任務(wù)失效已過期的應(yīng)用;統(tǒng)計每天所有服務(wù)的調(diào)用總次數(shù);每天統(tǒng)計一次一個服務(wù)在所有應(yīng)用下的訪問次數(shù)、正確率、平均響應(yīng)時間;每5分鐘統(tǒng)計一次一個服務(wù)在所有應(yīng)用下的累加訪問次數(shù)、正確率、平均響應(yīng)時間;每小時統(tǒng)計一次接口并發(fā)峰值。
⑷ 審計服務(wù)模塊:審計日志達到設(shè)定預(yù)警值通知審計員;審計日志達到設(shè)定最高值通知審計員;根據(jù)設(shè)置備份周期自動備份用戶查看日志;根據(jù)設(shè)置備份周期自動刪除日志備份;根據(jù)設(shè)置周期刪除過期日志;審計日志按功能統(tǒng)計每小時折線圖數(shù)據(jù)統(tǒng)計;審計日志按等級統(tǒng)計每小時折線圖數(shù)據(jù)統(tǒng)計;審計日志按類型統(tǒng)計每小時折線圖數(shù)據(jù)統(tǒng)計;刪除三種統(tǒng)計圖昨天的記錄數(shù)據(jù)。
⑸ 主數(shù)據(jù)校驗?zāi)K:主數(shù)據(jù)校驗每天校驗次數(shù)統(tǒng)計。
4 結(jié)束語
本文重點介紹了基于XXL-JOB的分布式定時任務(wù)的部署和應(yīng)用的研究,并概述了在石塢實驗室項目上的實踐。通過使用了XXL-JOB定時任務(wù),解決了單體定時任務(wù)的單點故障等問題,同時保證了系統(tǒng)的高可用性、伸縮性、負(fù)載均衡,并提高了容錯性?;谝陨细攀觯梢钥吹絏XL-JOB對任務(wù)的定時執(zhí)行的穩(wěn)定性,執(zhí)行狀態(tài)的跟進追蹤有很大的提升,在很大程度上減少了開發(fā)人員的時間和精力,同時也為項目履約提供了進一步的技術(shù)保障。但同時由于所有的定時任務(wù)都需要在界面進行維護,對需要動態(tài)生成的定時任務(wù)則顯得無能為力,比如某采集功能,需要根據(jù)設(shè)定的執(zhí)行周期動態(tài)生成定時任務(wù),這些是接下來要解決的問題。
參考文獻(References):
[1] 孫巖.基于分布式架構(gòu)的高可用定時任務(wù)調(diào)度系統(tǒng)的設(shè)計與實現(xiàn)[D]. 哈爾濱工業(yè)大學(xué)碩士論文,2018
[2] 分布式任務(wù)調(diào)度平臺XXL-JOB(xuxueli.com)
[3] ElasticJob-Distributed scheduled job solution (apache.org)
[4] http://www.quartz-scheduler.org/documentation/
[5] 蔡永健.基于Rancher的微服務(wù)部署[J].計算機時代,2021.6:1-4,8