这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
1、前言
2、发展历史(重点2.1-2.6)
2.1、windows批处理
- case 1:10分钟后windows电脑自动关机
2.2、Windows任务计划程序
- case 2:每天12:00自动疫情打卡
2.3、linux命令-CronJob
- case 3:每天2:30定时清理机器日志
- 特点:
- linux命令,使用简单,稳定可靠
- 只能控制单台机器,且无法适用于其他操作系统
2.4、单机定时任务-Timer、Ticker
- case 4:每个5min定时刷新本地缓存数据
- 特点:
- 跨平台
- 仅单机可用
2.5、单机定时任务-ScheduledExecutorService
- case 5:每隔5min定时执行
- 特点:
- 拥有线程池功能
- 仅单机可用
2.5、任务调度-Quartz
- 特点
- 单任务极致控制
- 没有负载均衡机制
2.6、分布式定时任务
-
什么是分布式定时任务?
- 定时任务:是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程
- 分布式定时任务是把分散的、可靠性差的定时任务纳入同意的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
-
按触发时机分配:
- 定时任务:特定时间出发,比如今天15:06执行
- 延时任务:延时出发,比如10s后执行
- 周期任务:固定周期时间,或固定频率周期调度触发,比如每天12点或者每隔5s执行。
-
特点:
- 自动化:全自动完成定时任务的调度和执行。
- 平台化:基于平台化的思维管控一些列的分布式定时任务。
- 分布式:再分布式系统环境下运行任务调度,突破单机定时任务的性能瓶颈。
- 伸缩性:采用集群方式部署,可以随时按需扩缩容。
- 高可用:单点故障不影响最终任务结果,可以做到故障转移。
-
按照执行方式分类
- 单机任务:随机触发一台机器执行任务,适用于计算量小,并发度低的任务。
- 广播任务:广播导所有机器上执行同一个任务,比如所有机器一起清理日志。
- Map任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务。
- MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果做汇总的任务。
2.7、业内定时任务框架
2.7.1、业内定时任务框架-Xxl-job
2.7.2 业内定时任务框架-SchedulerX
2.7.3 TCT
2.8、知识面扩充
- 分布式定时任务 VS 单机定时任务
- 关系:都可以实现自动化的定时、延时、周期任务调度;
- 差异:分布式定时任务可制成更大的业务体量;分布式定时任务的性能、伸缩性、稳定性更高;
- 分布式定时任务 VS 大数据处理引擎
- 关系:都可以对海量数据做处理
- 差异:定时给并不是大数据处理引擎要解决的核心问题;大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务除了能做这个之外,还可以调用HTTP、RPC服务;
2.9小结:
3、实现原理
3.1 核心架构(重要)
- 分布式定时任务核心要解决**触发、调度、执行(单个节点如何工作)**3个关键问题
- 分为4个部分:
- 触发器:Trigger,解析任务,生成触发事件
- 调度器:Scheduler,分配任务,管理任务生命周期
- 执行器:Executor,获取执行任务但愿,执行任务逻辑
- 控制台:Admin,提供任务管理和干预的功能
3.1.1、数据流
3.1.2、功能架构
3.2、控制台
3.2.1、基本概念
- 为什么1对n?
- 我们的任务可以执行多次,每次执行job,都会生成多个jobinstance
- 如果jobinstance运行失败了,会重试,会生成多个jobResult
- 修改了job,会记录,多次修改就会产生多个jobhistory
3.2.2、任务元数据(job)
3.2.3、任务实例(jobinstance)
3.3、触发器
3.3.1 触发器-核心职责
3.3.2、触发器-方案1(重要)
- 扫描器定时扫描数据库,交给processor,再传给延时MQ,并修改DB中的状态,
3.3.3、触发器-方案2(重要)
- 时间轮(Quartz所用方案)
- 问题:刻度不够怎么办?
- 解决1:引入count,计算轮数
- 解决2:使用多级时间轮存储任务
3.3.4、触发器-高可用
3.3.4、高可用-问题引出
- 避免单点故障
- 产生问题:同一任务1肯能多次除触发,导致业务紊乱
3.3.4、高可用-数据库行锁模式
- 产生问题:多台机器频繁竞争数据锁,节点越多性能越差。
3.3.4、高可用-分布式锁模式
3.4、调度器
3.4.1、调度器-资源来源
3.4.2、调度器-资源调度-节点选择(重要)
3.4.2、调度器-资源调度-任务分片(重要)
3.4.2、调度器-高级特性-任务编排(重要)
3.4.3、调度器-高级特性-故障转移(重要)
- 一致性hash策略分发任务:
3.4.4、调度器-高可用
3.5、执行器
3.6、本章小结
4、业务应用
- 应用场景:
- 除了分布式定时任务,其他解决方案:
- 与其他解决方案对比: