分布式定時任務調度系統(tǒng)技術選型

來自:csdn(作者:sharedCode)

原文鏈接:

https://blog.csdn.net/u012394095/article/details/79470904

  • 1. 什么是分布式定時任務

  • 2. 常見開源方案

  • elastic-job

  • xxl-job

  • quartz

  • Saturn

  • opencron

  • antares

  • 3. 比較


1. 什么是分布式定時任務

把分散的,可靠性差的計劃任務納入統(tǒng)一的平臺,并實現(xiàn)集群管理調度和分布式部署的一種定時任務的管理方式。叫做分布式定時任務。

2. 常見開源方案

  • elastic-job
  • xxl-job
  • quartz
  • saturn
  • opencron
  • antares

elastic-job

elastic-job 是由當當網(wǎng)基于quartz 二次開發(fā)之后的分布式調度解決方案 , 由兩個相對獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成 。

Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分布式任務的協(xié)調服務。

Elastic-Job-Cloud使用Mesos + Docker(TBD)的解決方案,額外提供資源治理、應用分發(fā)以及進程隔離等服務

亮點:

  1. 基于quartz 定時任務框架為基礎的,因此具備quartz的大部分功能
  2. 使用zookeeper做協(xié)調,調度中心,更加輕量級
  3. 支持任務的分片
  4. 支持彈性擴容 , 可以水平擴展 , 當任務再次運行時,會檢查當前的服務器數(shù)量,重新分片,分片結束之后才會繼續(xù)執(zhí)行任務
  5. 失效轉移,容錯處理,當一臺調度服務器宕機或者跟zookeeper斷開連接之后,會立即停止作業(yè),然后再去尋找其他空閑的調度服務器,來運行剩余的任務
  6. 提供運維界面,可以管理作業(yè)和注冊中心。

elastic-job結合了quartz非常優(yōu)秀的時間調度功能,并且利用ZooKeeper實現(xiàn)了靈活的分片策略。除此之外,還加入了大量實用的監(jiān)控和管理功能,

以及其開源社區(qū)活躍、文檔齊全、代碼優(yōu)雅等優(yōu)點,是分布式任務調度框架的推薦選擇。

由于elastic-job-lite 不支持動態(tài)添加作業(yè),此處僅貼上elastic-job-Cloud架構圖

image

xxl-job

由個人開源的一個輕量級分布式任務調度框架 ,主要分為 調度中心和執(zhí)行器兩部分 , 調度中心在啟動初始化的時候,會默認生成執(zhí)行器的RPC代理

對象(http協(xié)議調用), 執(zhí)行器項目啟動之后, 調度中心在觸發(fā)定時器之后通過jobHandle 來調用執(zhí)行器項目里面的代碼,核心功能和elastic-job差不多

,同時技術文檔比較完善

系統(tǒng)架構圖:

image

quartz

quartz 的常見集群方案如下,通過在數(shù)據(jù)庫中配置定時器信息, 以數(shù)據(jù)庫悲觀鎖的方式達到同一個任務始終只有一個節(jié)點在運行,

優(yōu)點:

  1. 保證節(jié)點高可用 (HA), 如果某一個幾點掛了, 其他節(jié)點可以頂上

缺點:

  1. 同一個任務只能有一個節(jié)點運行,其他節(jié)點將不執(zhí)行任務,性能低,資源浪費
  2. 當碰到大量短任務時,各個節(jié)點頻繁的競爭數(shù)據(jù)庫鎖,節(jié)點越多這種情況越嚴重。性能會很低下
  3. quartz 的分布式僅解決了集群高可用的問題,并沒有解決任務分片的問題,不能實現(xiàn)水平擴展

image

Saturn

Saturn是唯品會在github開源的一款分布式任務調度產品。它是基于當當elastic-job 1.0版本來開發(fā)的,其上完善了一些功能和添加了一些新的feature。

亮點:

  1. 支持多語言開發(fā) python、Go、Shell、Java、Php。
  2. 管理控制臺和數(shù)據(jù)統(tǒng)計分析更加完善

缺點:

  1. 技術文檔較少 , 該框架是2016年由唯品會的研發(fā)團隊基于elastic-job開發(fā)而來的

opencron

一個功能完善真正通用的linux定時任務調度定系統(tǒng),滿足多種場景下各種復雜的定時任務調度,同時集成了linux實時監(jiān)控,webssh,提供一個方便管理定時任務的平臺

缺點:僅支持 kill任務, 現(xiàn)場執(zhí)行,查詢任務運行狀態(tài) 等, 主要功能是著重于任務的修改和查詢上。不能動態(tài)的添加任務以及任務分片。

antares

優(yōu)點:

  1. 一個任務僅會被服務器集群中的某個節(jié)點調度,調度機制基于成熟的 quartz
  2. 并行執(zhí)行 , 用戶可通過對任務預分片,有效提升任務執(zhí)行效率
  3. 失效轉移
  4. 彈性擴容,在任務運行時,可以動態(tài)的加機器
  5. 友好的管理控制臺

缺點:

  1. 不能動態(tài)的添加任務,僅能在控制臺對任務進行觸發(fā),暫停,刪除等操作
  2. 文檔不多,開源社區(qū)不夠活躍

系統(tǒng)架構圖如下:

image

3. 比較

此處列出了幾個代表性的開源產品

feature quartz elastic-job-cloud xxl-job antares opencron
依賴 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í)行任務 通過zookeeper的注冊與發(fā)現(xiàn),可以動態(tài)的添加服務器。支持水平擴容 集群部署 集群部署
任務分片 支持 支持 支持
文檔完善 完善 完善 完善 文檔略少 文檔略少
管理界面 支持 支持 支持 支持
難易程度 簡單 較復雜 簡單 一般 一般
公司 OpenSymphony 當當網(wǎng) 個人 個人 個人
高級功能 彈性擴容,多種作業(yè)模式,失效轉移,運行狀態(tài)收集,多線程處理數(shù)據(jù),冪等性,容錯處理,spring命名空間支持 彈性擴容,分片廣播,故障轉移,Rolling實時日志,GLUE(支持在線編輯代碼,免發(fā)布),任務進度監(jiān)控,任務依賴,數(shù)據(jù)加密,郵件報警,運行報表,國際化 任務分片, 失效轉移,彈性擴容 , 時間規(guī)則支持quartz和crontab ,kill任務, 現(xiàn)場執(zhí)行,查詢任務運行狀態(tài)
缺點 沒有管理界面,以及不支持任務分片等。不適用于分布式場景 需要引入zookeeper , mesos, 增加系統(tǒng)復雜度, 學習成本較高 調度中心通過獲取 DB鎖來保證集群中執(zhí)行任務的唯一性, 如果短任務很多,隨著調度中心集群數(shù)量增加,那么數(shù)據(jù)庫的鎖競爭會比較厲害,性能不好。 不支持動態(tài)添加任務 不適用于分布式場景
使用企業(yè) 大眾化產品,對分布式調度要求不高的公司大面積使用 36氪,當當網(wǎng),國美,金柚網(wǎng),聯(lián)想,唯品會,亞信,平安,豬八戒 大眾點評,運滿滿,優(yōu)信二手車,拍拍貸
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容