溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些

發(fā)布時(shí)間:2021-11-12 10:37:52 來(lái)源:億速云 閱讀:567 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些”吧!

基本介紹

項(xiàng)目開(kāi)發(fā)中,常常以下場(chǎng)景需要分布式任務(wù)調(diào)度:

  • 同一服務(wù)多個(gè)實(shí)例的任務(wù)存在互斥時(shí),需要統(tǒng)一協(xié)調(diào)

  • 定時(shí)任務(wù)的執(zhí)行需要支持高可用、監(jiān)控運(yùn)維、故障告警

  • 需要統(tǒng)一管理和追蹤各個(gè)服務(wù)節(jié)點(diǎn)定時(shí)任務(wù)的運(yùn)行情況,以及任務(wù)屬性信息,例如任務(wù)所屬服務(wù)、所屬責(zé)任人

因此,XXL-JOB應(yīng)運(yùn)而生: XXL-JOB是一個(gè)開(kāi)源的輕量級(jí)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、學(xué)習(xí)簡(jiǎn)單、輕量級(jí)、易擴(kuò)展、開(kāi)箱即用,其中“XXL”是主要作者,大眾點(diǎn)評(píng)許雪里名字的縮寫

自2015年開(kāi)源以來(lái),已接入數(shù)百家公司的線上產(chǎn)品線,接入場(chǎng)景涉及電商業(yè)務(wù),O2O業(yè)務(wù)和大數(shù)據(jù)作業(yè)等

功能特性

主要功能特性如下:

  • 簡(jiǎn)單靈活 提供Web頁(yè)面對(duì)任務(wù)進(jìn)行管理,管理系統(tǒng)支持用戶管理、權(quán)限控制; 支持容器部署; 支持通過(guò)通用HTTP提供跨平臺(tái)任務(wù)調(diào)度;

  • 豐富的任務(wù)管理功能 支持頁(yè)面對(duì)任務(wù)CRUD操作; 支持在頁(yè)面編寫腳本任務(wù)、命令行任務(wù)、Java代碼任務(wù)并執(zhí)行; 支持任務(wù)級(jí)聯(lián)編排,父任務(wù)執(zhí)行結(jié)束后觸發(fā)子任務(wù)執(zhí)行; 支持設(shè)置任務(wù)優(yōu)先級(jí); 支持設(shè)置指定任務(wù)執(zhí)行節(jié)點(diǎn)路由策略,包括輪詢、隨機(jī)、廣播、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等; 支持Cron方式、任務(wù)依賴、調(diào)度中心API接口方式觸發(fā)任務(wù)執(zhí)行

  • 高性能 調(diào)度中心基于線程池多線程觸發(fā)調(diào)度任務(wù),快任務(wù)、慢任務(wù)基于線程池隔離調(diào)度,提供系統(tǒng)性能和穩(wěn)定性; 任務(wù)調(diào)度流程全異步化設(shè)計(jì)實(shí)現(xiàn),如異步調(diào)度、異步運(yùn)行、異步回調(diào)等,有效對(duì)密集調(diào)度進(jìn)行流量削峰;

  • 高可用 任務(wù)調(diào)度中心、任務(wù)執(zhí)行節(jié)點(diǎn)均 集群部署,支持動(dòng)態(tài)擴(kuò)展、故障轉(zhuǎn)移 支持任務(wù)配置路由故障轉(zhuǎn)移策略,執(zhí)行器節(jié)點(diǎn)不可用是自動(dòng)轉(zhuǎn)移到其他節(jié)點(diǎn)執(zhí)行 支持任務(wù)超時(shí)控制、失敗重試配置 支持任務(wù)處理阻塞策略:調(diào)度當(dāng)任務(wù)執(zhí)行節(jié)點(diǎn)忙碌時(shí)來(lái)不及執(zhí)行任務(wù)的處理策略,包括:串行、拋棄、覆蓋策略

  • 易于監(jiān)控運(yùn)維 支持設(shè)置任務(wù)失敗郵件告警,預(yù)留接口支持短信、釘釘告警; 支持實(shí)時(shí)查看任務(wù)執(zhí)行運(yùn)行數(shù)據(jù)統(tǒng)計(jì)圖表、任務(wù)進(jìn)度監(jiān)控?cái)?shù)據(jù)、任務(wù)完整執(zhí)行日志;

系統(tǒng)設(shè)計(jì)

1 設(shè)計(jì)思路

將調(diào)度行為抽象形成“調(diào)度中心”公共平臺(tái),而平臺(tái)自身并不承擔(dān)業(yè)務(wù)邏輯,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請(qǐng)求; 將任務(wù)抽象成分散的JobHandler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請(qǐng)求并執(zhí)行對(duì)應(yīng)的JobHandler中業(yè)務(wù)邏輯; 因此,“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴(kuò)展性;

