定时任务是软件开发中必不可少的中间件。
分布式定时任务可以解决分布式下,多主机,多应用,大数据量的处理问题。
常用的分布式框架或工具有:
- ElasticJob: 当当网的,2020年成为Apache项目,特点是弹性伸缩,超大规模数据也能应对。
- Saturn:唯品会的,Saturn是在当当开源的Elastic Job基础上,结合各方需求和我们的实践见解改良而成,怎么说呢,改良了总比不改的好用些。
- xxl-job:个人开源项目,但是:简单,功能齐全,好用!比ElasticJob使用要简单。
- PowerJob:阿里工程师开源项目,功能齐全,使用简单,推荐!跟xxl-job一样简单,但功能上更齐全。
- SchedulerX :阿里云的,按量付费,稳定,省事,超大规模数据仍可以使用,优点是省事简单,缺点是花钱。不开源,不免费!
目前我个人推荐PowerJob,使用简单,功能齐全,工程成本低。PowerJob作者自己对各个框架的对比如下:
QuartZ | xxl-job | SchedulerX 2.0 | **PowerJob | |
---|---|---|---|---|
定时类型 | CRON | CRON | CRON、固定频率、固定延迟、OpenAPI | CRON、固定频率、固定延迟、OpenAPI |
任务类型 | 内置Java | 内置Java、GLUE Java、Shell、Python等脚本 | 内置Java、外置Java(FatJar)、Shell、Python等脚本 | 内置Java、外置Java(容器)、Shell、Python等脚本 |
分布式任务 | 无 | 静态分片 | MapReduce动态分片 | MapReduce动态分片 |
在线任务治理 | 不支持 | 支持 | 支持 | 支持 |
日志白屏化 | 不支持 | 支持 | 不支持 | 支持 |
调度方式及性能 | 基于数据库锁,有性能瓶颈 | 基于数据库锁,有性能瓶颈 | 不详 | 无锁化设计,性能强劲无上限 |
报警监控 | 无 | 邮件 | 短信 | 邮件,提供接口允许开发者扩展 |
系统依赖 | 关系型数据库(MySQL、Oracle…) | MySQL | 人民币 | 任意Spring Data Jpa支持的关系型数据库(MySQL、Oracle…) |
DAG工作流 | 不支持 | 不支持 | 支持 | 支持 |