分散式任務排程平臺搭建
分散式情況下定時任務會出現哪些問題?
分散式叢集的情況下,怎麼保證定時任務不被重複執行
分散式定時任務解決方案
①使用zookeeper實現分散式鎖 缺點(需要建立臨時節點、和事件通知不易於擴充套件)
②使用配置檔案做一個開關 缺點發布後,需要重啟
③資料庫唯一約束,缺點效率低
④使用分散式任務排程平臺XXLJOB、Elastric-Job、TBSchedule
XXLJOB介紹
1、簡單:支援通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;
2、動態:支援動態修改任務狀態、暫停/恢復任務,以及終止執行中任務,即時生效;
3、排程中心HA(中心式):排程採用中心式設計,“排程中心”基於叢集Quartz實現,可保證排程中心HA;
4、執行器HA(分散式):任務分散式執行,任務"執行器"支援叢集部署,可保證任務執行HA;
5、任務Failover:執行器叢集部署時,任務路由策略選擇"故障轉移"情況下排程失敗時將會平滑切換執行器進行Failover;
6、一致性:“排程中心”通過DB鎖保證叢集分散式排程的一致性, 一次任務排程只會觸發一次執行;
7、自定義任務引數:支援線上配置排程任務入參,即時生效;
8、排程執行緒池:排程系統多執行緒觸發排程執行,確保排程精確執行,不被堵塞;
9、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次排程時將會重新分配任務;
10、郵件報警:任務失敗時支援郵件報警,支援配置多郵件地址群發報警郵件;
11、狀態監控:支援實時監控任務進度;
12、Rolling執行日誌:支援線上檢視排程結果,並且支援以Rolling方式實時檢視執行器輸出的完整的執行日誌;
13、GLUE:提供Web IDE,支援線上開發任務邏輯程式碼,動態釋出,實時編譯生效,省略部署上線的過程。支援30個版本的歷史版本回溯。
14、資料加密:排程中心和執行器之間的通訊進行資料加密,提升排程資訊保安性;
15、任務依賴:支援配置子任務依賴,當父任務執行結束且執行成功後將會主動觸發一次子任務的執行, 多個子任務用逗號分隔;
16、推送maven中央倉庫: 將會把最新穩定版推送到maven中央倉庫, 方便使用者接入和使用;
17、任務註冊: 執行器會週期性自動註冊任務, 排程中心將會自動發現註冊的任務並觸發執行。同時,也支援手動錄入執行器地址;
18、路由策略:執行器叢集部署時提供豐富的路由策略,包括:第一個、最後一個、輪詢、隨機、一致性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;
19、執行報表:支援實時檢視執行資料,如任務數量、排程次數、執行器數量等;以及排程報表,如排程日期分佈圖,排程成功分佈圖等;
20、指令碼任務:支援以GLUE模式開發和執行指令碼任務,包括Shell、Python等型別指令碼;
21、阻塞處理策略:排程過於密集執行器來不及處理時的處理策略,策略包括:單機序列(預設)、丟棄後續排程、覆蓋之前排程;
22、失敗處理策略;排程失敗時的處理策略,策略包括:失敗告警(預設)、失敗重試;
23、分片廣播任務:執行器叢集部署時,任務路由策略選擇"分片廣播"情況下,一次任務排程將會廣播觸發對應叢集中所有執行器執行一次任務,同時傳遞分片引數;可根據分片引數開發分片任務;
24、動態分片:分片廣播任務以執行器為維度進行分片,支援動態擴容執行器叢集從而動態增加分片數量,協同進行業務處理;在進行大資料量業務操作時可顯著提升任務處理能力和速度。
25、事件觸發:除了"Cron方式"和"任務依賴方式"觸發任務執行之外,支援基於事件的觸發任務方式。排程中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發。
XXLJOBGitHub地址
https://github.com/xuxueli/xxl-job
文件
傳統定時任務特徵: 單點系統(Job不需叢集)
如果定時Job在高併發情況下宕機怎麼辦?
定時任務程式碼 和 業務執行的 伺服器獨立的 獨立的Jvm
如果同一時間點執行多個任務,考慮高併發。同時執行的情況
解決方案: 心跳檢測自動重啟,補償機制(每個任務打一個小標記) 定時任務在執行時候突然報錯,日誌紀律,跳過繼續執行。
再使用定時Jbo掃描日誌記錄,程序補償資訊。
定時任務 三個war包 分別放在三臺伺服器上。定時Job可能會重複執行三次。分散式Job冪等性。
1、使用zk實現分散式鎖
只有獲取到鎖的 才可以執行Job (效率低)
2、配置檔案中加啟動定時Job的開關
三個war包程式碼相同。 war1 加開關flag=true war2 加開關flag=fasle war3 加開關flag=true 為true的才可以執行
3、啟動時候使用資料庫唯一標識
啟動時候 表裡插入資料 成功的才可以執行
分散式任務排程平臺推薦使用
XXL_Job 和 ELastric-Job(依賴zk)
保證冪等性
1、支援Job叢集(前提保證冪等性) Jbo負載均衡輪詢機制
比如:
第一次 8080
第二次 8081
第三次 8082
2、支援Job補償 Job失敗,重試,多次失敗發郵件。
3、支援Job日誌記錄
4、動態配置定時規則,傳統定時Jbo出發規則寫死,採用動態方式。
XXL-Job原理:
執行器:定時Job實際執行的伺服器地址
任務管理:定時任務規則,路由策略,允許模式等
步驟:
① 部署: xxl-job-admin 作為註冊中心
② 建立執行器(具體排程地址) 可以支援叢集
③ 配置檔案需要填寫xxl-job註冊中心地址
④ 每個具體執行job伺服器需要建立一個netty連線埠號
⑤ 需要執行job的任務類,整合IJobHandler抽象類註冊到job容器中
⑥ Execute方法中編寫具體job任務
1、XXL-Job admin 平臺建立執行器(Job實際執行地址)
2、XXL-Job admin 平臺建立任務,填寫對應的執行器
3、Jbo伺服器程式碼中,使用JobHandler表示該類為Job執行方法
如果有任務需要執行的時候,先再XXL-Job admin執行一次,獲取任務中執行器
下載:
https://github.com/xuxueli/xxl-job
下載 然後倒入到自己的工程裡面
引入後:
匯入資料:跑一邊
匯入:
修改:
把admin引入
方法:
右鍵:
點選add and remove 即可
啟動:
訪問:http://localhost:8080/xxl-job-admin/
看客戶端的demo