2 系統(tǒng)組成

  • 調(diào)度模塊(調(diào)度中心): 負(fù)責(zé)管理調(diào)度信息,按照調(diào)度配置發(fā)出調(diào)度請(qǐng)求,自身不承擔(dān)業(yè)務(wù)代碼。調(diào)度系統(tǒng)與任務(wù)解耦,提高了系統(tǒng)可用性和穩(wěn)定性,同時(shí)調(diào)度系統(tǒng)性能不再受限于任務(wù)模塊; 支持可視化、簡(jiǎn)單且動(dòng)態(tài)的管理調(diào)度信息,包括任務(wù)新建,更新,刪除,任務(wù)報(bào)警等,所有上述操作都會(huì)實(shí)時(shí)生效,同時(shí)支持監(jiān)控調(diào)度結(jié)果以及執(zhí)行日志,支持執(zhí)行器Failover

  • 執(zhí)行模塊(執(zhí)行器): 負(fù)責(zé)接收調(diào)度請(qǐng)求并執(zhí)行任務(wù)邏輯。任務(wù)模塊專注于任務(wù)的執(zhí)行等操作,開(kāi)發(fā)和維護(hù)更加簡(jiǎn)單和高效; 接收“調(diào)度中心”的執(zhí)行請(qǐng)求、終止請(qǐng)求和日志請(qǐng)求等

分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些

3 工作原理

分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些

  • 任務(wù)執(zhí)行器根據(jù)配置的調(diào)度中心的地址,自動(dòng)注冊(cè)到調(diào)度中心

  • 達(dá)到任務(wù)觸發(fā)條件,調(diào)度中心下發(fā)任務(wù)

  • 執(zhí)行器基于線程池執(zhí)行任務(wù),并把執(zhí)行結(jié)果放入內(nèi)存隊(duì)列中、把執(zhí)行日志寫入日志文件中

  • 執(zhí)行器的回調(diào)線程消費(fèi)內(nèi)存隊(duì)列中的執(zhí)行結(jié)果,主動(dòng)上報(bào)給調(diào)度中心

  • 當(dāng)用戶在調(diào)度中心查看任務(wù)日志,調(diào)度中心請(qǐng)求任務(wù)執(zhí)行器,任務(wù)執(zhí)行器讀取任務(wù)日志文件并返回日志詳情

4 HA設(shè)計(jì)

4.1 調(diào)度中心高可用

調(diào)度中心支持多節(jié)點(diǎn)部署,基于數(shù)據(jù)庫(kù)行鎖保證同時(shí)只有一個(gè)調(diào)度中心節(jié)點(diǎn)觸發(fā)任務(wù)調(diào)度,參考com.xxl.job.admin.core.thread.JobScheduleHelper#start

Connection conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();

# 觸發(fā)任務(wù)調(diào)度

# 事務(wù)提交
 conn.commit();

