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

19 阅读3分钟

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

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

引子

抖音春节集卡瓜分20亿

  • 如何设计最终的开奖环节的技术方案?

    • 扫描集卡信息,汇总计算。
    • 定期开奖
  • 以上两点方案可以使用分布式定时任务实现

    • MapReduce
    • Map

image-20230206124152138

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

单机定时任务

  • windows批处理

  • windows任务计划

  • linux的Cronjob指令

  • 代码实现:

    image.png 使用线程池复用,减少性能开销

    image.png

什么是分布式定时服务

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

按照触发时机分类:

  • 定时任务:特定时间触发
  • 延时任务:延时触发
  • 周期任务:固定周期时间,或固定频率周期调度触发

特点: image-20230206140313678

执行方式:

image.png

分布式定时任务的区别

与单机定时任务

image-20230206140429486

与大数据处理引擎

image-20230206140450294

分布式定时任务的实现原理

核心架构

三个核心问题:触发器(Trigger)、调度器(Scheduler)、执行器(Executor)

image.png

数据流

image.png

任务

任务的基本概念

  • 任务与任务实例是1对n:因为任务可能复用多次执行,每次执行都对应一个实例
  • 任务实例与任务结果1对n:因为任务可能执行失败,需要重试,每次执行都有结果(无论成功或失败)
  • 任务与任务历史1对n:因为任务需要支持修改,而为了保证任务的实例、结果与任务本身对的上,需要保存每次任务的修改历史

image.png

任务元数据

任务元数据是用户对任务属性定义,包含任务类型调用时机、执行行为等。

image-20230206141514246

触发器

职责要求

image-20230206141557734

实现方案

  • 定期扫描+延时消息 image-20230206141707775

  • 时间轮

    image.png 遍历任务列表,从中找到当前时间点需要触发的任务列表 image-20230206141821686

    image.png image.png

    image.png

高可用

核心问题
  • 不同业务间,任务的调度相互影响怎么办?
  • 负责从扫描和触发的机器宕机了怎么办?

解决思路

  • 存储上做资源隔离

  • 运行时分开执行

  • 部署时,多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被触发一次

    image.png

    image.png

调度器

资源来源

image-20230206142843035

节点选择

image.png

任务分片才是最常用的调度方式

对于任务分片

image-20230206142956023

执行器

弹性扩缩容

基于注册中心,可以实现弹性扩缩容

image-20230206143100315

总结

image.png

引用参考

‍‌‬⁢⁢‬⁣⁤⁣⁤⁣‌⁤‬‌⁣‍‍⁢‌‬‍⁤‌‌‌‬‍‬‌⁤‬分布式定时任务那些事儿.pptx - 飞书云文档 (feishu.cn)

分布式定时任务业务实践 - 掘金 (juejin.cn)

【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)