这是我参与「第五届青训营」伴学笔记创作活动的第 12 天
一、本堂课重点内容
本节课程主要分为五个方面:
- 分布式定时任务整体架构
- 控制台Admin详细设计
- 触发器Trigger详细设计
- 调度器Scheduler详细设计
- 执行器Executor详细设计
二、详细知识点介绍
1 分布式定时任务发展历史
-
Windows定时任务(.bat文件)
-
Windows任务计划程序
-
Linux命令:CronJob
-
优点:系统命令,使用简单,稳定可靠。
-
缺点:只能控制单台机器,无法适用于其他操作系统。
-
-
单机定时任务:Timer、Ticker、ScheuledExecutorService
-
优点:跨平台。
-
缺点:仅单机可用。
-
-
任务调度:Quartz
-
优点:拥有线程池功能。
-
缺点:仅单机可用。
-
-
分布式定时任务:平台化管理、分布式部署、支持海量数据。
2 分布式定时任务概述
- 概念
- 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
- 分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
- 按触发时机分类:定时任务、延时任务、周期任务。
- 执行方式
- 单机任务:随机触发一台机器执行任务。
- 广播任务:广播到所有机器上执行同一个任务。
- Map任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。
- MapReduce任务:在Map任务的基础上,对所有子任务的结果进行汇总计算。
- 业内流行框架:Xxl-job、SchedulerX、TCT、Elastic-job、Saturn
3 分布式定时任务实现原理
-
整体架构:核心需要解决触发、调度、执行三个关键问题。
- 触发器:解析任务,生成触发事件。
- 调度器:分配任务,管理任务生命周期。
- 执行器:获取执行任务单元,执行任务逻辑。
- 控制台:任务管理及干预。
-
控制台
- Job:任务元数据。
- JobInstance:任务运行的实例。
- JobResult:任务实例运行的结果。
- JobHistory:用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储。
-
触发器
- 核心职责:给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度。
- 设计约束:需支持大量任务、秒级调度、周期任务需要多次执行、需保证秒级扫描的高性能,避免资源浪费。
-
调度器
- 资源来源:业务系统提供机器资源、定时任务平台提供机器资源。
- 资源调度之节点选择:随机节点执行、广播执行、分片执行。
-
执行器
4 业务实践
- 所有需要定时、延时、周期性执行任务的业务场景,都可以考虑使用分布式定时任务。
- eg. 电商、互动、游戏等
- 其他解决方案
- 分布式定时任务。
- 消息队列的延时消息或定时消息。
- 大数据实时计算引擎Flink。
- 大数据离线计算引擎Hive。
- 单机定时任务。