分布式定时任务 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天 ✌
1. 分布式定时任务
概念: 把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
特点: 自动化、平台化、分布式(分布式系统下进行任务调度,突破单机定时任务的性能瓶颈)、伸缩式(采用集群方式部署,可随时按需扩容)、高可用(单点故障不影响,可实现故障转移)
按触发时机分类:
- 定时任务
- 延时任务
- 周期任务
按执行方式分类:
- 单机任务:随机触发一台机器执行,适用于计算量小、并发度低的任务
- 广播任务:广播到所有机器上执行同一个任务(如:日志清理)
- Map任务:一个任务可分出多个子任务,每个子任务负责一部分计算,适用于大计算量的情况
- MapReduce任务:在map任务的基础上对分出的小任务再进行汇总计算
2. 整体架构
核心问题:触发(Trigger组件,生成触发事件)、调度(Scheduler组件,分配、管理任务)、执行(Executor组件,执行任务逻辑),除此之外还需提供一个控制台(Admin),提供任务管理和干预的功能。
各组件设计:
(1)触发器 设计约束:
- 支持大量任务
- 支持秒级调度
- 周期任务多次执行
- 保证秒级扫描的高性能,避免资源浪费
实例方案: 定期扫描 + 延时消息 (定期扫描DB,使用延时MQ)、时间轮(环形数组,每个节点存储同时间执行的任务链表,使用多级时间轮实现时、分、秒的定时,该方法的时间复杂度可保持在,且资源循环利用,不会造成浪费,太妙了~)
(2)调度器
- 资源调度:节点选择策略(随机节点、广播执行、分片执行)
- 任务编排:有向无环图进行可视化任务编排
- 故障转移:分片任务基于一致性哈希策略分布任务,当某一executor异常时,分发到其他executor上。
(3)执行器
机器注册:基于注册中心实现执行器的弹性扩缩容、日志服务、回调请求、状态上报