分布式定时任务 | 青训营笔记

120 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

image.png

2.6 分布式定时任务

分布式定时任务是把分散的、可靠性差的实时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。

按触发时机分类:

  • 定时任务:特定时间触发
  • 延时任务:验收触发
  • 周期任务:固定周期时间,或固定频率周期调度出发

特点:自动化/平台化/分布式/伸缩式/高可用

执行方式:单机任务/广播任务/Map任务/MapReduce任务

2.7 业内定时任务框架

image.png

业内定时任务框架:Xxl-job/SchedulerX/TCT

3 实现原理

3.1 核心架构

分布式定时任务核心要解决触发、调度、执行三个问题。

image.png

数据流:

image.png

功能架构:

image.png

3.2 控制台

基本概念:

  • 任务:任务元数据,是用户对任务属性定义,包括任务类型调度实际、执行行为等
  • 任务实例:周期任务会生成多个任务实例,任务实例是一个确定Job的一次运行实例
  • 任务结果:任务实例运行的结果
  • 任务历史:用户可修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储

3.3 触发器

  • 核心职责:给定一系列任务,解析他们的触发规则,在规定的时间点触发任务的调度
  • 设计约束:需支持大量任务/需支持秒级调度/周期任务需要多次执行/需保证秒级扫描的高性能

方案:定期扫描+延时消息/时间轮

高可用解法思路:

  • 存储上:不同国别、业务做资源隔离
  • 运行时:不同国别、业务分开执行
  • 部署时:采用多机房集群化部署,避免单点故障

3.4 调度器

image.png

3.5 执行器

4 业务应用

电商/互动/游戏

image.png

5 个人总结

认识了分布式定时任务并了解了其实现原理,了解在哪些实际业务场景中使用分布式定时任务