这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天,本节课从抖音春节活动开始介绍了分布式定时任务以及其发展历程,深入了解了分布式定时任务的实现原理,最后介绍了在实际业务中使用的分布式定时任务。
1 前言
1.1 春节集卡瓜分20亿
自动化+定时执行+海量数据+高效稳定+分布式定时任务
2 发展历程
2.1 Windows批处理
例1:10分钟后Windows电脑自动关机
2.2 Windows任务计划程序
例2:每天 12:00 自动打卡
2.3 Linux命令——CronJob
例3:每天02:30定时清理机器日志
2.4 单机定时任务
- Timer、Ticker:例4:每隔5分钟定时刷新本地缓存服务器
- ScheduleExecutorService:例5:每隔5钟定时执行多个任务
2.5 任务调度——Quartz
2.6 分布式定时任务
分布式定时任务是把分散的、可靠性差的实时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
按触发时机分类:
- 定时任务:特定时间触发
- 延时任务:验收触发
- 周期任务:固定周期时间,或固定频率周期调度出发
特点:自动化/平台化/分布式/伸缩式/高可用
执行方式:单机任务/广播任务/Map任务/MapReduce任务
2.7 业内定时任务框架
业内定时任务框架:Xxl-job/SchedulerX/TCT
3 实现原理
3.1 核心架构
分布式定时任务核心要解决触发、调度、执行三个问题。
数据流:
功能架构:
3.2 控制台
基本概念:
- 任务:任务元数据,是用户对任务属性定义,包括任务类型调度实际、执行行为等
- 任务实例:周期任务会生成多个任务实例,任务实例是一个确定Job的一次运行实例
- 任务结果:任务实例运行的结果
- 任务历史:用户可修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储
3.3 触发器
- 核心职责:给定一系列任务,解析他们的触发规则,在规定的时间点触发任务的调度
- 设计约束:需支持大量任务/需支持秒级调度/周期任务需要多次执行/需保证秒级扫描的高性能
方案:定期扫描+延时消息/时间轮
高可用解法思路:
- 存储上:不同国别、业务做资源隔离
- 运行时:不同国别、业务分开执行
- 部署时:采用多机房集群化部署,避免单点故障
3.4 调度器
3.5 执行器
4 业务应用
电商/互动/游戏
5 个人总结
认识了分布式定时任务并了解了其实现原理,了解在哪些实际业务场景中使用分布式定时任务