從定時器的選型,到透過源碼看XXL-Job(上)


此內容來自一位好朋友的分享,也是當初建議我寫博客提升的朋友。內容只做轉載,未做修改。

定時任務選型

背景

  目前項目定時任務采用Spring Task實現,隨着項目需求的迭代,新增的定時任務也越來越多。我們也即將面臨如下

問題:

  • 任務維護管理(不夠直觀,不方便管理)

  • 單機事故 (故障)

  • 任務調度混亂(串行,並行。串行可能阻塞)

那么,我們的需求是什么?

  • 圖形化管理
  • 支持集群,甚至分布式
  • 任務調度靈活

選型

  重點看了幾個目前比較流行的框架:
  • quartz
  • xxl-job
  • elastic-job
  • saturn
  豪不誇張的說,java技術棧中的定時任務框架有兩種: quartz其它

Quartz

  quartz是一個基於數據庫的調度框架。支持集群,調度靈活。

缺點:

  • 無圖形化界面,只提供了API,不方便管理
  • 通過搶占數據庫鎖來防止多個節點執行同個任務。這也意味着當存在過多節點,任務多且執行頻繁的時候可能會有性能問題。

xxl-job

  xxl-job是一款基於quartz封裝框架。相比quartz, 其支持友好的圖形化界面,功能更為強大。

特色功能:

  • 調度器與執行器分離設計
  • 支持集群,支持分布式(通過分片可完美支持)
  • 任務管理靈活、強大(調度器管理頁面可直接寫源碼)
  • 多語言支持
  • 調度日志及執行日志
  • 負載均衡
  • 故障轉移、失敗重試
  • 全異步,更輕量
  • 線程隔離(快、慢線程池)

缺點:

  • 搶占鎖問題

Elastic-job-lite

  elastic-job也是一款基於quartz封裝的框架。對比xxl-job, 兩者設計上完全不同,xxl-job為中心化設計,通過調度中心下發調度指令給執行中心。而elastic-job則為無中心化設計。

特色功能:

  • 無中心化設計
  • 解決了quartz的搶占數據庫鎖問題,改為了zookeeper。
  • 分片功能強大(整體都傾向於分片設計)

缺點:

  • 引入分片機制后,會引入更多復雜的問題,例如拿到分片的機器執行失敗怎么處理等,目前還不是很完善
  • 引入注冊中心zookeeper。 比較重,還要考慮zookeeper集群

Saturn

  saturn 是基於elastic-job-lite的封裝,整體特性與elastic-job-lite相似。故不作具體描述。

對比

以上,分別簡述了各個框架,接下來,來個更為直觀的表格:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM