什么是xxl-job(1)
?首先 我相信大部分的人都會(huì)使用定時(shí)任務(wù)框架吧,那么大家應(yīng)該是經(jīng)常使用spring提供的傳統(tǒng)的定時(shí)任務(wù)@Scheduled,但是他會(huì)存在一些問題:如下
|
|
|
|
那么我們可以使用一個(gè)分布式調(diào)度的框架:xxl-job 分布式任務(wù)調(diào)度框架
源碼地址:https://gitee.com/xuxueli0323/xxl-job
文檔地址:https://www.xuxueli.com/xxl-job/
什么是分布式任務(wù)調(diào)度
特性:
-
簡(jiǎn)單靈活?:提供Web頁面對(duì)任務(wù)進(jìn)行管理,管理系統(tǒng)支持用戶管理、權(quán)限控制; 支持容器部署; 支持通過通用HTTP提供跨平臺(tái)任務(wù)調(diào)度;
-
豐富的任務(wù)管理功能: 支持頁面對(duì)任務(wù)CRUD操作; 支持在頁面編寫腳本任務(wù)、命令行任務(wù)、Java代碼任務(wù)并執(zhí)行; 支持任務(wù)級(jí)聯(lián)編排,父任務(wù)執(zhí)行結(jié)束后觸發(fā)子任務(wù)執(zhí)行; 支持設(shè)置指定任務(wù)執(zhí)行節(jié)點(diǎn)路由策略,包括輪詢、隨機(jī)、廣播、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等; 支持Cron方式、任務(wù)依賴、調(diào)度中心API接口方式觸發(fā)任務(wù)執(zhí)行
-
高性能 任務(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í)來不及執(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í)行日志;
當(dāng)前軟件的架構(gòu)已經(jīng)開始向分布式架構(gòu)轉(zhuǎn)變,將單體結(jié)構(gòu)拆分為若干服務(wù),服務(wù)之間通過網(wǎng)絡(luò)交互來完成業(yè)務(wù)處理。在分布式架構(gòu)下,一個(gè)服務(wù)往往會(huì)部署多個(gè)實(shí)例來運(yùn)行我們的業(yè)務(wù),如果在這種分布式系統(tǒng)環(huán)境下運(yùn)行任務(wù)調(diào)度,我們稱之為分布式任務(wù)調(diào)度。
?
將任務(wù)調(diào)度程序分布式構(gòu)建,這樣就可以具有分布式系統(tǒng)的特點(diǎn),并且提高任務(wù)的調(diào)度處理能力:
1、并行任務(wù)調(diào)度
并行任務(wù)調(diào)度實(shí)現(xiàn)靠多線程,如果有大量任務(wù)需要調(diào)度,此時(shí)光靠多線程就會(huì)有瓶頸了,因?yàn)橐慌_(tái)計(jì)算機(jī)CPU的處理能力是有限的。
如果將任務(wù)調(diào)度程序分布式部署,每個(gè)結(jié)點(diǎn)還可以部署為集群,這樣就可以讓多臺(tái)計(jì)算機(jī)共同去完成任務(wù)調(diào)度,我們可以將任務(wù)分割為若干個(gè)分片,由不同的實(shí)例并行執(zhí)行,來提高任務(wù)調(diào)度的處理效率。
2、高可用
若某一個(gè)實(shí)例宕機(jī),不影響其他實(shí)例來執(zhí)行任務(wù)。
3、彈性擴(kuò)容
當(dāng)集群中增加實(shí)例就可以提高并執(zhí)行任務(wù)的處理效率。
4、任務(wù)管理與監(jiān)測(cè)
對(duì)系統(tǒng)中存在的所有定時(shí)任務(wù)進(jìn)行統(tǒng)一的管理及監(jiān)測(cè)。讓開發(fā)人員及運(yùn)維人員能夠時(shí)刻了解任務(wù)執(zhí)行情況,從而做出快速的應(yīng)急處理響應(yīng)。
分布式任務(wù)調(diào)度的問題:
當(dāng)任務(wù)調(diào)度以集群方式部署,同一個(gè)任務(wù)調(diào)度可能會(huì)執(zhí)行多次,例如:電商系統(tǒng)定期發(fā)放優(yōu)惠券,就可能重復(fù)發(fā)放優(yōu)惠券,對(duì)公司造成損失,信用卡還款提醒就會(huì)重復(fù)執(zhí)行多次,給用戶造成煩惱,所以我們需要控制相同的任務(wù)在多個(gè)運(yùn)行實(shí)例上只執(zhí)行一次。常見解決方案:
ZooKeeper選舉,利用ZooKeeper對(duì)Leader實(shí)例執(zhí)行定時(shí)任務(wù),執(zhí)行定時(shí)任務(wù)的時(shí)候判斷自己是否是Leader,如果不是則不執(zhí)行,如果是則執(zhí)行業(yè)務(wù)邏輯,這樣也能達(dá)到目的。
總結(jié)
以上是生活随笔為你收集整理的什么是xxl-job(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于setTimeout和setInte
- 下一篇: 买车选颜色纠结,汽车漆面养护还纠结?!