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