定時任務框架選型

定時任務框架選型

quartz

light-task-scheduler

elastic-job

xxl-job

Saturn

opencron

antares

1.quartz

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

優(yōu)點

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

缺點

- 同一個任務只能有一個節(jié)點運行,其他節(jié)點將不執(zhí)行任務,性能低,資源浪費

- 當碰到大量短任務時,各個節(jié)點頻繁的競爭數(shù)據(jù)庫鎖,節(jié)點越多這種情況越嚴重。性能會很低下

- quartz 的分布式僅解決了集群高可用的問題,并沒有解決任務分片的問題,不能實現(xiàn)水平擴展

結論:quartz作為開源作業(yè)調(diào)度中的佼佼者,是作業(yè)調(diào)度的首選,但是因為存在一些問題,其他的定時任務框架有好多是基于quartz做的拓展式的開發(fā),能夠體現(xiàn)quartz作為作業(yè)調(diào)度的作用,同事也彌補了其缺陷,所以,暫時不考慮

2.light-task-scheduler

框架概況

LTS(light-task-scheduler)主要用于解決分布式任務調(diào)度問題,支持實時任務,定時任務和Cron任務。有較好的伸縮性,擴展性,健壯穩(wěn)定性而被多家公司使用。

LTS 有主要有以下四種節(jié)點:

- JobClient:主要負責提交任務, 并接收任務執(zhí)行反饋結果。

- JobTracker:負責接收并分配任務,任務調(diào)度。

- TaskTracker:負責執(zhí)行任務,執(zhí)行完反饋給JobTracker。

- LTS-Admin:(管理后臺)主要負責節(jié)點管理,任務隊列管理,監(jiān)控管理等。

其中JobClient,JobTracker,TaskTracker節(jié)點都是無狀態(tài)的。 可以部署多個并動態(tài)的進行刪減,來實現(xiàn)負載均衡,實現(xiàn)更大的負載量, 并且框架采用FailStore策略使LTS具有很好的容錯能力。

LTS注冊中心提供多種實現(xiàn)(Zookeeper,redis等),注冊中心進行節(jié)點信息暴露,master選舉。(Mongo or Mysql)存儲任務隊列和任務執(zhí)行日志, netty or mina做底層通信, 并提供多種序列化方式fastjson, hessian2, java等。

LTS支持任務類型:

- 實時任務:提交了之后立即就要執(zhí)行的任務。

- 定時任務:在指定時間點執(zhí)行的任務,譬如 今天3點執(zhí)行(單次)。

- Cron任務:CronExpression,和quartz類似(但是不是使用quartz實現(xiàn)的)譬如 0 0/1 * * * ?

支持動態(tài)修改任務參數(shù),任務執(zhí)行時間等設置,支持后臺動態(tài)添加任務,支持Cron任務暫停,支持手動停止正在執(zhí)行的任務(有條件),支持任務的監(jiān)控統(tǒng)計,支持各個節(jié)點的任務執(zhí)行監(jiān)控,JVM監(jiān)控等等.

架構圖


流程圖

結論:集群部署,支持分片,git上有較完善的文檔,有可視化界面,由阿里提供,具有比較完善的拓展方式,功能也較完善,但是已經(jīng)三年沒有維護,原則上要選擇社區(qū)活躍的架構,所以不考慮

3.antares

?Antares特性

基于Quartz的分布式調(diào)度

- 一個任務僅會被服務器集群中的某個節(jié)點調(diào)度,調(diào)度機制基于成熟的Quartz,antares內(nèi)部會重寫執(zhí)行邏輯;

并行執(zhí)行

- 用戶可通過對任務預分片,有效提升任務執(zhí)行效率;

失效轉(zhuǎn)移

- 客戶端實效轉(zhuǎn)移:當某個客戶端實例在執(zhí)行任務中宕機時,其正在執(zhí)行的分片將重新由其他客戶端實例執(zhí)行;

- 服務器失效轉(zhuǎn)移:當服務器集群中某個節(jié)點宕機時,其正在調(diào)度的任務將轉(zhuǎn)移到其他節(jié)點去調(diào)度;

彈性擴容

- 客戶端擴容:客戶端可通過增加應用實例,提升任務執(zhí)行的效率;

- 服務器擴容:服務器集群可通過增加節(jié)點,提升集群任務調(diào)度的服務能力;

進程級的應用實例

- antares通過ip+進程號標識客戶端應用實例,因此支持單機多應用實例部署;

任務依賴

- antares支持樹形任務依賴,當某任務執(zhí)行完成后,會通知其后置任務執(zhí)行;

任務報警

