这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
内容十分丰富的一堂课,从抖音春节活动开头,讲了定时任务的一个发展历程,逐步引入到分布式定时任务,介绍了分布式定时任务的概念、核心框架、以及其业务应用。
春节集卡瓜分20亿
自动化+定时执行+海量数据+高效稳定=分布式定时任务
发展历程
Windows批处理
Case 1:10分钟后电脑自动关机
新建空白文档后缀改为
shutdown -s -t 600
双击运行批处理文件,就会在10分钟后关机
Windows任务计划程序
Case 2:每天12:00自动疫情打卡
在“管理”里设置任务计划程序
电脑里也有一些自带的定时任务
Linux命令-CronJob
Case 3:每天2:30定时清理机器日志
单机定时任务-Timer、Ticker
Case 4:每隔五分钟定时刷新本地缓存数据
单机定时任务-ScheduleExecutorService
Case 5:每隔五分钟定时执行多个任务
线程池、单机可用
任务调度-Quartz
单任务做到了极致、 但是没有负载均衡机制
分布式定时任务
支持几亿用户的集卡、发奖。。。
优点:
1、平台化管理
2、分布式部署
3、支持海量数据
-
什么是分布式定时任务
-
分布式定时任务特点
-
分布式定时任务执行方式
-
执行方式 vs 春节集卡
应该采取的方式为:MapReduce + Map
业内定时任务框架
知识面扩充
小结
实现原理
核心架构
【重点!!!】
触发、调度、执行
数据流
任务创建需要的信息+触发规则+任务代码 ==>提交到控制台
控制台依赖触发器判断什么时候触发,然后根据调度器分配任务去执行
功能架构
四个部分的不同功能
控制台
基本概念
Job是任务元数据,用户的定义
执行需要任务实例JobInstance,可以执行多次的
任务结果,周期性的调度可能会失败,每次重试都会生成一个结果的
基本概念-任务元数据(Job)
任务元数据是用户对人物属性定义,包括任务类型调度时机、执行行为等。
基本概念-任务实例
!任务实例是一个确定的Job的一次运行实例
触发器
触发器-核心职责
触发器-方案1
定期扫描+延时(腾讯、字节方案)
触发器-方案2
目标:遍历任务列表,从中找出当前时间点需要触发的任务列表
以下是不同的方案:
触发器-高可用
核心问题
·不同业务之间,任务的调度相互影响怎么办?·负责扫描和触发的机器挂了怎么办?
解法思路
·存储上,不同国别、业务做资源隔离·运行时,不同国别、业务分开执行
·部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被触发一次
高可用-问题引出
高可用-数据库行锁模式
高可用-分布式锁模式
更推荐用这个
调度器
资源来源、资源调度、任务执行