【课程笔记】分布式定时任务那些事儿 | 青训营笔记

170 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

1、前言

image.png

2、发展历史(重点2.1-2.6)

2.1、windows批处理

  • case 1:10分钟后windows电脑自动关机 image.png

2.2、Windows任务计划程序

  • case 2:每天12:00自动疫情打卡

image.png

2.3、linux命令-CronJob

  • case 3:每天2:30定时清理机器日志

image.png

  • 特点:
    • linux命令,使用简单,稳定可靠
    • 只能控制单台机器,且无法适用于其他操作系统

2.4、单机定时任务-Timer、Ticker

  • case 4:每个5min定时刷新本地缓存数据 image.png
  • 特点:
    • 跨平台
    • 仅单机可用

2.5、单机定时任务-ScheduledExecutorService

  • case 5:每隔5min定时执行 image.png
  • 特点:
    • 拥有线程池功能
    • 仅单机可用

2.5、任务调度-Quartz

image.png

  • 特点
    • 单任务极致控制
    • 没有负载均衡机制

2.6、分布式定时任务

  • 什么是分布式定时任务?

    • 定时任务:是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程
    • 分布式定时任务是把分散的、可靠性差的定时任务纳入同意的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
  • 按触发时机分配:

    • 定时任务:特定时间出发,比如今天15:06执行
    • 延时任务:延时出发,比如10s后执行
    • 周期任务:固定周期时间,或固定频率周期调度触发,比如每天12点或者每隔5s执行。
  • 特点:

    • 自动化:全自动完成定时任务的调度和执行。
    • 平台化:基于平台化的思维管控一些列的分布式定时任务。
    • 分布式:再分布式系统环境下运行任务调度,突破单机定时任务的性能瓶颈。
    • 伸缩性:采用集群方式部署,可以随时按需扩缩容。
    • 高可用:单点故障不影响最终任务结果,可以做到故障转移。
  • 按照执行方式分类

    • 单机任务:随机触发一台机器执行任务,适用于计算量小,并发度低的任务。
    • 广播任务:广播导所有机器上执行同一个任务,比如所有机器一起清理日志。
    • Map任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务。
    • MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果做汇总的任务。

2.7、业内定时任务框架

image.png

2.7.1、业内定时任务框架-Xxl-job

image.png

2.7.2 业内定时任务框架-SchedulerX

image.png

2.7.3 TCT

image.png

2.8、知识面扩充

  • 分布式定时任务 VS 单机定时任务
    • 关系:都可以实现自动化的定时、延时、周期任务调度;
    • 差异:分布式定时任务可制成更大的业务体量;分布式定时任务的性能、伸缩性、稳定性更高;
  • 分布式定时任务 VS 大数据处理引擎
    • 关系:都可以对海量数据做处理
    • 差异:定时给并不是大数据处理引擎要解决的核心问题;大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务除了能做这个之外,还可以调用HTTP、RPC服务;

2.9小结:

image.png

3、实现原理

3.1 核心架构(重要)

  • 分布式定时任务核心要解决**触发、调度、执行(单个节点如何工作)**3个关键问题
  • 分为4个部分:
    • 触发器:Trigger,解析任务,生成触发事件
    • 调度器:Scheduler,分配任务,管理任务生命周期
    • 执行器:Executor,获取执行任务但愿,执行任务逻辑
    • 控制台:Admin,提供任务管理和干预的功能

image.png

3.1.1、数据流

image.png

3.1.2、功能架构

image.png

3.2、控制台

3.2.1、基本概念

image.png

  • 为什么1对n?
    • 我们的任务可以执行多次,每次执行job,都会生成多个jobinstance
    • 如果jobinstance运行失败了,会重试,会生成多个jobResult
    • 修改了job,会记录,多次修改就会产生多个jobhistory

3.2.2、任务元数据(job)

image.png

3.2.3、任务实例(jobinstance)

image.png

3.3、触发器

3.3.1 触发器-核心职责

image.png

3.3.2、触发器-方案1(重要)

  • 扫描器定时扫描数据库,交给processor,再传给延时MQ,并修改DB中的状态,

image.png

3.3.3、触发器-方案2(重要)

  • 时间轮(Quartz所用方案) image.png image.png image.png image.png
  • 问题:刻度不够怎么办?
    • 解决1:引入count,计算轮数
    • 解决2:使用多级时间轮存储任务 image.png

3.3.4、触发器-高可用

image.png

3.3.4、高可用-问题引出

  • 避免单点故障 image.png
  • 产生问题:同一任务1肯能多次除触发,导致业务紊乱

3.3.4、高可用-数据库行锁模式

image.png

  • 产生问题:多台机器频繁竞争数据锁,节点越多性能越差。

3.3.4、高可用-分布式锁模式

image.png

3.4、调度器

image.png

3.4.1、调度器-资源来源

image.png

3.4.2、调度器-资源调度-节点选择(重要)

image.png

3.4.2、调度器-资源调度-任务分片(重要)

image.png

3.4.2、调度器-高级特性-任务编排(重要)

image.png

3.4.3、调度器-高级特性-故障转移(重要)

image.png

  • 一致性hash策略分发任务:

3.4.4、调度器-高可用

image.png

3.5、执行器

image.png

3.6、本章小结

image.png

4、业务应用

  • 应用场景: image.png
  • 除了分布式定时任务,其他解决方案: image.png
  • 与其他解决方案对比: image.png