- antares支持基本的任務超時報警,失敗報警等;

管理控制臺

- 用戶可通過控制臺antares-tower對任務進行基本操作,如觸發(fā),暫停,監(jiān)控等。

Antares架構

結論:集群部署,以zk為注冊中心,支持分片,git上有較完善的文檔,有可視化見面,可彈性擴容,用redis來做持久化,基本功能也完備,但是已經(jīng)三年沒有維護,原則上要選擇社區(qū)活躍的架構,所以不考慮

4.opencron

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

缺點

- 僅支持 kill任務, 現(xiàn)場執(zhí)行,查詢?nèi)蝿者\行狀態(tài) 等, 主要功能是著重于任務的修改和查詢上。

- 不能動態(tài)的添加任務以及任務分片。

結論:功能較簡單,集群部署,文檔較少,已經(jīng)三年沒有更新,不做考慮

5.Saturn

Saturn (任務調(diào)度系統(tǒng))是唯品會開源的一個分布式任務調(diào)度平臺,取代傳統(tǒng)的Linux Cron/Spring Batch Job的方式,做到全域統(tǒng)一配置,統(tǒng)一監(jiān)控,任務高可用以及分片并發(fā)處理。

Saturn是在當當開源的Elastic Job基礎上,結合各方需求和我們的實踐見解改良而成。

重要特性

- 支持多種語言作業(yè),語言無關(Java/Go/C++/PHP/Python/Ruby/shell)

- 支持秒級調(diào)度

- 支持作業(yè)分片并行執(zhí)行

- 支持依賴作業(yè)串行執(zhí)行

- 支持作業(yè)高可用和智能負載均衡

- 支持異常檢測和自動失敗轉(zhuǎn)移

- 支持異地容災

- 支持多個集群部署

- 支持跨機房區(qū)域部署

- 支持彈性動態(tài)擴容

- 支持優(yōu)先級和權重設置

- 支持docker容器,容器化友好

- 支持cron時間表達式

- 支持多個時間段暫停執(zhí)行控制

- 支持超時告警和超時強殺控制

- 支持灰度發(fā)布

- 支持異常、超時和無法高可用作業(yè)監(jiān)控告警和簡易的故障排除

- 支持失敗率最高、最活躍和負荷最重的各域各節(jié)點TOP10的作業(yè)統(tǒng)計

- 經(jīng)受住唯品會生產(chǎn)800多個節(jié)點,每日10億級別的調(diào)度考驗

結論:該框架具有非常完善的功能點,基于elastic-job進行開發(fā),擁有quartz的強大功能,基本包含初版elastic-job的基本功能點,當前更新的活躍程度一般,有非常豐富的開發(fā)文檔以及部署文檔,可以作為參考框架之一。

6.xxl-job

XXL-JOB是一個分布式任務調(diào)度平臺,其核心設計目標是開發(fā)迅速、學習簡單、輕量級、易擴展。

特性

1.中心制

調(diào)度中心HA(中心式):調(diào)度采用中心式設計,“調(diào)度中心”自研調(diào)度組件并支持集群部署,可保證調(diào)度中心HA;

執(zhí)行器HA(分布式):任務分布式執(zhí)行,任務”執(zhí)行器”支持集群部署,可保證任務執(zhí)行HA;

2.高可用

調(diào)度中心:支持多節(jié)點部署,基于數(shù)據(jù)庫行鎖,在觸發(fā)器的名稱和執(zhí)行時間相同前提下,確保僅有一個調(diào)度中心節(jié)點會執(zhí)行任務下發(fā)工作。

執(zhí)行器:支持多節(jié)點部署,通過調(diào)度中心選擇其中的執(zhí)行器,下發(fā)任務來執(zhí)行。

3.策略路由

忙碌轉(zhuǎn)移、故障轉(zhuǎn)移、最先節(jié)點、最后節(jié)點、節(jié)點輪詢、節(jié)點隨機、一致性HASH、最少使用節(jié)點、最久未用節(jié)點、分片廣播。

4.阻塞處理

單機串行、丟棄后續(xù)調(diào)度、覆蓋之前調(diào)度。

5.故障處理

故障轉(zhuǎn)移、失敗重試、任務超時中斷。

以上是項目的一些主要特性,還包括告警、GLUE、各種語言支持、國際化、容器化等等的特性,內(nèi)容豐富,功能強大

而且相對來說簡單易用,部署簡單,配置簡單

缺點

中心化部署,數(shù)據(jù)庫行鎖,性能會存在一定的瓶頸,但是對于公司比較小的流量來說,足夠使用

7.elastic-job

