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

182 阅读3分钟

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

1.介绍

(一)单机定时任务 生活用途:

1.Windows批处理 image.png

2.Windows任务计划程序 image.png

工作用途:

3.Linux命令——CronJob

每天2:30定时清理机器日志 image.png 优点:Linux系统命令,使用简单,稳定可靠 缺点:只能控制单台机器,且不适用于其他操作系统

4.单机定时任务——Timer、Ticker

每隔5分钟定时刷新本地缓存数据 image.png

优点:跨平台 缺点:仅单机可用

5.单机定时任务——ScheduledExecutorService 每隔5分钟定时执行多个任务 image.png 优点:拥有线程池功能 缺点:仅单机可用

任务调度Quartz image.png 优点:单任务极致控制 缺点:没有负载均衡机制

(二)分布式定时任务

平台化管理:是一个平台 分布式部署 支持海量数据

按触发时机可分为:定时,延时,周期任务 按执行方式可分为: 单机任务:随机触发一台机器执行任务,适用于计算量小,并发度低的任务 广播任务:广播到所有机器上执行同一个任务 Map任务:一个任务可分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务 MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果做汇总的任务

春节集卡执行方式 image.png

2.分布式定时任务核心架构

image.png image.png 核心要解决触发、调度、执行三个关键问题 大概可以分为4层: 触发器:Trigger,解析任务,生成触发事件 调度器:Scheduler,分配任务,管理任务生命周期 执行器:Executor,获取任务执行单元,执行任务逻辑

控制台:Admin,提供任务管理和干预的功能

数据流 image.png

功能架构 image.png

1.控制台

image.png image.png

任务元数据Job: 是用户对任务属性定义,包括任务类型调度时机、执行行为等 image.png

任务实例JobInstance: 是一个确定的Job的一次运行实例 image.png

2.触发器

大量任务,秒级调度,周期任务多次执行,高性能避免资源浪费 方案1:

image.png 方案2:

image.png 简单方案: image.png 优化: image.png 优化: 解决数组无限变长,查询修改只用取对应槽位O(1)

image.png

问题:刻度可能不够 解决: 1.加一个count,通过转了多少圈决定 2.多级时间轮(小时,分钟,秒) image.png

触发器核心问题: 不同业务之间,任务的调度互相影响? 负责扫描和触发的机器挂了怎么办

解决思路: 存储上:不同国别、业务做资源隔离 运行时:不同国别、业务分开执行 部署:多机房集群化部署,避免单点故障,通过数据库锁/分布式锁保证任务纸杯触发一次

image.png 问题:避免同一任务被多次触发 解决: 1.数据库行锁 image.png 2.分布式锁

可使用Redis锁或者zookeeper锁 image.png

3.调度器

3.1资源来源

image.png

3.2资源调度

节点选择 image.png 任务分片 image.png 高级特性—任务编排 定义任务执行顺序关系 image.png 高级特性-故障转移 image.png 调度器-高可用 image.png

4.执行器

image.png

3.业务应用

定时延时周期 image.png image.png