分布式定时任务是非常核心的分布式系统,下面我就全面来详解分布式定时任务以及分布式定时任务框架@mikechen
什么是分布式定时任务
分布式定时任务是指将定时任务分布到多个节点上执行,以实现高可用性和可伸缩性的任务调度方式。
分布式定时任务作用
很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。
在分布式系统中,定时任务需要在多个节点上执行,因此需要一种机制来确保任务在各个节点上同步执行,这就是分布式定时任务的作用。
分布式定时任务框架
1.quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。
Quartz提供了丰富的任务调度功能,包括:
- 任务调度:支持按照特定的时间规则或者一次性的执行任务。
- 作业管理:支持添加、删除、暂停、恢复等任务管理操作。
- 分布式任务:支持集群部署,任务调度中心可以自动将任务分发到多个节点执行,提高了任务调度的可用性和容错性。
- 任务监听:支持任务执行前后的监听器,可以在任务执行前后做一些额外的操作。
- 错误处理:支持任务执行过程中的异常处理和错误重试机制。
Quartz 核心类有以下三部分:
- 任务 Job : 需要实现的任务类,实现 execute() 方法,执行后完成任务;
- 触发器 Trigger : 包括 SimpleTrigger 和 CronTrigger;
- 调度器 Scheduler : 任务调度器,负责基于 Trigger触发器,来执行 Job任务;
三者的关系,如下图所示:
2.elastic-job
Elastic-Job是一款基于Java开发的分布式任务调度框架,Elastic-Job可以用于分布式任务调度和分布式数据处理等场景。
Elastic-Job包含两个独立的子项目:Elastic-Job-Lite和Elastic-Job-Cloud。
Elastic-Job-Lite 定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。
而 Elastic-Job-Cloud 使用 Mesos Docker 的解决方案,额外提供资源治理、应用分发以及进程隔离等服务.
3.xxl-job
XXL-Job是大众点评员工于2015年发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接入多家公司线上产品线,架构如下图所示:
XXL-Job将调度行为抽象为调度中心这个公共平台,平台自身不承担业务逻辑,调度中心负责发起调度请求。
任务被抽象成分散的 JobHandler,交由执行器管理,执行器负责接收调度请求并执行对应的 JobHandler 中的业务逻辑。
XXL-Job的特点:
- 轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单;
- 只依赖数据库作为集群注册中心,接入开发简单,不需要ZK;
- 高可用、解耦、高性能、监控报警、分片、重试、故障转移;
- 团队持续开发,社区活跃;
- 支持后台直接查看每个任务执行实时日志;
除此之外,还有saturn、opencron、antares等分布式定时任务开源框架,更多分布式请查看:史上最强分布式系统详解(非常全面)。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》