非分布式
单机的容易实现,但应用于集群环境做分布式部署,就会带来重复执行
解决方案有很多比如加锁、数据库等,但是增加了很多非业务逻辑
常见
- Java自带的java.util.Timer类配置比较麻烦,时间延后问题
- ScheduledExecutorService
- SpringBoot框架自带EnableScheduling
缺点
- 不支持集群、不支持统计、没有管理的平台、也没有报警、监控等等
- 在分布式架构当中,有一些场景是需要用到分布式的任务调度的,在同一个服务器中的多个实例任务之间存在着互斥需要进行统一的调度,所以任务调度需要支持高可用、监控、故障告警等一系列措施。
- 需要统一管理和追踪各个的服务节点之间任务调度的结果,并保存记录任务信息等等
分布式
介绍
- 把需要处理的计划任务放入到统一的平台,实现集群管理调度与分布式部署的定时任务 叫做分布式定时任务
- 支持集群部署、高可用、并行调度、分片处理等
Quartz
Quartz Enterprise Job Scheduler
先驱者
支持多种调度方式;提供了丰富的动态调度管理AP
缺点
- Quartz关注点在于定时任务而并非是数据,并没有一套根据数据化处理而定的流程
- 虽然可以实现数据库作业的高可用,但是缺少了分布式的并行调度功能,相对弱点
- 不支持任务分片、没UI界面管理,并行调度、失败策略等也缺少
- 待久化对小业务侵入性强:调度和JOB耦合在一个项目中,调度系统性能受限于业务;quaz底层以“抢占式"获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;
XXL_JOB
Releases · xuxueli/xxl-job · GitHub
- XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台。
- 轻量级,美团点评
优点
- XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展
- 多数互联网公司里面用的技术,周期性业务 如**消息推送、支付对账、数据统计**等,离不开分布式调度
- 在多数互联网公司中,分布式调度XXL-Job占有率很高,是近几年大量流行
- 众多互联网大厂,包括并不限于虎牙、京东、荔枝FM、平安、360、网易 等 一二线大厂
Elasticjob
- 当当开发的分布式任务调度系统,功能强大,采用的是zookeeper实现分布式协调,具有高可用与分片。
- 2020年6月,ElasticJob的四个子项目已经正式迁入Apache仓库
由 2 个相互独立的子项目
ElasticJob-Lite 定位为轻量级无中心化解决方案,使用jar的形式提供分布式任务的协调服务
ElasticJob-Cloud 使用 Mesos 的解决方案,额外提供资源治理、应用分发以及进程隔离等服务
SchedulerX
阿里云,付费
PowerJob
对比选择
Quartz 与Elasticjob
Elastic-Job:不支持动态添加任务,分布式, 支持集群
Quartz: 支持动态添加任务, 伪分布式,支持集群
XXL-JOB 对比
- XXL-Job和Elastic-Job都具有广泛的用户基础和完善的技术文档,都可以满足定时任务的基本功能需求
- xxl-job侧重在业务实现简单和管理方便,容易学习,失败与路由策略丰富, 推荐使用在用户基数相对较少,服务器的数量在一定的范围内的场景下使用
- elastic-job关注的点在数据,添加了弹性扩容和数据分片的思路,更方便利用分布式服务器的资源, 但是学习难度较大,推荐在数据量庞大,服务器数量多的时候使用
对比项 | XXL-JOB | elastic-job |
并行调度 | 调度系统多线程并行 | 任务分片的方式并行 |
弹性扩容 | 使用Quartz基于数据库分布式功能 | 通过zookeeper保证 |
高可用 | 通过DB锁保证 | 通过zookeeper保证 |
阻塞策略 | 单机串行/丢弃后续的调度/覆盖之前的调度 | 执行超过zookeeper的session timeout时间的话,会被清除,重新进行分片 |
动态分片策略 | 以执行器为维度进行分片、支持动态的扩容 | 平均分配/作业名hash分配/自定义策略 |
失败处理策略 | 失败告警/失败重试 | 执行完毕后主动获取未分配分片任务服务器下线后主动寻找可以用的服务器执行任务 |
监控 | 支持 | 支持 |
日志 | 支持 | 支持 |