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

117 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

内容十分丰富的一堂课,从抖音春节活动开头,讲了定时任务的一个发展历程,逐步引入到分布式定时任务,介绍了分布式定时任务的概念、核心框架、以及其业务应用。

春节集卡瓜分20亿

自动化+定时执行+海量数据+高效稳定=分布式定时任务

发展历程

Windows批处理

Case 1:10分钟后电脑自动关机

新建空白文档后缀改为
shutdown -s -t 600
双击运行批处理文件,就会在10分钟后关机

Windows任务计划程序

Case 2:每天12:00自动疫情打卡

在“管理”里设置任务计划程序
电脑里也有一些自带的定时任务

Linux命令-CronJob

Case 3:每天2:30定时清理机器日志 image.png

单机定时任务-Timer、Ticker

Case 4:每隔五分钟定时刷新本地缓存数据 image.png

单机定时任务-ScheduleExecutorService

Case 5:每隔五分钟定时执行多个任务 image.png

线程池、单机可用

任务调度-Quartz

image.png 单任务做到了极致、 但是没有负载均衡机制

分布式定时任务

支持几亿用户的集卡、发奖。。。
优点:
1、平台化管理
2、分布式部署
3、支持海量数据
  • 什么是分布式定时任务

image.png

  • 分布式定时任务特点

image.png

  • 分布式定时任务执行方式

image.png

  • 执行方式 vs 春节集卡

image.png 应该采取的方式为:MapReduce + Map

业内定时任务框架

image.png

知识面扩充

image.png

小结

image.png

实现原理

核心架构

【重点!!!】 image.png 触发、调度、执行

数据流

任务创建需要的信息+触发规则+任务代码 ==>提交到控制台

控制台依赖触发器判断什么时候触发,然后根据调度器分配任务去执行 image.png

功能架构

四个部分的不同功能 image.png

控制台

基本概念

Job是任务元数据,用户的定义
执行需要任务实例JobInstance,可以执行多次的
任务结果,周期性的调度可能会失败,每次重试都会生成一个结果的

image.png

基本概念-任务元数据(Job)

任务元数据是用户对人物属性定义,包括任务类型调度时机、执行行为等。

image.png

基本概念-任务实例

!任务实例是一个确定的Job的一次运行实例

image.png

触发器

触发器-核心职责

image.png

触发器-方案1

定期扫描+延时(腾讯、字节方案)

image.png

触发器-方案2

image.png 目标:遍历任务列表,从中找出当前时间点需要触发的任务列表

以下是不同的方案: image.png

image.png

image.png

image.png

触发器-高可用

核心问题
·不同业务之间,任务的调度相互影响怎么办负责扫描和触发的机器挂了怎么办?
解法思路
·存储上,不同国别、业务做资源隔离·运行时,不同国别、业务分开执行
·部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被触发一次

高可用-问题引出

image.png

高可用-数据库行锁模式

image.png

高可用-分布式锁模式

更推荐用这个 image.png

调度器

资源来源、资源调度、任务执行

资源来源

image.png

资源调度-节点选择

image.png

资源调度-任务分片

image.png

高级特性-任务编排

image.png

高级特性-故障转移

image.png

调度器-高可用

image.png

执行器

image.png

小结

image.png

业务应用

image.png

其他解决方案

image.png

方案对比

image.png