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

73 阅读4分钟

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

今日内容

学习完了青训营课程 后端入门 - 中间件 中的 抖音春节活动 & 定时任务发展之路 、 分布式定时任务实现原理 和 分布式定时任务业务实践 之后的一些总结。

课程内容

  1. 前言
  2. 发展历程
  3. 实现原理
  4. 业务应用

1. 前言

分布式定时任务

自动化、定时任务、海量数据、高效稳定

2. 发展历程

2.1 Windows 批处理

.bat 文件

2.2 Windows 任务计划程序

2.3 Linux 命令 CronJob

运维必会

2.4 单机定时任务

java 中的 Timer,go 中的 Ticker

ScheduledExecutorService

2.5 任务调度 - Quartz

2.6 分布式定时任务

  • 平台化管理
  • 分布式部署
  • 支持海量数据

定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程

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

  • 特点:
    1. 自动化:全自动化完成定时任务的调度和执行
    2. 平台化:基于平台化的思维管控一系列的分布式定时任务
    3. 分布式:在分布式系统环境下运行任务调度,突破单机定时任务的性能瓶颈
    4. 伸缩性:采用集群方式部署,可以随时按需扩缩容
    5. 高可用:单点故障不影响最终任务结果,可以做到故障转移
  • 执行方式:
    1. 单机任务:随机触发一台机器执行任务,适用于计算量小、并发度低的任务
    2. 广播任务:广播到所有机器上执行同一个任务,比如所有机器一起清理日志
    3. Map 任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务
    4. MapReduce 任务:在 Map 任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果做汇总的任务

3. 实现原理

3.1 核心架构

分布式定时任务核心要解决触发、调度、执行三个关键问题

  • 触发器:Trigger,解析任务,生成触发事件
  • 调度器:Scheduler,分配任务,管理任务生命周期
  • 执行器:Executor,获取执行任务单元,执行任务逻辑
  • 控制台:Admin,提供任务管理和干预的功能

功能架构

  • Admin:元数据存储,元数据状态流转,任务分片,任务依赖,规则引擎,任务暂停/恢复,日志管理,监控报警,指标统计
  • Trigger:解析引擎,Scanner,可靠投递,状态流转,补偿策略
  • Scheduler:调度,负载均衡,幂等控制,容错,故障转移,限流,计费,优雅启停,状态管控
  • Executor:注册,任务获取,任务执行,状态上报,日志处理,本地幂等,任务回调

3.2 控制台

基本概念

  • 任务:Job,任务元数据
    • 基础信息
    • 调度时机
    • 执行行为
    • 执行方式
  • 任务实例:JobInstance,任务运行的实例
    • JobId
    • 触发时间
    • 状态 & 结果
    • 过程信息
  • 任务结果:JobResult,任务实例运行的结果
  • 任务历史:JobHistory

3.3 触发器

核心职责:给定一系列任务,解析他们的触发规则,在规定时间点触发任务的调度

设计约束

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

3.4 调度器

  • 资源来源
    • 业务系统提供机器资源
      • 优点:任务执行逻辑与业务系统共用同一份资源,利用率更高
      • 缺点:更容易发生定时任务脚本影响在线服务的事故;不能由定时任务平台控制扩缩容
    • 定时任务平台提供机器资源
      • 优点:任务执行逻辑与业务系统提供的在线服务隔离,避免相互影响;可以支持优雅地扩缩容
      • 缺点:消耗更多机器资源;需要额外为定时任务平台申请接口调用权限,而不能直接继承业务系统的权限
  • 节点选择
    • 随机节点执行:使用场景:定时对账
    • 广播执行:适用场景:批量运维。
    • 分片执行:按照用户自定义分片逻辑进行拆分,分发到集群中不同节点并执行,提升资源利用效率。使用场景:海量日志统计。
  • 任务编排
  • 故障转移

3.5 执行器

注册、调度、回调、心跳检测

4. 业务应用