目录
一、背景
目前在开发应用平台中的平台消息发送需要根据消息配置动态生成定时任务,并支持定时任务实时调整。考虑后期进行外部数据源数据同步也需要定时任务,因而有必要增加一个统一的定时任务调度管理界面,方便管理和监控定时任务的运行状态。
二、技术选型
目前市场上主流的任务调度框架主要有quartz、xxl-job、elastic-job。
Quartz是Java的一个开源的作业调度框架,它可以集成到各种各样的应用服务中,提供了强大的任务调度功能。
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。
下面对这几个任务框架进行对比分析:
特性 | quartz | xxl-job | elastic-job |
依赖 | Jdbc支持的关系型数据库(mysql、oracle) | yMsql | zookeeper |
高可用 | 多节点部署,通过竞争数据库锁来保证只有一个节点执行任务,分布式支持不友好 | 基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务,有监控 | 通过zookeeper的注册与发现,可以动态的添加服务器 |
监控告警 | 无 | 发送报警邮件 | 通过事件订阅方式可自行实现 |
管理界面 | 无 | 有 | 有 |
任务分片 | 不支持 | 支持 | 支持 |
1、quartz
优点:可以与spring 集成,支持动态添加任务和集群
缺点:分布式支持不友好、没有自带的管理界面;调度逻辑和执行任务耦合在一起;维护需要重启服务;基于数据库锁调度任务,存在性能瓶颈
总结:针对目前项目情况,利弊相同
2、xxl-job
优点:支持集群部署;提供运维界面、维护成本小、自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);
缺点:相对quartz来说需要多部署调度中心,目前只适用mysql数据库;基于数据库锁调度任务,存在性能瓶颈
总结:针对目前项目情况,利大于弊
3、elastic-job
优点:与spring集成,支持分布式,集群,性能不错
缺点:依赖zookeeper,复杂度增加,可靠性降低,维护成本高
总结:针对目前项目情况,弊大于利
三、结论
结合当前应用平台项目,不考虑数据库的限制选用xxl-job比较合适,如果考虑数据库问题可以使用quartz,自行开发任务管理监控页面即可。
最近注册了一个公众号,分享一些技术经验等,欢迎有兴趣的朋友关注支持,在此非常感谢!