定时任务框架quartz、elastic-job和xxl-job分析
定时任务框架quartz、elastic-job和xxl-job分析
(说明:开发中遇到需要做定时任务的需求,之前查阅了很多资料,比较杂乱,一直没有时间做个整理。第一版用的是quartz,能满足大部分功能,但是老大说要考虑到后期系统的健壮性和拓展性,quartz还是有很多局限的,综合考量下,决定用ealstic-job框架来重构,本文着重分析此框架。其中有很多内容是从其他人的博客中摘抄过来的,记不太清了,如有冒犯,请联系处理!)
一、概述
-
Quartz:
- Java上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能
-
elastic-job:
- 当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.1.5,并且可以支持云开发
-
xxl-job:
- 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
二、对比
对比项 | Quartz | elastic-job | xxl-job |
---|---|---|---|
依赖 | mysql | jdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesos | mysql ,jdk1.7+ , maven3.0+ |
集群、弹性扩容 | 多节点部署,通过竞争数据库锁来保证只有一个节点执行任务 | 通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容 | 使用Quartz基于数据库的分布式功能,服务器超出一定数量会给数据库造成一定的压力 |
任务分片 | 不支持 | 支持 | 支持 |
管理界面 | 无 | 支持 | 支持 |
高级功能 | 无 | 弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持 | 弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进 |