这是我参与「第五届青训营 」笔记创作活动的第12天
1 前言
2发展历程
3实现原理
4 业务应用
课程收益 知识面扩充 项目实践能力加强 那些场景使用分布式定时任务 业务实际场景中间件选型、技术方案设计成竹在胸
1前言 -春节集卡瓜分20亿 抽卡 集齐 开奖
亿级用户规模 亿级资金规模 百万级读写QPS
自动化 定时执行 海量数据 高效稳定
2发展进程 2.1windows批处理
Case 1:10分钟后电脑自动关机
2.2windows任务计划程序
Case 2:每天12:00自动疫情打卡
2.3Linux命令-CronJob
Case 3:每天02:30定时清理机器日志
Linux系统命令 使用简单 稳定可靠 只能控制单台机器 且无法适用于其他操作系统
2.4单机定时任务-Timer、Ticker
Case 4:每隔5分钟定时刷新本地缓存数据
-ScheduledExecutorService
Case5:每隔5分钟定时执行多个任务
拥有线程池功能 仅单机可用
2.5 任务调度-Quartz
2.6分布式定时任务
平台化管理 分布式部署 支持海量数据
什么是分布式定时任务
自动完成特定任务 实时延时周期性完成任务调度的过程
纳入统一的平台 实现集群管理调度和分布式部署的一种 定时任务的管理方式
按触发时机分类 定时任务 特定时间 延时 延时触发 周期任务 固定周期时间或频率
-特点 自动化 平台化 分布式 伸缩性 高可用
-执行方式 单机任务 广播任务 Map任务 MapReduce任务
2.7业内定时任务框架 Xxxl-job Scheduler-X TCT
2.8知识面扩充 分布式 VS 单机
关系 差异 分布式 可支撑更大业务体谅 分布式 性能 伸缩性 稳定性更高
分布式VS大数据处理引擎 关系 海量数据处理 性能 伸缩性 稳定性高 差异 定时并不是大数据处理引擎要解决的核心问题 大数据致力于将源数据处理称结果数据 还能调用HTTP和RPC服务
2.9 小结 生活用途 windows批处理 windows任务计划程序 工作用途 Linux命令 cronjob 单机定时任务 Timer、Ticker 单机定时任务 ScheduledExecutorService 任务调度 Quartz 分布式定时任务 分布式定时任务 触发时机 定时 延时 周期 执行方式 单机 广播 Map MapReduce 业内流行框架 Xxl-job SchedulerX TCT 关联技术 单机定时任务 大数据处理引擎
3实现原理
3.1核心架构 核心要解决触发、调度、执行三个关键问题
触发器:Trigger解析任务 生成触发事件 调度器:Scheduler 分配任务 管理任务声明周期 执行器:Executor获取执行任务单元 执行任务逻辑 控制台(Admin)提供任务管理和干预的功能
3.1.1数据流
3.1.2功能架构
3.2控制台 基本概念 任务: Job 任务元数据 任务实例:JobInstance 任务结果:JobResult 任务历史:JobHistory
3.2.2-任务元数据 基础信息Who 调度时机When 执行行为What 执行方式How
3.2.3-任务实例 Job_id 触发时间 状态&结果 过程信息
3.3触发器
3.3.1-核心职责 给定一系列任务 解析他们的触发原则 在规定的时间点触发任务的调度
设计约束 需支持大量任务 需支持秒级的调度 周期任务需要多次执行 需保证秒级扫描的高性能,避免资源浪费
-发难1 定期扫描+延时消息(腾讯、字节方案)
-方案2 时间轮Quartz方案 多级时间轮
3.4-高可用 核心问题 不同业务间 任务调度相互影响 负责扫描和触发的机器的挂了怎么办 解法思路 存储上 不同国别 业务做资源隔离 运行时 不同国别业务分开执行 部署时 多机房集群化部署 避免单点故障 通过数据锁或分布式锁保证任务只触发一次
3.3.4-问题引出 Trigger集群模式 避免单点故障 需要避免统一任务被多次触发 导致业务紊乱
-数据库行锁模式 触发调度之前 更新数据库JobInstance的状态 成功枪锁的才会触发调度 多台机器频繁竞争数据库锁 节点越多性能越差
-分布式锁模式 在触发调度之前 尝试抢占分布式锁 可使用Redis锁或Zookeeper锁 性能较高 多家公司使用此方案
3.4调度器 资源来源 资源调度 任务执行
3.4.1 资源来源 业务系统提供机器资源 阿里 美团 字节 优点 任务执行逻辑与业务系统共用同一份资源 利用率更高 缺点 更容易发生定时任务脚本影响在线服务事故 不能由定时任务平台扩缩容 定时任务平台提供机器资源 字节 优点 任务执行逻辑与业务系统提供的在线服务隔离 避免相互影响 可以支持优雅地扩缩容 缺点 消耗更多机器资源 需要额外为定时任务平台申请接口调用权限而不能直接继承业务系统的权限
-节点选择 随机节点执行 广播执行 分片执行
3.4.2任务分片
3.4.3高级特性-任务编排
有向无环图
-故障转移
确保部分执行单元任务失败时任务最终成功 分片任务基于一致性hash策略分发任务 当某Executor异常时 调度器会将任务分发到其他Executor
-高可用
调度器可以集群部署 做到完全无状态 靠消息队列的重试机制保障任务一定会被调度
3.5执行器 基于注册中心 做到执行器的弹性扩缩容
3.6小结 核心架
2023年2月8日 21:09构 控制台Admin 触发器Trigger 调度器Scheduler执行器Executor 业务模型 任务元数据Job 任务实例JobInstance 任务结果JobResult 任务历史JobHistory 触发器 定时扫描+延时消息 时间轮 链表 最小堆 时间轮 多级时间轮 调度器 资源来源 资源调度:节点选择 任务分片 任务编排 故障转移 执行器 注册 调度 回调 心跳检测
04业务运用 需要定时 延时 周期性执行任务的业务场景 都可以考虑使用分布式定时任务
电商 互动 游戏
其他解决方案 10天未收货自动确认收货 分布式定时任务延时任务 消息队列延时消息或者定时消息
春节集卡活动统计集卡用户个数和总翻倍数 分布式定时任务的MapReduce任务 大数据离线处理引擎Hive离线做统计 使用大数据实时处理引擎Flink实时累计