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

95 阅读5分钟

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

分布式定时任务

春节季卡瓜分20亿

  • 用户规模 :亿级
  • 资金规模:亿级
  • QPS:百万级

要求:自动化+定时执行+海量数据+高效稳定 = 分布式定时任务

发展历程

Windows任务计划程序

  1. 10分钟后自动关机
    1. 桌面空白处新建文本文档
    2. 更改文件名和后缀为"自动关机.bat"
    3. 修改文件内容为"shutdown -s -t 600",代表10分钟后关机
    4. 双击运行该批次处理文件,电脑将会在10分钟之后自动关机
  2. 10点自动疫情打卡
    1. ...

Linux命令 -CronJob

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

  • ScheduledExecutorService
    • 拥有线程池
    • 仅单机可用

Quartz

  • 单任务极值控制
  • 没有负载均衡机制

分布式定时任务

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

什么是分布式定时任务?

  • 定时任务
    • 系统为了自动完成特定任务,实时、延时、周期性完成任务调度过程
  • 分布式定时任务
    • 把分散的,可靠性差的定时任务纳入统一的凭条,并实现集群管理调度和分布式部署的一种定时任务的管理方式

执行方式

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

主流框架

  • Xxl-job
  • SchedulerX
  • TCT

分布式定时任务VS单机定时任务

  • 关系
    • 都可以实现自动化的定时,延时,周期性任务调度
  • 差异
    • 分布式定时任务可以支撑更大的义务题量
    • 分布式定时任务的性能,伸缩性,稳定性更高

VS大数据处理引擎

  • 关系

    • 都可以对海量数据做处理
    • 性能、伸缩性、稳定性都很高
  • 差异

    • 定时并不是大数据处理引擎要解决的核心问题‘
    • 大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务除了能做这个之外,还可以调用HTTP和RPC服务

核心架构

分布式定时任务核心要解决触发、调度、执行三个关键问题
  • 触发器:Trigger,解析任务,生成出发时间
  • 调度器: Scheduler,分配任务,管理任务生命周期
  • 执行器:Executor,获取执行任务单元,执行任务逻辑

除此之外,还需要提供一个控制台(Admin)

控制台

基本概念

  • 任务
    • job,任务元数据
    • 用户对于任务属性的定义,包括任务类型调度实际,执行行为等
  • 任务实例
    • jobinstance,任务运行的实例
    • 是一个确定的job的一次运行实例
  • 任务结果
    • jobresult,任务实例运行的结果
  • 任务历史
    • jobhistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储

触发器

  • 核心职责

    • 给定一系列任务,解析它们的出发规则,在规定的时间点出发任务的调度
  • 设计约束

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

    • 定式扫描+延时消息(腾讯字节方案)
    • 时间轮(Quartz所用方案)
  • 高可用

    • 不同业务之间,任务调度相互影响怎么办?
    • 负责扫描和出发的机器挂了怎么办?
    • 解法思路:
      • 存储上,不同国别,业务做资源隔离
      • 运行时,不同国别,业务分开执行
      • 部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被出发一次
  • 问题引出

    • 单Trigger模式
    • Trigger集群
      • 在触发调度之前,更新数据库中JobInstabce的状态,成功抢锁才会触发调度

调度器

  • 资源来源
    • 业务系统提供机器资源
      • 使用该方案的公司:阿里、美团、字节
    • 优点
      • 任务执行逻辑与业务系统共用同一份资源、录用率更高
    • 缺点
      • 更容易发生定时任务脚本影响在线服务的事故
      • 不能由定时任务平台控制扩缩容
    • 定时任务平台提供机器资源
    • 优点:
      • 任务执行逻辑与业务系统提供的在线服务隔离,避免互相影响
      • 可以支持优雅的扩缩容
    • 缺点
      • 消耗更多机器资源
  • 结点选择
    • 随机结点执行
    • 广播执行
    • 分片执行
      • 按照用户自定义的要求去做拆分
  • 任务分片
    • 通过任务分片来提高任务执行的效率和资源的利用率
  • 任务编排
    • 使用有向无环图DAG进行可视化任务编排
  • 故障转移
    • 确保部分执行单元任务失败时,任务最终成功