XXL-Job分布式任务调度
分布式情況下定時(shí)任務(wù)會(huì)出現(xiàn)哪些問題?
分布式集群的情況下,怎么保證定時(shí)任務(wù)不被重復(fù)執(zhí)行
分布式定時(shí)任務(wù)解決方案
①使用zookeeper實(shí)現(xiàn)分布式鎖 缺點(diǎn)(需要?jiǎng)?chuàng)建臨時(shí)節(jié)點(diǎn)、和事件通知不易于擴(kuò)展)
②使用配置文件做一個(gè)開關(guān)? 缺點(diǎn)發(fā)布后,需要重啟
③數(shù)據(jù)庫(kù)唯一約束,缺點(diǎn)效率低
④使用分布式任務(wù)調(diào)度平臺(tái)XXLJOB、Elastric-Job、TBSchedule
XXLJOB介紹
1、簡(jiǎn)單:支持通過Web頁(yè)面對(duì)任務(wù)進(jìn)行CRUD操作,操作簡(jiǎn)單,一分鐘上手;
2、動(dòng)態(tài):支持動(dòng)態(tài)修改任務(wù)狀態(tài)、暫停/恢復(fù)任務(wù),以及終止運(yùn)行中任務(wù),即時(shí)生效;
3、調(diào)度中心HA(中心式):調(diào)度采用中心式設(shè)計(jì),“調(diào)度中心”基于集群Quartz實(shí)現(xiàn),可保證調(diào)度中心HA;
4、執(zhí)行器HA(分布式):任務(wù)分布式執(zhí)行,任務(wù)"執(zhí)行器"支持集群部署,可保證任務(wù)執(zhí)行HA;
5、任務(wù)Failover:執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇"故障轉(zhuǎn)移"情況下調(diào)度失敗時(shí)將會(huì)平滑切換執(zhí)行器進(jìn)行Failover;
6、一致性:“調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會(huì)觸發(fā)一次執(zhí)行;
7、自定義任務(wù)參數(shù):支持在線配置調(diào)度任務(wù)入?yún)?#xff0c;即時(shí)生效;
8、調(diào)度線程池:調(diào)度系統(tǒng)多線程觸發(fā)調(diào)度運(yùn)行,確保調(diào)度精確執(zhí)行,不被堵塞;
9、彈性擴(kuò)容縮容:一旦有新執(zhí)行器機(jī)器上線或者下線,下次調(diào)度時(shí)將會(huì)重新分配任務(wù);
10、郵件報(bào)警:任務(wù)失敗時(shí)支持郵件報(bào)警,支持配置多郵件地址群發(fā)報(bào)警郵件;
11、狀態(tài)監(jiān)控:支持實(shí)時(shí)監(jiān)控任務(wù)進(jìn)度;
12、Rolling執(zhí)行日志:支持在線查看調(diào)度結(jié)果,并且支持以Rolling方式實(shí)時(shí)查看執(zhí)行器輸出的完整的執(zhí)行日志;
13、GLUE:提供Web IDE,支持在線開發(fā)任務(wù)邏輯代碼,動(dòng)態(tài)發(fā)布,實(shí)時(shí)編譯生效,省略部署上線的過程。支持30個(gè)版本的歷史版本回溯。
14、數(shù)據(jù)加密:調(diào)度中心和執(zhí)行器之間的通訊進(jìn)行數(shù)據(jù)加密,提升調(diào)度信息安全性;
15、任務(wù)依賴:支持配置子任務(wù)依賴,當(dāng)父任務(wù)執(zhí)行結(jié)束且執(zhí)行成功后將會(huì)主動(dòng)觸發(fā)一次子任務(wù)的執(zhí)行, 多個(gè)子任務(wù)用逗號(hào)分隔;
16、推送maven中央倉(cāng)庫(kù): 將會(huì)把最新穩(wěn)定版推送到maven中央倉(cāng)庫(kù), 方便用戶接入和使用;
17、任務(wù)注冊(cè): 執(zhí)行器會(huì)周期性自動(dòng)注冊(cè)任務(wù), 調(diào)度中心將會(huì)自動(dòng)發(fā)現(xiàn)注冊(cè)的任務(wù)并觸發(fā)執(zhí)行。同時(shí),也支持手動(dòng)錄入執(zhí)行器地址;
18、路由策略:執(zhí)行器集群部署時(shí)提供豐富的路由策略,包括:第一個(gè)、最后一個(gè)、輪詢、隨機(jī)、一致性HASH、最不經(jīng)常使用、最近最久未使用、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等;
19、運(yùn)行報(bào)表:支持實(shí)時(shí)查看運(yùn)行數(shù)據(jù),如任務(wù)數(shù)量、調(diào)度次數(shù)、執(zhí)行器數(shù)量等;以及調(diào)度報(bào)表,如調(diào)度日期分布圖,調(diào)度成功分布圖等;
20、腳本任務(wù):支持以GLUE模式開發(fā)和運(yùn)行腳本任務(wù),包括Shell、Python等類型腳本;
21、阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時(shí)的處理策略,策略包括:單機(jī)串行(默認(rèn))、丟棄后續(xù)調(diào)度、覆蓋之前調(diào)度;
22、失敗處理策略;調(diào)度失敗時(shí)的處理策略,策略包括:失敗告警(默認(rèn))、失敗重試;
23、分片廣播任務(wù):執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇"分片廣播"情況下,一次任務(wù)調(diào)度將會(huì)廣播觸發(fā)對(duì)應(yīng)集群中所有執(zhí)行器執(zhí)行一次任務(wù),同時(shí)傳遞分片參數(shù);可根據(jù)分片參數(shù)開發(fā)分片任務(wù);
24、動(dòng)態(tài)分片:分片廣播任務(wù)以執(zhí)行器為維度進(jìn)行分片,支持動(dòng)態(tài)擴(kuò)容執(zhí)行器集群從而動(dòng)態(tài)增加分片數(shù)量,協(xié)同進(jìn)行業(yè)務(wù)處理;在進(jìn)行大數(shù)據(jù)量業(yè)務(wù)操作時(shí)可顯著提升任務(wù)處理能力和速度。
25、事件觸發(fā):除了"Cron方式"和"任務(wù)依賴方式"觸發(fā)任務(wù)執(zhí)行之外,支持基于事件的觸發(fā)任務(wù)方式。調(diào)度中心提供觸發(fā)任務(wù)單次執(zhí)行的API服務(wù),可根據(jù)業(yè)務(wù)事件靈活觸發(fā)。
?
XXLJOBGitHub地址
https://github.com/xuxueli/xxl-job
?
文檔
http://www.xuxueli.com/xxl-job/#/?id=_21-%e5%88%9d%e5%a7%8b%e5%8c%96%e8%b0%83%e5%ba%a6%e6%95%b0%e6%8d%ae%e5%ba%93
傳統(tǒng)定時(shí)任務(wù)特征: 單點(diǎn)系統(tǒng)(Job不需集群)?
如果定時(shí)Job在高并發(fā)情況下宕機(jī)怎么辦?
定時(shí)任務(wù)代碼 和 業(yè)務(wù)執(zhí)行的 服務(wù)器獨(dú)立的? 獨(dú)立的Jvm
? ? ?如果同一時(shí)間點(diǎn)執(zhí)行多個(gè)任務(wù),考慮高并發(fā)。同時(shí)執(zhí)行的情況
解決方案: 心跳檢測(cè)自動(dòng)重啟,補(bǔ)償機(jī)制(每個(gè)任務(wù)打一個(gè)小標(biāo)記) 定時(shí)任務(wù)在執(zhí)行時(shí)候突然報(bào)錯(cuò),日志紀(jì)律,跳過繼續(xù)執(zhí)行。
再使用定時(shí)Jbo掃描日志記錄,進(jìn)程補(bǔ)償信息。
?
?
定時(shí)任務(wù) 三個(gè)war包 分別放在三臺(tái)服務(wù)器上。定時(shí)Job可能會(huì)重復(fù)執(zhí)行三次。分布式Job冪等性。
? ? ?1、使用zk實(shí)現(xiàn)分布式鎖
? ? ? ? 只有獲取到鎖的 才可以執(zhí)行Job (效率低)
? ? ?2、配置文件中加啟動(dòng)定時(shí)Job的開關(guān)
? ? ? 三個(gè)war包代碼相同。 war1 加開關(guān)flag=true? ??war2 加開關(guān)flag=fasle??war3 加開關(guān)flag=true? ?為true的才可以執(zhí)行
? ? 3、啟動(dòng)時(shí)候使用數(shù)據(jù)庫(kù)唯一標(biāo)識(shí)
? ? ? ? ?啟動(dòng)時(shí)候 表里插入數(shù)據(jù) 成功的才可以執(zhí)行?
?
分布式任務(wù)調(diào)度平臺(tái)推薦使用
?XXL_Job? 和 ELastric-Job(依賴zk)
?
?
保證冪等性
1、支持Job集群(前提保證冪等性) Jbo負(fù)載均衡輪詢機(jī)制
比如:
第一次 8080
第二次 8081
第三次 8082
2、支持Job補(bǔ)償 Job失敗,重試,多次失敗發(fā)郵件。
3、支持Job日志記錄
4、動(dòng)態(tài)配置定時(shí)規(guī)則,傳統(tǒng)定時(shí)Jbo觸發(fā)規(guī)則寫死,采用動(dòng)態(tài)方式。
?
XXL-Job原理:
? ?執(zhí)行器:定時(shí)Job實(shí)際執(zhí)行的服務(wù)器地址
? ?任務(wù)管理:定時(shí)任務(wù)規(guī)則,路由策略,允許模式等
?
步驟:
①? 部署: xxl-job-admin? 作為注冊(cè)中心
②? 創(chuàng)建執(zhí)行器(具體調(diào)度地址) 可以支持集群
③? 配置文件需要填寫xxl-job注冊(cè)中心地址
④? 每個(gè)具體執(zhí)行job服務(wù)器需要?jiǎng)?chuàng)建一個(gè)netty連接端口號(hào)
⑤? 需要執(zhí)行job的任務(wù)類,集成IJobHandler抽象類注冊(cè)到j(luò)ob容器中
⑥? Execute方法中編寫具體job任務(wù)
? ?
搭建XXL-Job Admin平臺(tái):
?job服務(wù)器 通過這個(gè)框架創(chuàng)建的
平臺(tái)里面通過一系列步驟:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
步驟:
1、XXL-Job admin 平臺(tái)創(chuàng)建執(zhí)行器(Job實(shí)際執(zhí)行地址)
2、XXL-Job admin 平臺(tái)創(chuàng)建任務(wù),填寫對(duì)應(yīng)的執(zhí)行器
3、Jbo服務(wù)器代碼中,使用JobHandler標(biāo)識(shí)該類為Job執(zhí)行方法
?
Job服務(wù)器啟動(dòng)時(shí)候, 把信息注冊(cè)到 XXL-Job admin平臺(tái)
如果任何一個(gè)任務(wù)執(zhí)行時(shí)候,現(xiàn)在xxl-job admin平臺(tái)觸發(fā)一次,獲取到任務(wù)的執(zhí)行器(地址),直接調(diào)用job服務(wù)器地址。實(shí)現(xiàn)job管理。
?
?
如果有任務(wù)需要執(zhí)行的時(shí)候,先再XXL-Job admin執(zhí)行一次,獲取任務(wù)中執(zhí)行器
?
轉(zhuǎn)載于:https://www.cnblogs.com/toov5/p/9975833.html
總結(jié)
以上是生活随笔為你收集整理的XXL-Job分布式任务调度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate基础学习2
- 下一篇: 实验三编程、编译、连接、跟踪