官方文檔:https://www.xuxueli.com/xxl-job/
今天想要跟大家分享一下對xxl-job的淺顯理解矾飞,他是一個在分布式環(huán)境下爆安,解決多機(jī)定時(shí)任務(wù)如何調(diào)度執(zhí)行的分布式任務(wù)調(diào)度平臺 xxl-job乃沙,它有著簡單易用康栈,開包即食等特點(diǎn)村怪。在此之前先說一下析藕,在開發(fā)中使用定時(shí)任務(wù)可能會遇到的問題和一些簡單的解決方案慷垮。
在日常開發(fā)中阿纤,經(jīng)常會用定時(shí)任務(wù)執(zhí)行某些不緊急又非常重要的事情句灌,例如批量結(jié)算,計(jì)算當(dāng)日的訂單量,當(dāng)日的成本收入等胰锌,如果是單機(jī)骗绕,那毫無問題,往往我們是多機(jī)器部署资昧,那么一個定時(shí)任務(wù)只應(yīng)該被一臺機(jī)器所執(zhí)行酬土,這個時(shí)候我們可以采用分布式鎖控制某一個任務(wù)執(zhí)行,特點(diǎn)是所有任務(wù)都會執(zhí)行格带,某一個機(jī)器真正執(zhí)行撤缴,其他機(jī)器也會同時(shí)一起執(zhí)行,用某種方式將其終止掉践惑,可以采用表的形式腹泌,這種方式比較不保險(xiǎn),執(zhí)行的機(jī)器由于某種原因尔觉,沒有回寫DB表中記錄凉袱,就會造成任務(wù)無法再次執(zhí)行,所以請慎用侦铜;還有用redis或者zookeeper實(shí)現(xiàn)分布式鎖來控制专甩,多機(jī)定時(shí)任務(wù)的執(zhí)行,這種也是比較常用的钉稍。但是不管是那種分布式鎖的方式都會存在這任務(wù)提醒涤躲、失敗重試等問題,更為甚著當(dāng)存在大量定時(shí)任務(wù)的時(shí)候贡未,任務(wù)的管理也會成為一個比較頭痛的問題椅亚,今天跟大家分享一下xxl-job,就是一個比較成熟的分布式任務(wù)調(diào)度平臺骚烧。
xxl-job有著諸多的特點(diǎn)血筑,精簡了以下幾條:
(1)支持通過Web頁面對任務(wù)進(jìn)行CRUD操作,可動態(tài)啟動/停止任務(wù)消恍,操作非常簡單
(2)任務(wù)分布式執(zhí)行岂昭,任務(wù)”執(zhí)行器”支持集群部署,支持彈性擴(kuò)容縮容狠怨;
(3)豐富的路由策略约啊,包括:第一個、最后一個佣赖、輪詢恰矩、隨機(jī)、故障轉(zhuǎn)移憎蛤、忙碌轉(zhuǎn)移等枢里;
(4)完善的調(diào)度過期策略、任務(wù)超時(shí)控制、任務(wù)失敗重試栏豺、任務(wù)失敗告警等
(5)支持動態(tài)分配彬碱,分片廣播任務(wù)以執(zhí)行器為維度進(jìn)行分片;并且分片廣播任務(wù):執(zhí)行器集群部署時(shí)奥洼,任務(wù)路由策略選擇”分片廣播”情況下巷疼,一次任務(wù)調(diào)度將會廣播觸發(fā)集群中所有執(zhí)行器執(zhí)行一次任務(wù)
(6)有著完善的故障轉(zhuǎn)移、任務(wù)進(jìn)度監(jiān)控灵奖、郵件報(bào)警等保護(hù)機(jī)制嚼沿,
(7)有著運(yùn)行報(bào)表,和Rolling實(shí)時(shí)日志方便對正規(guī)任務(wù)進(jìn)行實(shí)時(shí)的數(shù)據(jù)監(jiān)控
設(shè)計(jì)思想:
將調(diào)度行為抽象形成“調(diào)度中心”公共平臺瓷患,而平臺自身并不承擔(dān)業(yè)務(wù)邏輯骡尽,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請求。將任務(wù)抽象成分散的JobHandler擅编,交由“執(zhí)行器”統(tǒng)一管理攀细,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請求并執(zhí)行對應(yīng)的JobHandler中業(yè)務(wù)邏輯。因此爱态,“調(diào)度”和“任務(wù)”兩部分可以相互解耦谭贪,提高系統(tǒng)整體穩(wěn)定性和擴(kuò)展性;
架構(gòu)圖:
系統(tǒng)組成:
調(diào)度模塊(調(diào)度中心):負(fù)責(zé)管理調(diào)度信息锦担,按照調(diào)度配置發(fā)出調(diào)度請求俭识,自身不承擔(dān)業(yè)務(wù)代碼。調(diào)度系統(tǒng)與任務(wù)解耦洞渔,提高了系統(tǒng)可用性和穩(wěn)定性套媚,同時(shí)調(diào)度系統(tǒng)性能不再受限于任務(wù)模塊;支持可視化磁椒、簡單且動態(tài)的管理調(diào)度信息凑阶,包括任務(wù)新建,更新衷快,刪除,GLUE開發(fā)和任務(wù)報(bào)警等姨俩,所有上述操作都會實(shí)時(shí)生效蘸拔,同時(shí)支持監(jiān)控調(diào)度結(jié)果以及執(zhí)行日志,支持執(zhí)行器Failover环葵。
執(zhí)行模塊(執(zhí)行器):負(fù)責(zé)接收調(diào)度請求并執(zhí)行任務(wù)邏輯调窍。任務(wù)模塊專注于任務(wù)的執(zhí)行等操作,開發(fā)和維護(hù)更加簡單和高效张遭;
? ? ? 接收“調(diào)度中心”的執(zhí)行請求邓萨、終止請求和日志請求等。
注冊中心模塊:
XXL-RPC的注冊中心,是可選組件缔恳,支持服務(wù)注冊并動態(tài)發(fā)現(xiàn)宝剖,可選擇不啟用,直接指定服務(wù)提供方機(jī)器地址通訊歉甚,選擇啟用時(shí)万细,內(nèi)置可選方案:“XXL-RPC-ADMIN 輕量級服務(wù)注冊中心”(推薦)、“ZK注冊中心”纸泄、“Local注冊中心”等
執(zhí)行器模塊:
執(zhí)行器方面是基于數(shù)據(jù)庫的集群方案赖钞,數(shù)據(jù)庫選用Mysql;集群分布式并發(fā)環(huán)境中進(jìn)行定時(shí)任務(wù)調(diào)度時(shí)聘裁,會在各個節(jié)點(diǎn)會上報(bào)任務(wù)雪营,存到數(shù)據(jù)庫中,執(zhí)行時(shí)會從數(shù)據(jù)庫中取出觸發(fā)器來執(zhí)行衡便,如果觸發(fā)器的名稱和執(zhí)行時(shí)間相同献起,則只有一個節(jié)點(diǎn)去執(zhí)行此任務(wù)。
服務(wù)通訊模塊:
XXL-RPC提供多中通訊方案:支持 TCP 和 HTTP 兩種通訊方式進(jìn)行服務(wù)調(diào)用砰诵;其中 TCP 提供可選方案 NETTY 征唬,HTTP 提供可選方案 NETTY_HTTP (新版本移除了Mina和Jetty通訊方案,主推Netty茁彭;如果有需要可以參考舊版本)总寒。
高可用:
調(diào)度中心高可用,調(diào)度中心支持多節(jié)點(diǎn)部署理肺,基于數(shù)據(jù)庫行鎖保證同時(shí)只有一個調(diào)度中心節(jié)點(diǎn)觸發(fā)任務(wù)調(diào)度摄闸。
任務(wù)調(diào)度高可用,調(diào)度中心基于路由策略路由選擇一個執(zhí)行器節(jié)點(diǎn)執(zhí)行任務(wù)妹萨,XXL-JOB提供了諸多“忙碌轉(zhuǎn)移策略”和“故障轉(zhuǎn)移策略”的路由策略保證任務(wù)調(diào)度高可用年枕。
分區(qū)容錯:
服務(wù)提供方集群注冊時(shí),某個服務(wù)節(jié)點(diǎn)不可用時(shí)將會自動摘除乎完,同時(shí)消費(fèi)方將會移除失效節(jié)點(diǎn)將流量分發(fā)到其余節(jié)點(diǎn)熏兄,提高系統(tǒng)容錯能力。
一致性:
“調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會觸發(fā)一次執(zhí)行树姨;
工作原理:
執(zhí)行流程:
a摩桶、執(zhí)行器根據(jù)配置的調(diào)度中心的地址,自動注冊到調(diào)度中心
b帽揪、達(dá)到任務(wù)觸發(fā)條件硝清,調(diào)度中心下發(fā)任務(wù)
c、執(zhí)行器基于線程池執(zhí)行任務(wù)转晰,并把執(zhí)行結(jié)果放入內(nèi)存隊(duì)列中芦拿、把執(zhí)行日志寫入日志文件中
d士飒、執(zhí)行器的回調(diào)線程消費(fèi)內(nèi)存隊(duì)列中的執(zhí)行結(jié)果,主動上報(bào)給調(diào)度中心
e蔗崎、當(dāng)用戶在調(diào)度中心查看任務(wù)日志酵幕,調(diào)度中心請求任務(wù)執(zhí)行器,任務(wù)執(zhí)行器讀取任務(wù)日志文件并返回日志詳情
個人總結(jié):
xxl-job是一個易上手蚁趁, 支持多種通訊協(xié)議多種注冊中心裙盾,可自由靈活配置,完善的日志系統(tǒng)他嫡,清晰簡潔的可視化頁面番官,多執(zhí)行策略,支持分片和分片廣播钢属,完整的補(bǔ)償機(jī)制徘熔,重試重發(fā)熔斷等。組件也存在一定的不租淆党,一定的入侵性酷师,對數(shù)據(jù)庫高度依賴,需要java環(huán)境等染乌∩娇祝總體來說xxl-job依然是一個非常不錯的“分布式任務(wù)調(diào)度平臺”。
橫向?qū)Ρ龋?/b>
特性quartzelastic-job-litexxl-jobLTS
依賴MySQL荷憋、jdkjdk台颠、zookeepermysql、jdkjdk勒庄、zookeeper串前、maven
高可用多節(jié)點(diǎn)部署,通過競爭數(shù)據(jù)庫鎖來保證只有一個節(jié)點(diǎn)執(zhí)行任務(wù)通過zookeeper的注冊與發(fā)現(xiàn)实蔽,可以動態(tài)的添加服務(wù)器基于競爭數(shù)據(jù)庫鎖保證只有一個節(jié)點(diǎn)執(zhí)行任務(wù)荡碾,支持水平擴(kuò)容【肿埃可以手動增加定時(shí)任務(wù)坛吁,啟動和暫停任務(wù),有監(jiān)控集群部署,可以動態(tài)的添加服務(wù)器铐尚〔β觯可以手動增加定時(shí)任務(wù),啟動和暫停任務(wù)塑径。有監(jiān)控
任務(wù)分片×√√√
管理界面×√√√
難易程度簡單簡單簡單略復(fù)雜
高級功能-彈性擴(kuò)容,多種作業(yè)模式填具,失效轉(zhuǎn)移统舀,運(yùn)行狀態(tài)收集匆骗,多線程處理數(shù)據(jù),冪等性誉简,容錯處理碉就,spring命名空間支持彈性擴(kuò)容,分片廣播闷串,故障轉(zhuǎn)移瓮钥,Rolling實(shí)時(shí)日志,GLUE(支持在線編輯代碼烹吵,免發(fā)布),任務(wù)進(jìn)度監(jiān)控碉熄,任務(wù)依賴,數(shù)據(jù)加密肋拔,郵件報(bào)警锈津,運(yùn)行報(bào)表,國際化支持spring凉蜂,spring boot琼梆,業(yè)務(wù)日志記錄器,SPI擴(kuò)展支持窿吩,故障轉(zhuǎn)移茎杂,節(jié)點(diǎn)監(jiān)控,多樣化任務(wù)執(zhí)行結(jié)果支持纫雁,F(xiàn)ailStore容錯煌往,動態(tài)擴(kuò)容。