4.2 任務(wù)調(diào)度高可用

  • 路由策略 調(diào)度中心基于路由策略路由選擇一個(gè)執(zhí)行器節(jié)點(diǎn)執(zhí)行任務(wù),XXL-JOB提供了如下路由策略保證任務(wù)調(diào)度高可用: 忙碌轉(zhuǎn)移策略: 下發(fā)任務(wù)前向執(zhí)行器節(jié)點(diǎn)發(fā)起rpc心跳請(qǐng)求查詢是否忙碌,如果執(zhí)行器節(jié)點(diǎn)返回忙碌則轉(zhuǎn)移到其他執(zhí)行器節(jié)點(diǎn)執(zhí)行(參考 com.xxl.job.admin.core.route.strategy.ExecutorRouteBusyover) 故障轉(zhuǎn)移策略: 下發(fā)任務(wù)前向執(zhí)行器節(jié)點(diǎn)發(fā)起rpc心跳請(qǐng)求查詢是否在線,如果執(zhí)行器節(jié)點(diǎn)沒(méi)返回或者返回不可用則轉(zhuǎn)移到其他執(zhí)行器節(jié)點(diǎn)執(zhí)行 (參考com.xxl.job.admin.core.route.strategy.ExecutorRouteFailover)

  • 阻塞處理策略 當(dāng)執(zhí)行器節(jié)點(diǎn)存在多個(gè)相同任務(wù)id的任務(wù)未執(zhí)行完成,則需要基于阻塞策略對(duì)任務(wù)進(jìn)行取舍: 串行策略:默認(rèn)策略,任務(wù)進(jìn)行排隊(duì)、丟棄舊任務(wù)策略丟棄新任務(wù)策略 (參考:com.xxl.job.core.biz.impl.ExecutorBizImpl#run)

同類框架比較

特性quartzelastic-job-litexxl-jobLTS
依賴MySQL、jdkjdk、zookeepermysql、jdkjdk、zookeeper、maven
高可用多節(jié)點(diǎn)部署,通過(guò)競(jìng)爭(zhēng)數(shù)據(jù)庫(kù)鎖來(lái)保證只有一個(gè)節(jié)點(diǎn)執(zhí)行任務(wù)通過(guò)zookeeper的注冊(cè)與發(fā)現(xiàn),可以動(dòng)態(tài)的添加服務(wù)器基于競(jìng)爭(zhēng)數(shù)據(jù)庫(kù)鎖保證只有一個(gè)節(jié)點(diǎn)執(zhí)行任務(wù),支持水平擴(kuò)容。可以手動(dòng)增加定時(shí)任務(wù),啟動(dòng)和暫停任務(wù),有監(jiān)控集群部署,可以動(dòng)態(tài)的添加服務(wù)器。可以手動(dòng)增加定時(shí)任務(wù),啟動(dòng)和暫停任務(wù)。有監(jiān)控
任務(wù)分片×
管理界面×
難易程度簡(jiǎn)單簡(jiǎn)單簡(jiǎn)單略復(fù)雜
高級(jí)功能-彈性擴(kuò)容,多種作業(yè)模式,失效轉(zhuǎn)移,運(yùn)行狀態(tài)收集,多線程處理數(shù)據(jù),冪等性,容錯(cuò)處理,spring命名空間支持彈性擴(kuò)容,分片廣播,故障轉(zhuǎn)移,Rolling實(shí)時(shí)日志,GLUE(支持在線編輯代碼,免發(fā)布),任務(wù)進(jìn)度監(jiān)控,任務(wù)依賴,數(shù)據(jù)加密,郵件報(bào)警,運(yùn)行報(bào)表,國(guó)際化支持spring,spring boot,業(yè)務(wù)日志記錄器,SPI擴(kuò)展支持,故障轉(zhuǎn)移,節(jié)點(diǎn)監(jiān)控,多樣化任務(wù)執(zhí)行結(jié)果支持,F(xiàn)ailStore容錯(cuò),動(dòng)態(tài)擴(kuò)容。
版本更新半年沒(méi)更新2年沒(méi)更新最近有更新1年沒(méi)更新

使用

快速上手

具體如何快速上手使用,官方文檔:http://www.xuxueli.com/xxl-job/ 已經(jīng)介紹得比較詳細(xì)和清楚,不再贅述

注意事項(xiàng)

  • 1 時(shí)鐘同步問(wèn)題 調(diào)度中心和任務(wù)執(zhí)行器需要時(shí)間同步,同步時(shí)間誤差需要在3分鐘內(nèi),否則拋出異常 參考:com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#invokeService

if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 3*60*1000) {
	xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit.");
	return xxlRpcResponse;
}
  • 2 時(shí)區(qū)問(wèn)題 任務(wù)由調(diào)度中心觸發(fā),按照在調(diào)度中心設(shè)置任務(wù)的cron表達(dá)式觸發(fā)時(shí),需要注意部署調(diào)度中心的機(jī)器所在的時(shí)區(qū),按照該時(shí)區(qū)定制化cron表達(dá)式

  • 3 任務(wù)執(zhí)行中服務(wù)宕掉問(wèn)題 調(diào)度中心完成任務(wù)下發(fā),執(zhí)行器在執(zhí)行任務(wù)的過(guò)程中,如果執(zhí)行器突然服務(wù)宕掉,會(huì)導(dǎo)致任務(wù)的執(zhí)行問(wèn)題在調(diào)度中心是執(zhí)行中,調(diào)度中心并不會(huì)發(fā)起失敗重試。即使任務(wù)設(shè)置了超時(shí)時(shí)間,執(zhí)行器宕掉導(dǎo)致導(dǎo)致任務(wù)長(zhǎng)時(shí)間未執(zhí)行完成,調(diào)度中心界面也不會(huì)看到任務(wù)超時(shí),因?yàn)槿蝿?wù)超時(shí)是由執(zhí)行器檢測(cè)的并上報(bào)給調(diào)度中心的

因此遇到任務(wù)長(zhǎng)時(shí)間未執(zhí)行完成,可以關(guān)注是否發(fā)生了執(zhí)行器突然服務(wù)宕掉

  • 4 優(yōu)雅停機(jī)問(wèn)題 執(zhí)行器執(zhí)行任務(wù)基于線程池異步執(zhí)行,當(dāng)需要重啟時(shí)需要注意線程池中還有未執(zhí)行完成任務(wù)的問(wèn)題,需要優(yōu)雅停機(jī),可以直接基于XxlJobExecutor.destroy()優(yōu)雅停機(jī),注意該方法在v2.0.2之前的版本存在bug導(dǎo)致無(wú)法優(yōu)雅停機(jī),v2.0.2及之后的版本才修復(fù)(參考:https://github.com/xuxueli/xxl-job/issues/727)

  • 5 失敗重試問(wèn)題 當(dāng)執(zhí)行器節(jié)點(diǎn)部分服務(wù)不可用,例如節(jié)點(diǎn)磁盤損壞,但在調(diào)度中心仍然處于在線時(shí),調(diào)度中心仍可能基于路由策略(包括故障轉(zhuǎn)移策略)路由到該未下線的節(jié)點(diǎn),并不斷重試,不斷失敗,導(dǎo)致重試次數(shù)耗盡。所以路由策略盡量不要采用固定化策略,例如固定第一個(gè)、固定最后一個(gè)

感謝各位的閱讀,以上就是“分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)分布式任務(wù)調(diào)度平臺(tái)XXL-JOB的功能有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI