这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
1、分布式定时任务的使用场景
分布式定时任务在目前很多项目中是重要的一环,我们在日常生活中可以频繁见到它的应用
- 春节集卡赢红包
- 快递到达十天自动收货
- 外面订单超时30分钟未支付自动取消
2、发展历程
分布式定时任务的发展历程可以简单列为下方几个阶段
2.1、 windows批处理阶段
2.2、windows任务计划程序
2.3、linux命令-CronJob
linux内置的CronJob功能简单易用,稳定性强,但无法用于分布式处理
2.4、Timer,Tiker
第三方框架Timer,Tiker具有跨平台的定时任务调度功能,但仍然限于单机
2.5、ScheduleExecutorService
ScheduleExecutorService中引入了线程池,可以并发执行定时任务,但是还是只能处理单机任务
2.6、Quartz
Quartz对分布式任务有了解决方案,但功能并不完善,如没有负载均衡机制等。
2.7、分布式定时任务
至此,我们终于印出来本次内容的主角--分布式定时任务,这里会对分布式定时任务作详细介绍
2.7.1、定义
定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
2.7.2、特点
- 自动化∶全自动完成定时任务的调度和执行
- 平台化:基于平台化的思维管控一系列的分布式定时任务
- 分布式:在分布式系统环境下运行任务调度,突破单机定时任务的性能瓶颈
- 伸缩性:采用集群方式部署,可以随时按需扩缩容
- 高可用:单点故障不影响最终任务结果,可以做到故障转移
2.7.3、执行方式
- 单机任务:随机触发一台机器执行任务,适用于计算量小、并发度低的任务
- 广播任务:广播到所有机器上执行同一个任务,比如所有机器一起清理日志
- Map任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务
- MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇忌计异,也用于计算量大,并且需要对子任务结果做汇总的任务
2.7.4、业内分布式定时任务框架
2.7.5、知识面扩充
2.8、小结
第二节内容小结如下
3、实现原理
3.1、核心架构
分布式定时任务框架一般可以认为由以下四部分组成
- 触发器:Trigger,解析任务,生成触发事件
- 调度器: Scheduler,分配任务,管理任务生命周期
- 执行器: Executor,获取执行任务单元,执行任务逻辑
- 控制台:Admin,提供任务的管理与干预
3.1.1、一个分布式定时任务的处理过程
分布式定时任务框架对一个进来的分布式任务处理流程如上图:
1.用户为代码完善任务基础信息,设置触发规则
2.提交给控制台,控制台将任务存储
3.触发器扫描DB,发现新的需要调度任务,并且任务时间在范围内,将任务发给调度器
4.调度器安排任务应该如何交给执行器执行
5.执行器执行定时任务
3.1.2、功能架构
3.2、控制台
3.2.1、基本概念
3.2.2、任务元数据
任务元数据是用户对任务属性的定义,包括:
- 调度时机
- 执行行为
- 任务状态
- etc
3.2.3、任务实例
任务实力是一个确定的job的一次运行实例
3.3、触发器
3.3.1、核心职能
触发器解析给定的一系列任务,并且在贵刀时间触发任务的调度
触发器的设计应该满足:
- 需支持大量任务
- 需支持秒级的调度
- 周期任务需要多次执行
- 需保证秒级扫描的高性能,并避免资源浪费
3.3.2、实现方式1-定时扫描+延时消息
触发器定时对DB进行扫描,对数据项进行解析,寻找被触发的定时任务,并将他们通过延时MQ等发送给调度器,同时根据具体情况对DB内容进行修改(如只执行一次的任务应在下次不应该被触发)
3.3.3、实现方式2-时间轮
类比时钟,设置一个六十秒的轮盘,在每一秒钟有不同任务(可以用链表存储),抵达即执行
而对于时间范围更大的,可以引入多级时间轮,上一级时间轮抵达指定位置便将任务传给下一级时间轮
3.3.4、高可用
3.3.4、集群以及相关问题
为了高可用,可以引入集群,能够避免单点故障,并且增强性能
然而分布式带来了同一任务会被多次触发的问题
- 可以用数据库行锁来解决
- 可以用分布式锁来解决(redis锁,zookeeper锁)
3.4、调度器
调度器为分布式的协调提供了解决方案
3.4.1、资源来源
- 业务系统提供机器资源
- 分布式定时任务平台提供机器资源
3.4.2、节点选择
通过合理的节点选择可以降低单节点压力,提升整体性能
3.4.3、任务分片
对于复杂任务,可以分片处理
3.4.4、可视化
提供可视化界面,方便使用
3.4.5、故障转移
对于分别式系统,自然要对单点故障进行容灾
3.4.6、高可用
集群的设置保障了高可用
3.5、执行器
3.6、小结
4、尾声
分布式定时任务在业务中较常使用,并且框架架构包含了许多分布式框架的共同具有的概念,整体结构清晰,容易带我们了解分布式的思想