分布式定时任务 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第14天
引子
抖音春节集卡瓜分20亿
-
如何设计最终的开奖环节的技术方案?
- 扫描集卡信息,汇总计算。
- 定期开奖
-
以上两点方案可以使用分布式定时任务实现
- MapReduce
- Map
分布式定时任务:自动化+定时执行+海量数据+高效稳定
单机定时任务
-
windows批处理
-
windows任务计划
-
linux的Cronjob指令
-
代码实现:
使用线程池复用,减少性能开销
什么是分布式定时服务
- 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
- 分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
按照触发时机分类:
- 定时任务:特定时间触发
- 延时任务:延时触发
- 周期任务:固定周期时间,或固定频率周期调度触发
特点:
执行方式:
分布式定时任务的区别
与单机定时任务
与大数据处理引擎
分布式定时任务的实现原理
核心架构
三个核心问题:触发器(Trigger)、调度器(Scheduler)、执行器(Executor)
数据流
任务
任务的基本概念
- 任务与任务实例是1对n:因为任务可能复用多次执行,每次执行都对应一个实例
- 任务实例与任务结果1对n:因为任务可能执行失败,需要重试,每次执行都有结果(无论成功或失败)
- 任务与任务历史1对n:因为任务需要支持修改,而为了保证任务的实例、结果与任务本身对的上,需要保存每次任务的修改历史
任务元数据
任务元数据是用户对任务属性定义,包含任务类型调用时机、执行行为等。
触发器
职责要求
实现方案
-
定期扫描+延时消息
-
时间轮
遍历任务列表,从中找到当前时间点需要触发的任务列表
高可用
核心问题
- 不同业务间,任务的调度相互影响怎么办?
- 负责从扫描和触发的机器宕机了怎么办?
解决思路
-
存储上做资源隔离
-
运行时分开执行
-
部署时,多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被触发一次
调度器
资源来源
节点选择
任务分片才是最常用的调度方式
对于任务分片
执行器
弹性扩缩容
基于注册中心,可以实现弹性扩缩容
总结
引用参考
分布式定时任务那些事儿.pptx - 飞书云文档 (feishu.cn)