这是我参与「第五届青训营」伴学笔记创作活动的第10天
一、本堂课重点内容:
- 前言
- 发展历程
- 实现原理
- 业务应用
二、详细知识点介绍:
2.1 抖音春节活动
2.2 发展历程
- windows批处理
- windows任务计划程序
- Linux命令——CronJob
- 单机定时任务-Timer、Ticker; ScheduledExecutorService
- 任务调度-Quartz
- 分布式定时任务:
-
定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
-
分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
-
分类:
- 定时任务
- 延时任务
- 周期任务
-
特点
- 自动化
- 平台化
- 分布式
- 伸缩性
- 高可用
-
执行方式
- 单机任务
- 广播任务
- Map任务:一个任务分出多个子任务
- MapReduce任务:在Map的基础上,对所有子任务的结果进行汇总计算
-
业内框架:
-
关联技术
-
2.3 实现原理
-
整体架构
- 核心架构
- 核心架构
-
数据流
-
功能架构
-
功能详解
-
控制台Admin
- Job: 用户对任务属性定义,包括任务类型调度时机、执行行为等
- JobInstance:一个确定Job的一次运行实例
-
触发器Trigger
-
核心职责: 给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度
-
设计约束:
- 需支持大量任务
- 需支持秒级的调度
- 周期任务多次执行
- 需保证秒级扫描的高性能,并避免资源浪费
-
方案一:腾讯字节方案:定期扫描+延时消息
-
方案二:Quartz方案——时间轮
查询和修改复杂度都为O(1)
-
高可用
- 问题:不同业务的任务调度相互影响; 负责扫描和触发的机器挂了
- 解法思路:
- 存储上,不同国别、业务做资源隔离
- 运行时,不同国别、业务分开执行
- 部署时,多机房集群化部署,避免单点故障,通过数据库锁或者分布式锁保证任务只触发一次
-
-
调度器Scheduler
- 资源来源
- 业务系统提供
- 定时任务平台提供
- 资源调度
- 节点选择
- 任务分片
- 任务编排:DAG
- 故障转移
- 节点选择
- 高可用
- 资源来源
-
执行器Executor
- 基于注册中心,可实现弹性
-
-
业务应用
- 所有需要定时、延时、周期性执行任务的业务场景,都可以考虑使用分布式定时任务
-
知识面扩充
- 分布式定时任务
- 单机定时任务
- 延时消息
- 离线计算引擎Hive
- 实时计算引擎Flink
课后
-
分布式定时任务可以帮助我们处理哪些业务场景?
- 电商、互动、游戏
-
春节集卡瓜分20亿的玩法,发奖金额计算、实时开奖两个阶段分别用到分布式定时任务什么执行模式?
- MapReduce任务; Map任务
-
有了分布式定时任务,单机定时任务还有适用场景么?
-
时间轮这种数据结构,在定时/延时场景相比其他数据结构有哪些优势?
- 查询修改效率高
-
分布式定时任务的调度中心怎么判断一台执行器的机器处于可被调度状态?
-
你能想到哪些业务场景,实时计算引擎优于分布式定时任务?