分布式定时任务 | 青训营笔记

75 阅读2分钟

分布式定时任务 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天 ✌

1. 分布式定时任务

概念: 把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。

特点: 自动化、平台化、分布式(分布式系统下进行任务调度,突破单机定时任务的性能瓶颈)、伸缩式(采用集群方式部署,可随时按需扩容)、高可用(单点故障不影响,可实现故障转移)

按触发时机分类:

  • 定时任务
  • 延时任务
  • 周期任务

按执行方式分类:

  • 单机任务:随机触发一台机器执行,适用于计算量小、并发度低的任务
  • 广播任务:广播到所有机器上执行同一个任务(如:日志清理)
  • Map任务:一个任务可分出多个子任务,每个子任务负责一部分计算,适用于大计算量的情况
  • MapReduce任务:在map任务的基础上对分出的小任务再进行汇总计算

2. 整体架构

核心问题:触发(Trigger组件,生成触发事件)、调度(Scheduler组件,分配、管理任务)、执行(Executor组件,执行任务逻辑),除此之外还需提供一个控制台(Admin),提供任务管理和干预的功能。

各组件设计:

(1)触发器 设计约束:

  • 支持大量任务
  • 支持秒级调度
  • 周期任务多次执行
  • 保证秒级扫描的高性能,避免资源浪费

实例方案: 定期扫描 + 延时消息 (定期扫描DB,使用延时MQ)、时间轮(环形数组,每个节点存储同时间执行的任务链表,使用多级时间轮实现时、分、秒的定时,该方法的时间复杂度可保持在O(1)O(1),且资源循环利用,不会造成浪费,太妙了~)

(2)调度器

  • 资源调度:节点选择策略(随机节点、广播执行、分片执行)
  • 任务编排:有向无环图进行可视化任务编排
  • 故障转移:分片任务基于一致性哈希策略分布任务,当某一executor异常时,分发到其他executor上。

(3)执行器

机器注册:基于注册中心实现执行器的弹性扩缩容、日志服务、回调请求、状态上报