elastic-job 和 xxl-job 的对比
綜合對比
許雪里 軟件作者?
05/23 18:47
#xxl-job# 即將發(fā)布的新版本,將會自研觸發(fā)組件,移除quartz依賴,并精簡掉11張表,大大降低線程和內(nèi)存開銷。在第三方依賴上不斷做減法,在功能上不斷做加法。 感謝quartz在歷史版本中對xxl-job提供的支持,但是它逐漸跟不上xxl-job的發(fā)展,xxl-job即將踏上新的道路 ……
XXL-JOB v2.1.0,分布式任務(wù)調(diào)度平臺
? 1 ? ? xuxueli · 22 天前 · 1260 次點(diǎn)擊
v2.0.2 Release Notes
1、自研調(diào)度組件,移除 quartz 依賴:一方面是為了精簡系統(tǒng)降低冗余依賴,另一方面是為了提供系統(tǒng)的可控度與穩(wěn)定性;
觸發(fā):單節(jié)點(diǎn)周期性觸發(fā),運(yùn)行事件如 delayqueue ;
調(diào)度:集群競爭,負(fù)載方式協(xié)同處理,鎖競爭-更新觸發(fā)信息-推送時(shí)間輪-鎖釋放-鎖競爭;
2、底層表結(jié)構(gòu)重構(gòu):移除 11 張 quartz 相關(guān)表,并對現(xiàn)有表結(jié)構(gòu)優(yōu)化梳理;
3、任務(wù)日志主鍵調(diào)整為 long 數(shù)據(jù)類型,防止海量日志情況下數(shù)據(jù)溢出;
4、底層線程模型重構(gòu):移除 Quartz 線程池,降低系統(tǒng)線程與內(nèi)存開銷;
5、用戶管理:支持在線管理系統(tǒng)用戶,存在管理員、普通用戶兩種角色;
6、權(quán)限管理:執(zhí)行器維度進(jìn)行權(quán)限控制,管理員擁有全量權(quán)限,普通用戶需要分配執(zhí)行器權(quán)限后才允許相關(guān)操作;
7、調(diào)度線程池參數(shù)調(diào)優(yōu);
8、注冊表索引優(yōu)化,緩解鎖表問題;
9、新增 Jboot 執(zhí)行器 Sample 示例項(xiàng)目;
10、任務(wù)列表優(yōu)化,支持根據(jù) "任務(wù)狀態(tài)"、"負(fù)責(zé)人" 屬性篩選任務(wù);
11、任務(wù)日志列表交互優(yōu)化,操作按鈕合并為分割按鈕;
12、項(xiàng)目依賴升級至較新穩(wěn)定版本,如 spring、springboot、groovy、xxl-rpc 等等;并清理冗余 POM ;
13、升級 xxl-rpc 至較新版本,修復(fù)代理服務(wù)初始化時(shí)遠(yuǎn)程服務(wù)不可用導(dǎo)致長連冗余創(chuàng)建的問題;
14、首頁調(diào)度報(bào)表的日期排序在 TIDB 下亂序問題修復(fù);
15、調(diào)度中心與執(zhí)行器雙向通訊超時(shí)時(shí)間調(diào)整為 3s ;
16、調(diào)度組件銷毀流程優(yōu)化,先停止調(diào)度線程,然后等待時(shí)間輪內(nèi)存量任務(wù)處理完成,最終銷毀時(shí)間輪線程;
17、執(zhí)行器回調(diào)線程優(yōu)化,回調(diào)地址為空時(shí)銷毀問題修復(fù);
18、HttpJobHandler 優(yōu)化,響應(yīng)數(shù)據(jù)指定 UTF-8 格式,避免中文亂碼;
19、代碼優(yōu)化,ConcurrentHashMap 變量類型改為 ConcurrentMap,避免因不同版本實(shí)現(xiàn)不同導(dǎo)致的兼容性問題;
簡介
XXL-JOB 是一個(gè)輕量級分布式任務(wù)調(diào)度平臺,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴(kuò)展。現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。
?
輸入圖片說明
?
特性
1、簡單:支持通過 Web 頁面對任務(wù)進(jìn)行 CRUD 操作,操作簡單,一分鐘上手;
2、動(dòng)態(tài):支持動(dòng)態(tài)修改任務(wù)狀態(tài)、啟動(dòng) /停止任務(wù),以及終止運(yùn)行中任務(wù),即時(shí)生效;
3、調(diào)度中心 HA (中心式):調(diào)度采用中心式設(shè)計(jì),“調(diào)度中心”自研調(diào)度組件并支持集群部署,可保證調(diào)度中心 HA ;
4、執(zhí)行器 HA (分布式):任務(wù)分布式執(zhí)行,任務(wù)"執(zhí)行器"支持集群部署,可保證任務(wù)執(zhí)行 HA ;
5、注冊中心: 執(zhí)行器會周期性自動(dòng)注冊任務(wù), 調(diào)度中心將會自動(dòng)發(fā)現(xiàn)注冊的任務(wù)并觸發(fā)執(zhí)行。同時(shí),也支持手動(dòng)錄入執(zhí)行器地址;
6、彈性擴(kuò)容縮容:一旦有新執(zhí)行器機(jī)器上線或者下線,下次調(diào)度時(shí)將會重新分配任務(wù);
7、路由策略:執(zhí)行器集群部署時(shí)提供豐富的路由策略,包括:第一個(gè)、最后一個(gè)、輪詢、隨機(jī)、一致性 HASH、最不經(jīng)常使用、最近最久未使用、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等;
8、故障轉(zhuǎn)移:任務(wù)路由策略選擇"故障轉(zhuǎn)移"情況下,如果執(zhí)行器集群中某一臺機(jī)器故障,將會自動(dòng) Failover 切換到一臺正常的執(zhí)行器發(fā)送調(diào)度請求。
9、阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時(shí)的處理策略,策略包括:單機(jī)串行(默認(rèn))、丟棄后續(xù)調(diào)度、覆蓋之前調(diào)度;
10、任務(wù)超時(shí)控制:支持自定義任務(wù)超時(shí)時(shí)間,任務(wù)運(yùn)行超時(shí)將會主動(dòng)中斷任務(wù);
11、任務(wù)失敗重試:支持自定義任務(wù)失敗重試次數(shù),當(dāng)任務(wù)失敗時(shí)將會按照預(yù)設(shè)的失敗重試次數(shù)主動(dòng)進(jìn)行重試;其中分片任務(wù)支持分片粒度的失敗重試;
12、任務(wù)失敗告警;默認(rèn)提供郵件方式失敗告警,同時(shí)預(yù)留擴(kuò)展接口,可方便的擴(kuò)展短信、釘釘?shù)雀婢绞?#xff1b;
13、分片廣播任務(wù):執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇"分片廣播"情況下,一次任務(wù)調(diào)度將會廣播觸發(fā)集群中所有執(zhí)行器執(zhí)行一次任務(wù),可根據(jù)分片參數(shù)開發(fā)分片任務(wù);
14、動(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ù)處理能力和速度。
15、事件觸發(fā):除了"Cron 方式"和"任務(wù)依賴方式"觸發(fā)任務(wù)執(zhí)行之外,支持基于事件的觸發(fā)任務(wù)方式。調(diào)度中心提供觸發(fā)任務(wù)單次執(zhí)行的 API 服務(wù),可根據(jù)業(yè)務(wù)事件靈活觸發(fā)。
16、任務(wù)進(jìn)度監(jiān)控:支持實(shí)時(shí)監(jiān)控任務(wù)進(jìn)度;
17、Rolling 實(shí)時(shí)日志:支持在線查看調(diào)度結(jié)果,并且支持以 Rolling 方式實(shí)時(shí)查看執(zhí)行器輸出的完整的執(zhí)行日志;
18、GLUE:提供 Web IDE,支持在線開發(fā)任務(wù)邏輯代碼,動(dòng)態(tài)發(fā)布,實(shí)時(shí)編譯生效,省略部署上線的過程。支持 30 個(gè)版本的歷史版本回溯。
19、腳本任務(wù):支持以 GLUE 模式開發(fā)和運(yùn)行腳本任務(wù),包括 Shell、Python、NodeJS、PHP、PowerShell 等類型腳本;
20、命令行任務(wù):原生提供通用命令行任務(wù) Handler ( Bean 任務(wù),"CommandJobHandler");業(yè)務(wù)方只需要提供命令行即可;
21、任務(wù)依賴:支持配置子任務(wù)依賴,當(dāng)父任務(wù)執(zhí)行結(jié)束且執(zhí)行成功后將會主動(dòng)觸發(fā)一次子任務(wù)的執(zhí)行, 多個(gè)子任務(wù)用逗號分隔;
22、一致性:“調(diào)度中心”通過 DB 鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會觸發(fā)一次執(zhí)行;
23、自定義任務(wù)參數(shù):支持在線配置調(diào)度任務(wù)入?yún)?#xff0c;即時(shí)生效;
24、調(diào)度線程池:調(diào)度系統(tǒng)多線程觸發(fā)調(diào)度運(yùn)行,確保調(diào)度精確執(zhí)行,不被堵塞;
25、數(shù)據(jù)加密:調(diào)度中心和執(zhí)行器之間的通訊進(jìn)行數(shù)據(jù)加密,提升調(diào)度信息安全性;
26、郵件報(bào)警:任務(wù)失敗時(shí)支持郵件報(bào)警,支持配置多郵件地址群發(fā)報(bào)警郵件;
27、推送 maven 中央倉庫: 將會把最新穩(wěn)定版推送到 maven 中央倉庫, 方便用戶接入和使用;
28、運(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)度成功分布圖等;
29、全異步:任務(wù)調(diào)度流程全異步化設(shè)計(jì)實(shí)現(xiàn),如異步調(diào)度、異步運(yùn)行、異步回調(diào)等,有效對密集調(diào)度進(jìn)行流量削峰,理論上支持任意時(shí)長任務(wù)的運(yùn)行;
30、跨平臺:原生提供通用 HTTP 任務(wù) Handler ( Bean 任務(wù),"HttpJobHandler");業(yè)務(wù)方只需要提供 HTTP 鏈接即可,不限制語言、平臺;
31、國際化:調(diào)度中心支持國際化設(shè)置,提供中文、英文兩種可選語言,默認(rèn)為中文;
32、容器化:提供官方 docker 鏡像,并實(shí)時(shí)更新推送 dockerhub,進(jìn)一步實(shí)現(xiàn)產(chǎn)品開箱即用;
33、線程池隔離:調(diào)度線程池進(jìn)行隔離拆分,慢任務(wù)自動(dòng)降級進(jìn)入"Slow"線程池,避免耗盡調(diào)度線程,提高系統(tǒng)穩(wěn)定性;;
34、用戶管理:支持在線管理系統(tǒng)用戶,存在管理員、普通用戶兩種角色;
35、權(quán)限控制:執(zhí)行器維度進(jìn)行權(quán)限控制,管理員擁有全量權(quán)限,普通用戶需要分配執(zhí)行器權(quán)限后才允許相關(guān)操作;
?
總結(jié)和結(jié)論
共同點(diǎn): E-Job和X-job都有廣泛的用戶基礎(chǔ)和完整的技術(shù)文檔,都能滿足定時(shí)任務(wù)的基本功能需求。
不同點(diǎn)
X-Job 側(cè)重的業(yè)務(wù)實(shí)現(xiàn)的簡單和管理的方便,學(xué)習(xí)成本簡單,失敗策略和路由策略豐富。推薦使用在“用戶基數(shù)相對少,服務(wù)器數(shù)量在一定范圍內(nèi)”的情景下使用
E-Job 關(guān)注的是數(shù)據(jù),增加了彈性擴(kuò)容和數(shù)據(jù)分片的思路,以便于更大限度的利用分布式服務(wù)器的資源。但是學(xué)習(xí)成本相對高些,推薦在“數(shù)據(jù)量龐大,且部署服務(wù)器數(shù)量較多”時(shí)使用
支持集群部署
X-Job : 集群部署唯一要求為:保證每個(gè)集群節(jié)點(diǎn)配置(db和登陸賬號等)保持一致。調(diào)度中心通過db配置區(qū)分不同集群。
執(zhí)行器支持集群部署,提升調(diào)度系統(tǒng)可用性,同時(shí)提升任務(wù)處理能力。集群部署唯一要求為:保證集群中每個(gè)執(zhí)行器的配置項(xiàng) “xxl.job.admin.addresses/調(diào)度中心地址” 保持一致,執(zhí)行器根據(jù)該配置進(jìn)行執(zhí)行器自動(dòng)注冊等操作。
E-Job : 重寫Quartz基于數(shù)據(jù)庫的分布式功能,改用Zookeeper實(shí)現(xiàn)注冊中心
作業(yè)注冊中心: 基于Zookeeper和其客戶端Curator實(shí)現(xiàn)的全局作業(yè)注冊控制中心。用于注冊,控制和協(xié)調(diào)分布式作業(yè)執(zhí)行。
?
最新版本X-job 基于時(shí)間輪,使用數(shù)據(jù)庫實(shí)現(xiàn)注冊中心,E-Job ?基于 quartz,改用Zookeeper實(shí)現(xiàn)注冊中心
多節(jié)點(diǎn)部署時(shí)任務(wù)不能重復(fù)執(zhí)行
X-Job : 使用Quartz基于數(shù)據(jù)庫的分布式功能
E-Job ?: 將任務(wù)拆分為n個(gè)任務(wù)項(xiàng)后,各個(gè)服務(wù)器分別執(zhí)行各自分配到的任務(wù)項(xiàng)。一旦有新的服務(wù)器加入集群,或現(xiàn)有服務(wù)器下線,elastic-job將在保留本次任務(wù)執(zhí)行不變的情況下,下次任務(wù)開始前觸發(fā)任務(wù)重分片。
日志可追溯
X-Job : 支持,有日志查詢界面
E-Job : 可通過事件訂閱的方式處理調(diào)度過程的重要事件,用于查詢、統(tǒng)計(jì)和監(jiān)控。Elastic-Job目前提供了基于關(guān)系型數(shù)據(jù)庫兩種事件訂閱方式記錄事件。
監(jiān)控告警
X-Job : 調(diào)度失敗時(shí),將會觸發(fā)失敗報(bào)警,如發(fā)送報(bào)警郵件。
任務(wù)調(diào)度失敗時(shí)郵件通知的郵箱地址,支持配置多郵箱地址,配置多個(gè)郵箱地址時(shí)用逗號分隔
E-Job : 通過事件訂閱方式可自行實(shí)現(xiàn)
作業(yè)運(yùn)行狀態(tài)監(jiān)控、監(jiān)聽作業(yè)服務(wù)器存活、監(jiān)聽近期數(shù)據(jù)處理成功、數(shù)據(jù)流類型作業(yè)(可通過監(jiān)聽近期數(shù)據(jù)處理成功數(shù)判斷作業(yè)流量是否正常,如果小于作業(yè)正常處理的閥值,可選擇報(bào)警。)、監(jiān)聽近期數(shù)據(jù)處理失敗(可通過監(jiān)聽近期數(shù)據(jù)處理失敗數(shù)判斷作業(yè)處理結(jié)果,如果大于0,可選擇報(bào)警。)
彈性擴(kuò)容縮容
X-Job : 使用Quartz基于數(shù)據(jù)庫的分布式功能,服務(wù)器超出一定數(shù)量會給數(shù)據(jù)庫造成一定的壓力
E-Job : 通過zk實(shí)現(xiàn)各服務(wù)的注冊、控制及協(xié)調(diào)
支持并行調(diào)度
X-Job : 調(diào)度系統(tǒng)多線程(默認(rèn)10個(gè)線程)觸發(fā)調(diào)度運(yùn)行,確保調(diào)度精確執(zhí)行,不被堵塞。
E-Job : 采用任務(wù)分片方式實(shí)現(xiàn)。將一個(gè)任務(wù)拆分為n個(gè)獨(dú)立的任務(wù)項(xiàng),由分布式的服務(wù)器并行執(zhí)行各自分配到的分片項(xiàng)。
高可用策略
X-Job : “調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會觸發(fā)一次執(zhí)行;
E-Job : 調(diào)度器的高可用是通過運(yùn)行幾個(gè)指向同一個(gè)ZooKeeper集群的Elastic-Job-Cloud-Scheduler實(shí)例來實(shí)現(xiàn)的。ZooKeeper用于在當(dāng)前主Elastic-Job-Cloud-Scheduler實(shí)例失敗的情況下執(zhí)行領(lǐng)導(dǎo)者選舉。通過至少兩個(gè)調(diào)度器實(shí)例來構(gòu)成集群,集群中只有一個(gè)調(diào)度器實(shí)例提供服務(wù),其他實(shí)例處于”待命”狀態(tài)。當(dāng)該實(shí)例失敗時(shí),集群會選舉剩余實(shí)例中的一個(gè)來繼續(xù)提供服務(wù)。
失敗處理策略
X-Job : 調(diào)度失敗時(shí)的處理策略,策略包括:失敗告警(默認(rèn))、失敗重試;
E-Job : 彈性擴(kuò)容縮容在下次作業(yè)運(yùn)行前重分片,但本次作業(yè)執(zhí)行的過程中,下線的服務(wù)器所分配的作業(yè)將不會重新被分配。失效轉(zhuǎn)移功能可以在本次作業(yè)運(yùn)行中用空閑服務(wù)器抓取孤兒作業(yè)分片執(zhí)行。同樣失效轉(zhuǎn)移功能也會犧牲部分性能。
動(dòng)態(tài)分片策略
X-Job : 分片廣播任務(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ù)處理能力和速度。
執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇”分片廣播”情況下,一次任務(wù)調(diào)度將會廣播觸發(fā)對應(yīng)集群中所有執(zhí)行器執(zhí)行一次任務(wù),同時(shí)傳遞分片參數(shù);可根據(jù)分片參數(shù)開發(fā)分片任務(wù);
E-Job : 支持多種分片策略,可自定義分片策略
默認(rèn)包含三種分片策略: 基于平均分配算法的分片策略、 作業(yè)名的哈希值奇偶數(shù)決定IP升降序算法的分片策略、根據(jù)作業(yè)名的哈希值對Job實(shí)例列表進(jìn)行輪轉(zhuǎn)的分片策略,支持自定義分片策略
elastic-job的分片是通過zookeeper來實(shí)現(xiàn)的。分片的分片由主節(jié)點(diǎn)分配,如下三種情況都會觸發(fā)主節(jié)點(diǎn)上的分片算法執(zhí)行:
a、新的Job實(shí)例加入集群
b、現(xiàn)有的Job實(shí)例下線(如果下線的是leader節(jié)點(diǎn),那么先選舉然后觸發(fā)分片算法的執(zhí)行)
c、主節(jié)點(diǎn)選舉”
?
? 而 xxl-job的是通過一個(gè)中心式集群"調(diào)度中心”來調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù)的,調(diào)度中心集群可以通過增加機(jī)器來實(shí)現(xiàn)高可用(HA)實(shí)際會造成一定程度上的資源浪費(fèi),調(diào)度中心通過DB鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會增大DB的壓力,但是如果實(shí)際上這里數(shù)據(jù)庫只是負(fù)責(zé)任務(wù)的調(diào)度執(zhí)行。在沒有那么多數(shù)量的執(zhí)行器和任務(wù)的情況下是完全沒問題的。執(zhí)行器可以支持分布式部署,這實(shí)際上就足以滿足大多數(shù)場景了。關(guān)鍵是原理簡單實(shí)現(xiàn)也非常簡潔,用起來也很輕便,與springboot也非常好集成。而且他的監(jiān)控界面直接集成到調(diào)度中心里面,可以在監(jiān)控界面直接新增任務(wù),使用GLUE模式甚至可以直接在監(jiān)控界面上做任務(wù)開發(fā)寫業(yè)務(wù)代碼,這點(diǎn)未必用得到,但是確實(shí)很方便;而elastic-job是一個(gè)單獨(dú)的工程連到zk上去監(jiān)控的,因此不能直接增新增任務(wù),也不能停止執(zhí)行中的任務(wù)。單獨(dú)記錄執(zhí)行日志到數(shù)據(jù)庫,然后很方便的統(tǒng)一管理和重發(fā),還有失敗的郵件提醒都是簡單又好用的功能,對于一些常規(guī)的定時(shí)任務(wù)來說感覺應(yīng)該用起來很舒服。
? ?綜合來說,xxl-job在我看來在業(yè)務(wù)量沒那么大的時(shí)候是一個(gè)更好的選擇。
?
特性?
?1、簡單:支持通過Web頁面對任務(wù)進(jìn)行CRUD操作,操作簡單,一分鐘上手;?
?2、動(dòng)態(tài):支持動(dòng)態(tài)修改任務(wù)狀態(tài)、啟動(dòng)/停止任務(wù),以及終止運(yùn)行中任務(wù),即時(shí)生效;?
?3、調(diào)度中心HA(中心式):調(diào)度采用中心式設(shè)計(jì),“調(diào)度中心”自研調(diào)度組件并支持集群部署,可保證調(diào)度中心HA;?
?4、執(zhí)行器HA(分布式):任務(wù)分布式執(zhí)行,任務(wù)"執(zhí)行器"支持集群部署,可保證任務(wù)執(zhí)行HA;?
?5、注冊中心: 執(zhí)行器會周期性自動(dòng)注冊任務(wù), 調(diào)度中心將會自動(dòng)發(fā)現(xiàn)注冊的任務(wù)并觸發(fā)執(zhí)行。同時(shí),也支持手動(dòng)錄入執(zhí)行器地址;?
?6、彈性擴(kuò)容縮容:一旦有新執(zhí)行器機(jī)器上線或者下線,下次調(diào)度時(shí)將會重新分配任務(wù);?
?7、路由策略:執(zhí)行器集群部署時(shí)提供豐富的路由策略,包括:第一個(gè)、最后一個(gè)、輪詢、隨機(jī)、一致性HASH、最不經(jīng)常使用、最近最久未使用、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等;?
?8、故障轉(zhuǎn)移:任務(wù)路由策略選擇"故障轉(zhuǎn)移"情況下,如果執(zhí)行器集群中某一臺機(jī)器故障,將會自動(dòng)Failover切換到一臺正常的執(zhí)行器發(fā)送調(diào)度請求。?
?9、阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時(shí)的處理策略,策略包括:單機(jī)串行(默認(rèn))、丟棄后續(xù)調(diào)度、覆蓋之前調(diào)度;?
?10、任務(wù)超時(shí)控制:支持自定義任務(wù)超時(shí)時(shí)間,任務(wù)運(yùn)行超時(shí)將會主動(dòng)中斷任務(wù);?
?11、任務(wù)失敗重試:支持自定義任務(wù)失敗重試次數(shù),當(dāng)任務(wù)失敗時(shí)將會按照預(yù)設(shè)的失敗重試次數(shù)主動(dòng)進(jìn)行重試;其中分片任務(wù)支持分片粒度的失敗重試;?
?12、任務(wù)失敗告警;默認(rèn)提供郵件方式失敗告警,同時(shí)預(yù)留擴(kuò)展接口,可方便的擴(kuò)展短信、釘釘?shù)雀婢绞?#xff1b;?
?13、分片廣播任務(wù):執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇"分片廣播"情況下,一次任務(wù)調(diào)度將會廣播觸發(fā)集群中所有執(zhí)行器執(zhí)行一次任務(wù),可根據(jù)分片參數(shù)開發(fā)分片任務(wù);?
?14、動(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ù)處理能力和速度。?
?15、事件觸發(fā):除了"Cron方式"和"任務(wù)依賴方式"觸發(fā)任務(wù)執(zhí)行之外,支持基于事件的觸發(fā)任務(wù)方式。調(diào)度中心提供觸發(fā)任務(wù)單次執(zhí)行的API服務(wù),可根據(jù)業(yè)務(wù)事件靈活觸發(fā)。?
?16、任務(wù)進(jìn)度監(jiān)控:支持實(shí)時(shí)監(jiān)控任務(wù)進(jìn)度;?
?17、Rolling實(shí)時(shí)日志:支持在線查看調(diào)度結(jié)果,并且支持以Rolling方式實(shí)時(shí)查看執(zhí)行器輸出的完整的執(zhí)行日志;?
?18、GLUE:提供Web IDE,支持在線開發(fā)任務(wù)邏輯代碼,動(dòng)態(tài)發(fā)布,實(shí)時(shí)編譯生效,省略部署上線的過程。支持30個(gè)版本的歷史版本回溯。?
?19、腳本任務(wù):支持以GLUE模式開發(fā)和運(yùn)行腳本任務(wù),包括Shell、Python、NodeJS、PHP、PowerShell等類型腳本;?
?20、命令行任務(wù):原生提供通用命令行任務(wù)Handler(Bean任務(wù),"CommandJobHandler");業(yè)務(wù)方只需要提供命令行即可;?
?21、任務(wù)依賴:支持配置子任務(wù)依賴,當(dāng)父任務(wù)執(zhí)行結(jié)束且執(zhí)行成功后將會主動(dòng)觸發(fā)一次子任務(wù)的執(zhí)行, 多個(gè)子任務(wù)用逗號分隔;?
?22、一致性:“調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會觸發(fā)一次執(zhí)行;?
?23、自定義任務(wù)參數(shù):支持在線配置調(diào)度任務(wù)入?yún)?#xff0c;即時(shí)生效;?
?24、調(diào)度線程池:調(diào)度系統(tǒng)多線程觸發(fā)調(diào)度運(yùn)行,確保調(diào)度精確執(zhí)行,不被堵塞;?
?25、數(shù)據(jù)加密:調(diào)度中心和執(zhí)行器之間的通訊進(jìn)行數(shù)據(jù)加密,提升調(diào)度信息安全性;?
?26、郵件報(bào)警:任務(wù)失敗時(shí)支持郵件報(bào)警,支持配置多郵件地址群發(fā)報(bào)警郵件;?
?27、推送maven中央倉庫: 將會把最新穩(wěn)定版推送到maven中央倉庫, 方便用戶接入和使用;?
?28、運(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)度成功分布圖等;?
?29、全異步:任務(wù)調(diào)度流程全異步化設(shè)計(jì)實(shí)現(xiàn),如異步調(diào)度、異步運(yùn)行、異步回調(diào)等,有效對密集調(diào)度進(jìn)行流量削峰,理論上支持任意時(shí)長任務(wù)的運(yùn)行;?
?30、跨平臺:原生提供通用HTTP任務(wù)Handler(Bean任務(wù),"HttpJobHandler");業(yè)務(wù)方只需要提供HTTP鏈接即可,不限制語言、平臺;?
?31、國際化:調(diào)度中心支持國際化設(shè)置,提供中文、英文兩種可選語言,默認(rèn)為中文;?
?32、容器化:提供官方docker鏡像,并實(shí)時(shí)更新推送dockerhub,進(jìn)一步實(shí)現(xiàn)產(chǎn)品開箱即用;?
?33、線程池隔離:調(diào)度線程池進(jìn)行隔離拆分,慢任務(wù)自動(dòng)降級進(jìn)入"Slow"線程池,避免耗盡調(diào)度線程,提高系統(tǒng)穩(wěn)定性;?
?34、用戶管理:支持在線管理系統(tǒng)用戶,存在管理員、普通用戶兩種角色;?
?35、權(quán)限控制:執(zhí)行器維度進(jìn)行權(quán)限控制,管理員擁有全量權(quán)限,普通用戶需要分配執(zhí)行器權(quán)限后才允許相關(guān)操作
?
xxl-job ?sql語句
- xxl_job_lock:任務(wù)調(diào)度鎖表;
- xxl_job_group:執(zhí)行器信息表,維護(hù)任務(wù)執(zhí)行器信息;
- xxl_job_info:調(diào)度擴(kuò)展信息表: 用于保存XXL-JOB調(diào)度任務(wù)的擴(kuò)展信息,如任務(wù)分組、任務(wù)名、機(jī)器地址、執(zhí)行器、執(zhí)行入?yún)⒑蛨?bào)警郵件等等;
- xxl_job_log:調(diào)度日志表: 用于保存XXL-JOB任務(wù)調(diào)度的歷史信息,如調(diào)度結(jié)果、執(zhí)行結(jié)果、調(diào)度入?yún)ⅰ⒄{(diào)度機(jī)器和執(zhí)行器等等;
- xxl_job_logglue:任務(wù)GLUE日志:用于保存GLUE更新歷史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:執(zhí)行器注冊表,維護(hù)在線的執(zhí)行器和調(diào)度中心機(jī)器地址信息;
- xxl_job_user:系統(tǒng)用戶表;
?
CREATE TABLE `xxl_job_info` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',
? `job_cron` varchar(128) NOT NULL COMMENT '任務(wù)執(zhí)行CRON',
? `job_desc` varchar(255) NOT NULL,
? `add_time` datetime DEFAULT NULL,
? `update_time` datetime DEFAULT NULL,
? `author` varchar(64) DEFAULT NULL COMMENT '作者',
? `alarm_email` varchar(255) DEFAULT NULL COMMENT '報(bào)警郵件',
? `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執(zhí)行器路由策略',
? `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',
? `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',
? `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略',
? `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務(wù)執(zhí)行超時(shí)時(shí)間,單位秒',
? `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',
? `glue_type` varchar(50) NOT NULL COMMENT 'GLUE類型',
? `glue_source` mediumtext COMMENT 'GLUE源代碼',
? `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE備注',
? `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新時(shí)間',
? `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務(wù)ID,多個(gè)逗號分隔',
? `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '調(diào)度狀態(tài):0-停止,1-運(yùn)行',
? `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次調(diào)度時(shí)間',
? `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次調(diào)度時(shí)間',
? PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_log` (
? `id` bigint(20) NOT NULL AUTO_INCREMENT,
? `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',
? `job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID',
? `executor_address` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器地址,本次執(zhí)行的地址',
? `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',
? `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',
? `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)分片參數(shù),格式如 1/2',
? `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',
? `trigger_time` datetime DEFAULT NULL COMMENT '調(diào)度-時(shí)間',
? `trigger_code` int(11) NOT NULL COMMENT '調(diào)度-結(jié)果',
? `trigger_msg` text COMMENT '調(diào)度-日志',
? `handle_time` datetime DEFAULT NULL COMMENT '執(zhí)行-時(shí)間',
? `handle_code` int(11) NOT NULL COMMENT '執(zhí)行-狀態(tài)',
? `handle_msg` text COMMENT '執(zhí)行-日志',
? `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警狀態(tài):0-默認(rèn)、1-無需告警、2-告警成功、3-告警失敗',
? PRIMARY KEY (`id`),
? KEY `I_trigger_time` (`trigger_time`),
? KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_logglue` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID',
? `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE類型',
? `glue_source` mediumtext COMMENT 'GLUE源代碼',
? `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE備注',
? `add_time` timestamp NULL DEFAULT NULL,
? `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
? PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_registry` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `registry_group` varchar(255) NOT NULL,
? `registry_key` varchar(255) NOT NULL,
? `registry_value` varchar(255) NOT NULL,
? `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
? PRIMARY KEY (`id`),
? KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_group` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `app_name` varchar(64) NOT NULL COMMENT '執(zhí)行器AppName',
? `title` varchar(12) NOT NULL COMMENT '執(zhí)行器名稱',
? `order` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
? `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '執(zhí)行器地址類型:0=自動(dòng)注冊、1=手動(dòng)錄入',
? `address_list` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器地址列表,多地址逗號分隔',
? PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_user` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `username` varchar(50) NOT NULL COMMENT '賬號',
? `password` varchar(50) NOT NULL COMMENT '密碼',
? `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用戶、1-管理員',
? `permission` varchar(255) DEFAULT NULL COMMENT '權(quán)限:執(zhí)行器ID列表,多個(gè)逗號分割',
? PRIMARY KEY (`id`),
? UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
?
CREATE TABLE `xxl_job_lock` (
? `lock_name` varchar(50) NOT NULL COMMENT '鎖名稱',
? PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 執(zhí)行器:任務(wù)的綁定的執(zhí)行器,任務(wù)觸發(fā)調(diào)度時(shí)將會自動(dòng)發(fā)現(xiàn)注冊成功的執(zhí)行器, 實(shí)現(xiàn)任務(wù)自動(dòng)發(fā)現(xiàn)功能; 另一方面也可以方便的進(jìn)行任務(wù)分組。每個(gè)任務(wù)必須綁定一個(gè)執(zhí)行器, 可在 "執(zhí)行器管理" 進(jìn)行設(shè)置;
- 任務(wù)描述:任務(wù)的描述信息,便于任務(wù)管理;
- 路由策略:當(dāng)執(zhí)行器集群部署時(shí),提供豐富的路由策略,包括;
? ? FIRST(第一個(gè)):固定選擇第一個(gè)機(jī)器;
? ? LAST(最后一個(gè)):固定選擇最后一個(gè)機(jī)器;
? ? ROUND(輪詢):;
? ? RANDOM(隨機(jī)):隨機(jī)選擇在線的機(jī)器;
? ? CONSISTENT_HASH(一致性HASH):每個(gè)任務(wù)按照Hash算法固定選擇某一臺機(jī)器,且所有任務(wù)均勻散列在不同機(jī)器上。
? ? LEAST_FREQUENTLY_USED(最不經(jīng)常使用):使用頻率最低的機(jī)器優(yōu)先被選舉;
? ? LEAST_RECENTLY_USED(最近最久未使用):最久為使用的機(jī)器優(yōu)先被選舉;
? ? FAILOVER(故障轉(zhuǎn)移):按照順序依次進(jìn)行心跳檢測,第一個(gè)心跳檢測成功的機(jī)器選定為目標(biāo)執(zhí)行器并發(fā)起調(diào)度;
? ? BUSYOVER(忙碌轉(zhuǎn)移):按照順序依次進(jìn)行空閑檢測,第一個(gè)空閑檢測成功的機(jī)器選定為目標(biāo)執(zhí)行器并發(fā)起調(diào)度;
? ? SHARDING_BROADCAST(分片廣播):廣播觸發(fā)對應(yīng)集群中所有機(jī)器執(zhí)行一次任務(wù),同時(shí)系統(tǒng)自動(dòng)傳遞分片參數(shù);可根據(jù)分片參數(shù)開發(fā)分片任務(wù);
? ??
- Cron:觸發(fā)任務(wù)執(zhí)行的Cron表達(dá)式;
- 運(yùn)行模式:
? ? BEAN模式:任務(wù)以JobHandler方式維護(hù)在執(zhí)行器端;需要結(jié)合 "JobHandler" 屬性匹配執(zhí)行器中任務(wù);
? ? GLUE模式(Java):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段繼承自IJobHandler的Java類代碼并 "groovy" 源碼方式維護(hù),它在執(zhí)行器項(xiàng)目中運(yùn)行,可使用@Resource/@Autowire注入執(zhí)行器里中的其他服務(wù);
? ? GLUE模式(Shell):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段 "shell" 腳本;
? ? GLUE模式(Python):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段 "python" 腳本;
? ? GLUE模式(PHP):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段 "php" 腳本;
? ? GLUE模式(NodeJS):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段 "nodejs" 腳本;
? ? GLUE模式(PowerShell):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實(shí)際上是一段 "PowerShell" 腳本;
- JobHandler:運(yùn)行模式為 "BEAN模式" 時(shí)生效,對應(yīng)執(zhí)行器中新開發(fā)的JobHandler類“@JobHandler”注解自定義的value值;
- 阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時(shí)的處理策略;
? ? 單機(jī)串行(默認(rèn)):調(diào)度請求進(jìn)入單機(jī)執(zhí)行器后,調(diào)度請求進(jìn)入FIFO隊(duì)列并以串行方式運(yùn)行;
? ? 丟棄后續(xù)調(diào)度:調(diào)度請求進(jìn)入單機(jī)執(zhí)行器后,發(fā)現(xiàn)執(zhí)行器存在運(yùn)行的調(diào)度任務(wù),本次請求將會被丟棄并標(biāo)記為失敗;
? ? 覆蓋之前調(diào)度:調(diào)度請求進(jìn)入單機(jī)執(zhí)行器后,發(fā)現(xiàn)執(zhí)行器存在運(yùn)行的調(diào)度任務(wù),將會終止運(yùn)行中的調(diào)度任務(wù)并清空隊(duì)列,然后運(yùn)行本地調(diào)度任務(wù);
- 子任務(wù):每個(gè)任務(wù)都擁有一個(gè)唯一的任務(wù)ID(任務(wù)ID可以從任務(wù)列表獲取),當(dāng)本任務(wù)執(zhí)行結(jié)束并且執(zhí)行成功時(shí),將會觸發(fā)子任務(wù)ID所對應(yīng)的任務(wù)的一次主動(dòng)調(diào)度。
- 任務(wù)超時(shí)時(shí)間:支持自定義任務(wù)超時(shí)時(shí)間,任務(wù)運(yùn)行超時(shí)將會主動(dòng)中斷任務(wù);
- 失敗重試次數(shù);支持自定義任務(wù)失敗重試次數(shù),當(dāng)任務(wù)失敗時(shí)將會按照預(yù)設(shè)的失敗重試次數(shù)主動(dòng)進(jìn)行重試;
- 報(bào)警郵件:任務(wù)調(diào)度失敗時(shí)郵件通知的郵箱地址,支持配置多郵箱地址,配置多個(gè)郵箱地址時(shí)用逗號分隔;
- 負(fù)責(zé)人:任務(wù)的負(fù)責(zé)人;
- 執(zhí)行參數(shù):任務(wù)執(zhí)行所需的參數(shù);
?
————————————————
版權(quán)聲明:本文為CSDN博主「程序員XW」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_37337849/article/details/97755987
總結(jié)
以上是生活随笔為你收集整理的elastic-job 和 xxl-job 的对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八厘的利息是多少
- 下一篇: 担保人还款后征信会恢复吗