6大分布式定时任务对比
作者 | sharedCode
來源 | blog.csdn.net/u012394095/article/details/79470904
分布式定時任務(wù)簡介
把分散的,可靠性差的計劃任務(wù)納入統(tǒng)一的平臺,并實現(xiàn)集群管理調(diào)度和分布式部署的一種定時任務(wù)的管理方式,叫做分布式定時任務(wù)。
常見開源方案
elastic-job
xxl-job
quartz
saturn
opencron
antares
elastic-job
elastic-job 是由當(dāng)當(dāng)網(wǎng)基于quartz 二次開發(fā)之后的分布式調(diào)度解決方案 , 由兩個相對獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成 。
Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分布式任務(wù)的協(xié)調(diào)服務(wù)。
Elastic-Job-Cloud使用Mesos + Docker(TBD)的解決方案,額外提供資源治理、應(yīng)用分發(fā)以及進(jìn)程隔離等服務(wù)
亮點:
基于quartz 定時任務(wù)框架為基礎(chǔ)的,因此具備quartz的大部分功能
使用zookeeper做協(xié)調(diào),調(diào)度中心,更加輕量級
支持任務(wù)的分片
支持彈性擴(kuò)容 , 可以水平擴(kuò)展 , 當(dāng)任務(wù)再次運(yùn)行時,會檢查當(dāng)前的服務(wù)器數(shù)量,重新分片,分片結(jié)束之后才會繼續(xù)執(zhí)行任務(wù)
失效轉(zhuǎn)移,容錯處理,當(dāng)一臺調(diào)度服務(wù)器宕機(jī)或者跟zookeeper斷開連接之后,會立即停止作業(yè),然后再去尋找其他空閑的調(diào)度服務(wù)器,來運(yùn)行剩余的任務(wù)
提供運(yùn)維界面,可以管理作業(yè)和注冊中心。
elastic-job結(jié)合了quartz非常優(yōu)秀的時間調(diào)度功能,并且利用ZooKeeper實現(xiàn)了靈活的分片策略。除此之外,還加入了大量實用的監(jiān)控和管理功能,
以及其開源社區(qū)活躍、文檔齊全、代碼優(yōu)雅等優(yōu)點,是分布式任務(wù)調(diào)度框架的推薦選擇。
由于elastic-job-lite 不支持動態(tài)添加作業(yè),此處僅貼上elastic-job-Cloud架構(gòu)圖
imgxxl-job
由個人開源的一個輕量級分布式任務(wù)調(diào)度框架 ,主要分為 調(diào)度中心和執(zhí)行器兩部分 , 調(diào)度中心在啟動初始化的時候,會默認(rèn)生成執(zhí)行器的RPC代理
對象(http協(xié)議調(diào)用), 執(zhí)行器項目啟動之后, 調(diào)度中心在觸發(fā)定時器之后通過jobHandle 來調(diào)用執(zhí)行器項目里面的代碼,核心功能和elastic-job差不多
,同時技術(shù)文檔比較完善
系統(tǒng)架構(gòu)圖:
quartz
quartz 的常見集群方案如下,通過在數(shù)據(jù)庫中配置定時器信息, 以數(shù)據(jù)庫悲觀鎖的方式達(dá)到同一個任務(wù)始終只有一個節(jié)點在運(yùn)行,
優(yōu)點:
保證節(jié)點高可用 (HA), 如果某一個幾點掛了, 其他節(jié)點可以頂上
缺點:
同一個任務(wù)只能有一個節(jié)點運(yùn)行,其他節(jié)點將不執(zhí)行任務(wù),性能低,資源浪費(fèi)
當(dāng)碰到大量短任務(wù)時,各個節(jié)點頻繁的競爭數(shù)據(jù)庫鎖,節(jié)點越多這種情況越嚴(yán)重。性能會很低下
quartz 的分布式僅解決了集群高可用的問題,并沒有解決任務(wù)分片的問題,不能實現(xiàn)水平擴(kuò)展
Saturn
Saturn是唯品會在github開源的一款分布式任務(wù)調(diào)度產(chǎn)品。它是基于當(dāng)當(dāng)elastic-job 1.0版本來開發(fā)的,其上完善了一些功能和添加了一些新的feature。
亮點:
支持多語言開發(fā) python、Go、Shell、Java、Php。
管理控制臺和數(shù)據(jù)統(tǒng)計分析更加完善
缺點:
技術(shù)文檔較少 , 該框架是2016年由唯品會的研發(fā)團(tuán)隊基于elastic-job開發(fā)而來的
opencron
一個功能完善真正通用的linux定時任務(wù)調(diào)度定系統(tǒng),滿足多種場景下各種復(fù)雜的定時任務(wù)調(diào)度,同時集成了linux實時監(jiān)控,webssh,提供一個方便管理定時任務(wù)的平臺
缺點:僅支持 kill任務(wù), 現(xiàn)場執(zhí)行,查詢?nèi)蝿?wù)運(yùn)行狀態(tài) 等, 主要功能是著重于任務(wù)的修改和查詢上。不能動態(tài)的添加任務(wù)以及任務(wù)分片。
antares
優(yōu)點:
一個任務(wù)僅會被服務(wù)器集群中的某個節(jié)點調(diào)度,調(diào)度機(jī)制基于成熟的 quartz
并行執(zhí)行 , 用戶可通過對任務(wù)預(yù)分片,有效提升任務(wù)執(zhí)行效率
失效轉(zhuǎn)移
彈性擴(kuò)容,在任務(wù)運(yùn)行時,可以動態(tài)的加機(jī)器
友好的管理控制臺
缺點:
不能動態(tài)的添加任務(wù),僅能在控制臺對任務(wù)進(jìn)行觸發(fā),暫停,刪除等操作
文檔不多,開源社區(qū)不夠活躍
系統(tǒng)架構(gòu)圖如下:
img3. 比較
此處列出了幾個代表性的開源產(chǎn)品
| 依賴 | mysql | jdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesos | mysql ,jdk1.7+ , maven3.0+ | jdk 1.7+ , redis , zookeeper | jdk1.7+ , Tomcat8.0+ |
| HA | 多節(jié)點部署,通過競爭數(shù)據(jù)庫鎖來保證只有一個節(jié)點執(zhí)行任務(wù) | 通過zookeeper的注冊與發(fā)現(xiàn),可以動態(tài)的添加服務(wù)器。支持水平擴(kuò)容 | 集群部署 | 集群部署 | — |
| 任務(wù)分片 | — | 支持 | 支持 | 支持 | — |
| 文檔完善 | 完善 | 完善 | 完善 | 文檔略少 | 文檔略少 |
| 管理界面 | 無 | 支持 | 支持 | 支持 | 支持 |
| 難易程度 | 簡單 | 較復(fù)雜 | 簡單 | 一般 | 一般 |
| 公司 | OpenSymphony | 當(dāng)當(dāng)網(wǎng) | 個人 | 個人 | 個人 |
| 高級功能 | — | 彈性擴(kuò)容,多種作業(yè)模式,失效轉(zhuǎn)移,運(yùn)行狀態(tài)收集,多線程處理數(shù)據(jù),冪等性,容錯處理,spring命名空間支持 | 彈性擴(kuò)容,分片廣播,故障轉(zhuǎn)移,Rolling實時日志,GLUE(支持在線編輯代碼,免發(fā)布),任務(wù)進(jìn)度監(jiān)控,任務(wù)依賴,數(shù)據(jù)加密,郵件報警,運(yùn)行報表,國際化 | 任務(wù)分片, 失效轉(zhuǎn)移,彈性擴(kuò)容 , | 時間規(guī)則支持quartz和crontab ,kill任務(wù), 現(xiàn)場執(zhí)行,查詢?nèi)蝿?wù)運(yùn)行狀態(tài) |
| 缺點 | 沒有管理界面,以及不支持任務(wù)分片等。不適用于分布式場景 | 需要引入zookeeper , mesos, 增加系統(tǒng)復(fù)雜度, 學(xué)習(xí)成本較高 | 調(diào)度中心通過獲取 DB鎖來保證集群中執(zhí)行任務(wù)的唯一性, 如果短任務(wù)很多,隨著調(diào)度中心集群數(shù)量增加,那么數(shù)據(jù)庫的鎖競爭會比較厲害,性能不好。 | 不支持動態(tài)添加任務(wù) | 不適用于分布式場景 |
| 使用企業(yè) | 大眾化產(chǎn)品,對分布式調(diào)度要求不高的公司大面積使用 | 36氪,當(dāng)當(dāng)網(wǎng),國美,金柚網(wǎng),聯(lián)想,唯品會,亞信,平安,豬八戒 | 大眾點評,運(yùn)滿滿,優(yōu)信二手車,拍拍貸 | — | — |
END
想讀Spring源碼?先從這篇「 極簡教程」開始
99%的程序員都在用Lombok,原理竟然這么簡單?我也手?jǐn)]了一個!|建議收藏!!!
《大廠內(nèi)部資料》Redis 性能優(yōu)化的 13 條軍規(guī)!全網(wǎng)首發(fā)
總結(jié)
以上是生活随笔為你收集整理的6大分布式定时任务对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 99%的程序员都在用Lombok,原理竟
- 下一篇: 50种Java编程技巧,越早知道越好!(