定时任务调度中心简单竞品分析

353 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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:中心化设计,调度和执行分开部署,统一使用一个调度中心进行任务的调度并且只负责调度的发起,同时集成任务的管理等。而执行器分散执行。

简单比喻无中心设计和中心化设计区别,任务调度简单讲就是解决三个问题谁什么时间去做什么事。中心化设计就是设计一个中心负责指定时间指定谁去做事的,但是具体怎么做也可以指定也可以不指定也可以指定,也就是说各个节点不知道自己什么时候要做什么事坐等中心的安排。无中心就是不用一个中心去指定,各个节点自己就知道什么时候需要做什么事,但也不能每次大家都一起执行,所以由一个负责人指定这次由谁执行。

featureXXL-JOBelastic-jobSaturn
背景大众点评开源当当网开源唯品会基于elastic-job1.0开发
依赖mysqlZooKeeperZooKeeper
上手难度简单较难较难
社区文档多,登记使用公司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简单、功能强大、可扩展性、社区活跃,监控预警、高可用等都有较好的实现,但集群均基于数据库锁,数据库瓶颈,还有在并发很高时会丢失任务。