分布式定時(shí)任務(wù)調(diào)度系統(tǒng)技術(shù)選型

來自:CSDN,作者:guyue35
鏈接:https://blog.csdn.net/guyue35/article/details/84883408

  • 1. 什么是分布式定時(shí)任務(wù)

  • 2. 常見開源方案

  • elastic-job

  • xxl-job

  • quartz

  • Saturn

  • opencron

  • antares

  • 3. 比較

1、什么是分布式定時(shí)任務(wù)

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

2. 常見開源方案

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

elastic-job

elastic-job 是由當(dāng)當(dāng)網(wǎng)基于quartz 二次開發(fā)之后的分布式調(diào)度解決方案 , 由兩個相對獨(dú)立的子項(xiàng)目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ù)

亮點(diǎn):

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

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

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

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

image

xxl-job

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

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

,同時(shí)技術(shù)文檔比較完善

系統(tǒng)架構(gòu)圖:

image

quartz

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

image

Saturn

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

亮點(diǎn):

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

缺點(diǎn):

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

opencron

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

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

antares

優(yōu)點(diǎn):

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

缺點(diǎn):

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

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

image

3。比較

此處列出了幾個代表性的開源產(chǎn)品

image
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容