[ 后端与 Go | 青训营笔记 ]
这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
课内:Go 分布式定时任务
对分布式定时任务建立起宏观的认识,并深入了解其实现原理。了解关联的单机定时任务、大数据处理引擎,通过了解不同实现方案的优劣来拓展知识面。了解在哪些实际业务场景中使用分布式定时任务。对实际业务场景的中间件选型、技术方案设计做到成竹在胸。
重点
- 发展历程;
- 实现原理;
- 业务应用;
细节
引入
发展历程
Windows
批处理
- 10 分钟后 Windows 电脑自动关机;
任务计划程序
- 每天 12:00 自动疫情打卡;
Linux 命令
CronJob
- 每天 02:30 定时清理机器日志;
单机定时任务
Timer、Ticker
- 每隔 5 分钟定时刷新本地缓存数据;
ScheduleExecutorService
- 每隔 5 分钟定时执行多个任务;
任务调度
Quartz
分布式定时任务
什么是分布式定时任务
- 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程;
- 分布式定时任务是把分散的、可靠性差的定时任务纳入同一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式;
特点
- 平台化;
- 自动化;
- 分布式;
- 伸缩性;
- 高可用;
执行方式
- 单机任务;
- 广播任务;
- Map 任务;
- MapReduce 任务;
业内定时任务框架
Xxl - job
- 开源且免费;
- 轻量级;
- 开箱即用;
- 操作简单;
SchedulerX
- 广泛使用;
- 久经考验;
TCT
拓展
分布式定时任务 VS 定时任务
-
关系
- 都可以实现自动化的定时、延时、周期任务调度;
-
差异
- 分布式定时任务可支撑更大的业务体量;
- 分布式定时任务的性能、伸缩性、稳定性更高;
分布式定时任务 VS 大数据处理引擎
-
关系
- 都可以对海量数据做处理;
- 性能、伸缩性、稳定性都很高;
-
差异
- 定时并不是大数据处理引擎要解决的核心问题;
- 大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务还可以调用 HTTP 和 RPC 服务;
实现原理
核心架构
分布式定时任务核心要解决触发、调度、执行三个关键问题。
- 触发器;
- 调度器;
- 执行器;
数据流
功能架构
控制台
基本概念
- 任务;
- 任务实例;
- 任务结果;
- 任务历史;
任务元数据
- 用户对任务属性定义,包括任务类型调度时机、执行行为等;
任务实例
- 一个确定的 Job 的一次运行实例;
触发器
核心职责
- 给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度;
设计约束
- 支持大量任务;
- 支持秒级调度;
- 周期任务需要多次执行;
- 保证秒级扫描的高性能,并避免资源浪费;
方案一
方案二
高可用
- 不同业务之间,任务的调度互相影响如何解决;
- 负责扫描和触发的机器故障怎么解决;
问题
数据库行锁模式
分布式锁模式
调度器
资源来源
- 业务系统提供机器资源;
- 定时任务平台提供机器资源;
节点选择
- 随机节点执行;
- 广播执行;
- 分片执行;
任务分片
- 通过任务分配来提高任务执行的效率和资源的利用率;
任务编排
- 使用有向无环图 DAG 进行可视化任务编排;
故障转移
- 确保部分执行单元任务失败时,任务最终成功;
高可用
- 可以集群部署,做到完全的无状态,靠消息队列的重试机制保障任务一定会被调度;
执行器
业务应用
总结
对分布式定时任务有了一定的了解。