ElasticJob 是面向互聯(lián)網(wǎng)生態(tài)和海量任務的分布式調(diào)度解決方案,由兩個相互獨立的子項目 ElasticJob-Lite 和 ElasticJob-Cloud 組成。 它通過彈性調(diào)度、資源管控、以及作業(yè)治理的功能,打造一個適用于互聯(lián)網(wǎng)場景的分布式調(diào)度解決方案,并通過開放的架構設計,提供多元化的作業(yè)生態(tài)。 它的各個產(chǎn)品使用統(tǒng)一的作業(yè) API,開發(fā)者僅需一次開發(fā),即可隨意部署。

特性

1.分布式調(diào)度

無作業(yè)調(diào)度中心節(jié)點,基于部署作業(yè)節(jié)點到達設定時間點時各自觸發(fā)調(diào)度;注冊中心僅用于作業(yè)注冊和監(jiān)控信息存儲,而主作業(yè)節(jié)點僅用于處理分片和清理等功能。

2.作業(yè)高可用

提供安全的方式執(zhí)行作業(yè)。將分片總數(shù)設置為1,并使用多于1臺的服務器執(zhí)行作業(yè),作業(yè)將會以1主n從的方式執(zhí)行。

一旦執(zhí)行作業(yè)的服務器崩潰,等待執(zhí)行的服務器將會在下次作業(yè)啟動時替補執(zhí)行。開啟失效轉(zhuǎn)移功能效果更好,可以保證在本次作業(yè)執(zhí)行時崩潰,備機立即啟動替補執(zhí)行。

3.資源利用率

提供最靈活的方式,最大限度的提高執(zhí)行作業(yè)的吞吐量。將分片項設置為大于服務器的數(shù)量,最好是大于服務器倍數(shù)的數(shù)量,作業(yè)將會合理的利用分布式資源,動態(tài)的分配分片項。

4.分片與業(yè)務解耦

不直接提供數(shù)據(jù)處理的功能,框架只會將分片項分配至各個運行中的作業(yè)服務器,開發(fā)者需要自行處理分片項與真實數(shù)據(jù)的對應關系。

同時可個性化參數(shù)(shardingItemParameter),分片項匹配對應關系,用于將分片項的數(shù)字轉(zhuǎn)換為更加可讀的業(yè)務代碼。

5.豐富的策略與擴展

提供了很多默認的策略機制,并且提供了SPI的擴展點,便于高級用戶進行擴展。

缺點

由于框架比較大,而且接入zookeeper,相對而言比較復雜,需要理解,而且提供的配置項比較多,需要合理使用,正確使用。

比較分析

通過以上幾個框架的描述來看,首先從社區(qū)活躍度來說,前四個已經(jīng)有多年未更新,不再考慮范圍內(nèi),然后從高可用、一致性、故障轉(zhuǎn)移、任務分片、日志追溯、異常告警等來說,后面三種框架基本支持,由于Saturn是基于elasticjob進行二次開發(fā),而且最近的更新時間在三個月,不做考慮,只在elastic-job和xxl-job之間進行考慮。

elastic-job和xxl-job

兩個從功能來說基于相同,不同的是中心化和分布式,xxl-job目前也在往分布式發(fā)展,從性能來說,達到一定的兩級來說,分布式的優(yōu)勢會更大,但是目前公司的流量來說,兩者都已經(jīng)滿足,此處沒有進行性能分析,從github上作者的回復來看,xxl-job支持5000個并發(fā),已經(jīng)足夠滿足業(yè)務需求。

從社區(qū)來說,xxl-job是個人維護的項目,雖然大眾點評已經(jīng)對其二次開發(fā)Ferrari,但是xxl-job基本屬于個人維護,而elastic-job屬于apache shardingsphere子項目,屬于apache旗下,未來肯定會有更多的人參與進開發(fā),社區(qū)活躍度優(yōu)于xxl-job

從框架技術來說,elastic-job引入了很多中間件和技術,相對于xxl-job來說,對于初級業(yè)務開發(fā)人員來說,理解上會相對難一點。

從文檔豐富程度來說,elastic-job只提供了部分比較關鍵的技術點,對于很多細節(jié)需要從源碼著手,xxl-job提供了完備的技術文檔,而且架構相對簡單,便于入手。

綜上考慮,為了后續(xù)業(yè)務發(fā)展萬一達到一定量級,xxl-job難以支持或者錯誤率過高的情況下,而且elasticjob足夠活躍的社區(qū),同時,對于初級業(yè)務開發(fā)而言,不需要完全理解,所以,目前選擇elasticjob來作為未來java定時任務框架

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370