这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
写在开头
本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记或者是自己的思考
概述
定时任务的需求量一直都是很大,很多场景都可以用到,也是从单机的定时一直演变进化到现在的分布式定时任务,效率高的同时安全可靠。
举例:
抖音的过年红包活动
-
业务流程
- 定时扫描抖音用户集卡状态
- 汇总计算用户的瓜分金额
- 定时开奖
就非常适合使用分布式定时任务来解决这个需求。
实现原理
分布式定时任务核心要解决触发、调度、执行三个关键问题
触发器: Trigger,解析任务,生成触发事件调度器: Scheduler,分配任务,管理任务生命周期执行器: Executor,获取执行任务单元,执行任务逻辑
除此之外,还需要提供一个控制台 (Admin) ,提供任务管理和干预的功能。
数据流
总体的数据流分为两个部分:任务创建和任务执行。
任务创建:首先用户定义任务的基本信息和触发任务的规则,随后把任务的代码上传到平台中,随后分布式定时任务会将该任务交给控制台 admin,admin 将刚创建的任务存储在任务 DB 中。
任务执行:控制台需要知道这个任务说明时间节点去执行,这依赖于触发器对任务的触发,并使用调度器对任务进行整体的协调,调度器将任务分派给执行器执行任务。
功能架构
-
Admin 在功能上负责:对任务的原数据进行存储和管理、对任务进行分片、暂停和恢复以及监控警报。
-
Trigger 使用 Scanner 对任务 DB 扫描,获取任务的触发时间,并使用消息队列消费任务
-
Scheduler 对任务进行调度,并实现负载均衡、幂等控制等协调操作。
-
Executor 获取到任务之后,真正开始执行任务。