持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
目前国内市面上有调度框架如下quartz、spring Schedule、TBSchedule、xxl-job、elastic-job、Saturn、……
Quartz:关注的是定时任务而非数据,Java编写的开源作业调度框架,需要二次开发,基本上所有产品都是基于Quartz进行开发的
TBSchedule已经不更新、spring Schedule不具备分布式能力使用也不方便。Saturn是基于elastic-job的,真正可比的就两xxl-job,elastic-job
elastic-job:无中心化设计,调度和执行一起部署,使用ZooKeeper作为注册中心进行作业注册和监控信息存储实现分布式能力。
xxl-job:中心化设计,调度和执行分开部署,统一使用一个调度中心进行任务的调度并且只负责调度的发起,同时集成任务的管理等。而执行器分散执行。
简单比喻无中心设计和中心化设计区别,任务调度简单讲就是解决三个问题谁什么时间去做什么事。中心化设计就是设计一个中心负责指定时间指定谁去做事的,但是具体怎么做也可以指定也可以不指定也可以指定,也就是说各个节点不知道自己什么时候要做什么事坐等中心的安排。无中心就是不用一个中心去指定,各个节点自己就知道什么时候需要做什么事,但也不能每次大家都一起执行,所以由一个负责人指定这次由谁执行。
feature | XXL-JOB | elastic-job | Saturn |
---|---|---|---|
背景 | 大众点评开源 | 当当网开源 | 唯品会基于elastic-job1.0开发 |
依赖 | mysql | ZooKeeper | ZooKeeper |
上手难度 | 简单 | 较难 | 较难 |
社区 | 文档多,登记使用公司400+,star17.5k | 基本部署、开发文档,登记使用公司80+,star6.8k | 文档极少,登记使用公司10+,star2k |
运维页面 | 任务CURD,查看日志、报表 | 任务CURD、作业状态 | 支任务CURD,查看日志、报表 |
执行日志追朔 | 可查询日志 | 可实现任务执行前和执行后监听 | 可查询日志 |
失败处理 | 重试、转移、报警 | 重试、转移、报警自行订阅实现扩展 | 重试、转移、报警自行实现接口扩展 |
弹性扩容缩容 | 支持,基于mysql分布式 | 支持,向ZK注册 | 支持,向ZK注册 |
高可用 | 支持,调度中心HA,基于数据库 | 支持,基于ZK选举 | 支持,基于ZK选举 |
任务分片 | 支持,分片广播 | 支持 | 支持 |
触发方式 | 时间、事件(API触发) | 时间 | 时间、事件 |
elastic-job: 缺少报警、日志查看等实现,但有弹性分片、无中心性能更高等特点,两年前很火,但是停更了两年,但去年中又更新了,停更两年后热度下降,而且elastic-job依赖于ZooKeeper
Saturn:弥补了elastic-job的好多短板,增加日志、报表、告警等功能,持续更新、功能更加完善,但是社区不活跃、文档少。
xxl-job简单、功能强大、可扩展性、社区活跃,监控预警、高可用等都有较好的实现,但集群均基于数据库锁,数据库瓶颈,还有在并发很高时会丢失任务。