这是我参与「第五届青训营」笔记创作活动的第十一天,今天学习了定时任务的相关知识同时了解了分布式定时任务在实际项目中的应用。
定时任务
引入 抖音集卡
- 自动化+定时执行+海量数据+高效稳定=分布式定时任务
定时任务发展历程
- windows批处理
- windows 任务计划
- Linux命令-CornJob
- 一台机器,仅支持linux
- 单机代码实现
- java Timer
- GO Ticker
- 多个任务执行
- 任务调度- Quartz
- 分布式定时任务
分布式定时任务
- 定义:
- 定时任务:系统自动完成特定任务,实时,延时,周期性进行任务调度的过程
- 分布式定时任务:把分散的可靠性差的定时任务纳入统一平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式
- 分类
- 触发时机
- 定时任务
- 延时任务:10s后关机
- 周期任务:固定周期事件/固定频率执行
- 执行方式
- 随机触发一台机器执行,适用于计算量小,并发低
- 广播任务:广播到所有机器上执行同一个任务
- Map任务:任务分为子任务,每个子任务负责一部分计算
- Mapreduce:Map类似加上了汇总计算结果的部分
- 触发时机
- 特点:
- 自动化
- 平台化
- 分布式
- 伸缩性
- 高可用
- 定时任务框架
- 扩充
实现原理
核心架构
- 核心问题;触发,调度,执行
- 核心组件
- 触发器:Trigger,解析任务,生成触发事件
- 调度器:Scheduler,分配任务,管理任务周期
- 执行器:Executor,获取执行任务单元
- 控制台:任务管理和干预功能
- 业务流程【数据流】
- 功能架构
- 基本概念
- 任务:job任务元数据
- 基础信息 WHO
- 调度时机 WHEN
- 执行行为 WHAT
- 执行方式 HOW
- 任务实例:JobInstance运行的实例
- job_id
- 触发时间
- 状态&结果
- 过程信息
- 任务结果:jobresult
- 任务历史: JobHistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同
- 任务:job任务元数据
- 触发器
- 核心职责
- 给定一系列任务,解析它们的触发规则,在规定时间触发调度
- 约束
- 大量任务
- 需要支持秒级调度
- 周期任务需要多次执行
- 秒级扫描的高性能
- 目标:在数据中找出当前时间需要执行的任务
- 方案
- 定时扫描+延时消息(腾讯,字节)
- 先扫描DB,设置processor利用延时消息触发,同时修改状态防止多次触发
- 时间轮
- 环形数组,每个元素是一个队列
- 多级时间轮
- 定时扫描+延时消息(腾讯,字节)
- 高可用性的要求
- 实现
- 存储上,不同国别,业务进行资源隔离
- 运行时,分开执行
- 部署时,多机房集群化部署
- 问题
- 避免多次触发
- 方案
- 数据库行锁模式
- 触发调度前,更新JobInstance状态,成功抢锁的才能触发
- 缺点:多台机器频繁竞争,节点越多,性能越差
- 触发调度前,更新JobInstance状态,成功抢锁的才能触发
- 分布式锁模式
- 使用Redis锁或Zookeeper锁
- 抢锁成功成功调度
- 数据库行锁模式
- 实现
- 核心职责
- 调度器
- 核心问题:资源来源,资源调度,任务执行
- 资源来源
- 业务系统提高机器资源
- 优点:任务逻辑和业务系统共用同一份,利用率高
- 缺点:
- 更容易发送任务脚本影响在线服务的事故
- 不能由定时任务平台控制扩缩容
- 定时任务平台提供机器资源
- 优点:任务逻辑和业务系统,避免互相影响,可以扩缩容
- 缺点:资源消耗大
- 业务系统提高机器资源
- 资源调度
- 节点选择
- 随机节点执行:用于定时对账等
- 广播执行:所有执行节点分发调度任务并执行:批量运维
- 分片执行:根据分片逻辑进行拆分,分配给不同节点
- 故障转移
- 高可用
- 节点选择
- 执行器
- 流程
标题:抖音春节活动 & 定时任务发展之路 - 掘金