
分布式定时任务是非常核心的分布式系统,下面我就全面来详解分布式定时任务以及分布式定时任务框架@mikechen
分布式定时任务
分布式定时任务是指将任务分布在多个节点上并按照预定的时间执行的任务。

分布式定时任务应用
分布式定时任务常常用于需要周期性执行的批处理任务、数据同步任务、定时报表生成等场景。
如下图所示:

很多业务场景需要,我们某一特定的时刻去做某件任务,定时备份数据库、文件系统、定时生成各种业务报表等等。
分布式定时任务框架
1.quartz
Quartz 是一个开源的任务调度框架,支持分布式部署,可以实现复杂的任务调度需求,如基于日历、间隔、CRON 表达式等的任务调度。

Quartz 的核心组件主要包括以下几个:
1.Scheduler(调度器)
调度器是 Quartz 的核心组件之一,负责调度和执行作业。
它可以加载作业和触发器,并根据配置的时间表和触发条件调度作业的执行。
2.Job(作业)
作业是需要定时执行的任务或业务逻辑的封装,在 Quartz 中,开发人员需要实现 Job 接口来定义具体的作业逻辑。
每个作业都有自己的执行方法,Quartz 调度器会按照配置的时间规则或触发器来调度执行作业。
3.Trigger(触发器)
触发器用于定义作业的执行时机。它确定了作业何时被调度执行。
Quartz 提供了多种类型的触发器,包括 SimpleTrigger、CronTrigger 等。
SimpleTrigger 用于一次性或重复执行简单的任务,而 CronTrigger 则允许根据 Cron 表达式定义更灵活和复杂的调度规则。
4.JobDetail(作业详情)
JobDetail 是作业的详细信息,包括:作业的类名、作业的名称、所属的组名等。
每个作业都有对应的 JobDetail,用于告诉 Quartz 如何执行这个作业。
5.JobStore(作业存储)
JobStore 是 Quartz 中负责存储作业和触发器信息的组件,它可以将作业和触发器的信息持久化到数据库中,以确保在应用重启后能够恢复作业调度状态。
Quartz 提供了多种类型的 JobStore,包括 RAMJobStore、JDBCJobStore 等,可以根据需要进行配置。
2.elastic-job
Elastic-Job是一款基于Java开发的分布式任务调度框架,Elastic-Job包含两个独立的子项目:Elastic-Job-Lite和Elastic-Job-Cloud。
1.Elastic-Job-Lite
Elastic-Job-Lite 是 Elastic-Job 的一个子项目,主要用于简化分布式任务调度开发。

它提供了简单的 jar 包形式的分布式任务协调服务,Elastic-Job-Lite 主要面向简单的任务调度场景,如:定时任务、批处理等。
2.Elastic-Job-Cloud
Elastic-Job-Cloud 是 Elastic-Job 的另一个子项目,它是一个基于 Mesos 和 Docker 的分布式任务调度框架。

与 Elastic-Job-Lite 不同,Elastic-Job-Cloud 提供了更丰富的功能和更强大的扩展性,包括:资源治理、应用分发、进程隔离等服务。
Elastic-Job-Cloud 更适用于复杂的任务调度场景,如大规模数据处理、流式计算等。
3.xxl-job
XXL-Job 是一个功能强大且易于使用的分布式任务调度平台,通过它可以方便地实现各种任务调度需求,并提供了丰富的监控和管理功能。
XXL-Job是大众点评员工于2015年发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接入多家公司线上产品线,架构如下图所示:

XXL-Job 的主要功能包括:
- 任务调度管理: 提供了任务的新增、修改、删除、暂停、恢复等管理功能,通过可视化界面操作,简化了任务调度的配置和管理过程。
- 任务执行日志: 记录任务的执行日志,包括执行时间、执行结果、执行耗时等信息,方便用户查看和分析任务的执行情况。
- 分布式任务调度: 支持在分布式环境下部署和调度任务,通过调度中心进行统一管理,实现任务的分发和执行。
- 任务执行器: 提供了灵活的任务执行器接口,支持多种任务类型的执行,包括简单的 Java 任务、Shell 脚本任务等。
- 任务监控与报警: 提供了任务执行状态的实时监控和报警功能,用户可以及时发现任务执行异常并采取相应的措施。
以上就是分布式定时任务介绍,更多分布式请查看:史上最强分布式系统详解(非常全面)。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》
