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

113 阅读2分钟

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

写在开头

本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记或者是自己的思考

概述

定时任务的需求量一直都是很大,很多场景都可以用到,也是从单机的定时一直演变进化到现在的分布式定时任务,效率高的同时安全可靠。

举例:

抖音的过年红包活动

  • 业务流程

    • 定时扫描抖音用户集卡状态
    • 汇总计算用户的瓜分金额
    • 定时开奖

就非常适合使用分布式定时任务来解决这个需求。

实现原理

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

触发器: Trigger,解析任务,生成触发事件调度器: Scheduler,分配任务,管理任务生命周期执行器: Executor,获取执行任务单元,执行任务逻辑

除此之外,还需要提供一个控制台 (Admin) ,提供任务管理和干预的功能。

数据流

总体的数据流分为两个部分:任务创建和任务执行。

任务创建:首先用户定义任务的基本信息和触发任务的规则,随后把任务的代码上传到平台中,随后分布式定时任务会将该任务交给控制台 admin,admin 将刚创建的任务存储在任务 DB 中。

任务执行:控制台需要知道这个任务说明时间节点去执行,这依赖于触发器对任务的触发,并使用调度器对任务进行整体的协调,调度器将任务分派给执行器执行任务。

功能架构

  • Admin 在功能上负责:对任务的原数据进行存储和管理、对任务进行分片、暂停和恢复以及监控警报。

  • Trigger 使用 Scanner 对任务 DB 扫描,获取任务的触发时间,并使用消息队列消费任务

  • Scheduler 对任务进行调度,并实现负载均衡、幂等控制等协调操作。

  • Executor 获取到任务之后,真正开始执行任务。