这是我参与「第五届青训营 」伴学笔记创作活动的第12天,今天学习了分布式定时任务,下面是我的笔记。
分布式定时任务
1、定时任务定义
- 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
- 分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
特点
执行模式
- 单机任务
- 广播任务
- Map任务
- MapReduce任务
2、定时任务的实现原理
2.1、发展历程及实现
-
单机定时任务-Timer、Ticker
-
-
单机定时任务-ScheduledExecutorService
-
-
任务调度- Quartz
-
-
分布式定时任务
-
-
定时任务最核心的架构分为 控制台Admin,触发器Trigger,调度器Scheduler,执行器Executor
2.2、具体部分
Admin
- 元数据存储,元数据状态流转,任务分片,任务依赖,规则引擎,日志管理,监控报警
- 所谓任务元数据(Job)是用户对任务属性定义,包括任务类型调度时机,执行行为等等
Trigger
- 核心职责:给定一系列任务,解析触发规则,在规定的时间点触发任务的调度
- 设计约束:
- 需要支持大量的任务
- 支持秒级的调度
- 周期任务需要多次执行
- 需要保证秒级扫描的高性能,避免资源浪费。
- 触发器方案:
- 定期扫描+延时消息
- 时间轮
- 触发器的高可用
- 存储上,不同类别业务做资源隔离。
- 运行时,不同类别、业务分开执行
- 部署时,采用多机房集群部署
- Trigger集群,分布式锁
Scheduler
- 资源调度
- 节点选择
- 任务分片
- 故障转移:确保部分执行单元任务失败,任务最终成功,一致性hash策略,某个Executor失败后分发给其他Executor执行
- 集群部署,完全无状态,消息队列重试机制确保一定执行消费
Executor
- 基于注册中心,做到执行器的弹性扩缩容。
- 注册、调度、回调、心跳检测
3、业务应用
-
所有需要定时、延时、周期性执行任务的业务场景,都可以考虑使用分布式定时任务
-
分布式定时任务
-
单机定时任务
-
延时消息
-
离线计算引擎Hive
-
实时计算引擎Flink