这是我参与「第五届青训营 」笔记创作活动的的第11天
本节导航
- 发展历史
- 核心架构
发展历史
- Linux命令-CronJob
Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。
- 单机定时任务-Timer、Ticker
Golang 定时器包括:一次性定时器(Timer)和周期性定时器(Ticker)
-
Timer timer创建有两种方式,time.NewTimer(Duration) 和time.After(Duration)。 后者只是对前者的一个包装。 timer到固定时间后会执行一次,请注意是一次,而不是多次。但是可以通过reset来实现每隔固定时间段执行。使用timer定时器,超时后需要重置,才能继续触发。
-
Ticker ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。它会以一个间隔(interval)往通道发送当前时间,而通道的接收者可以以固定的时间间隔从通道中读取时间。
-
单机定时任务-ScheduledExecutorService
ScheduledExecutorService是基于线程池的定时任务类,每个调度的任务都会分配到线程池中到一个线程去执行,即任务是并发执行的,互不影响,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是处于轮询任务的状态 -
任务调度- Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合,也可以单独使用。
- 分布式定时任务
把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。
核心架构
-
核心架构
-
控制台Admin
- 任务元数据:是用户对任务属性定义,基础信息、调度时机、执行行为、执行方式
- 任务实例:是一个确定的job的一次运行实例,job_id、触发时间、状态&结果、过程信息
-
触发器Trigger
-
核心职责:给定任务,解析触发规则,在规定时间点触发任务的调度
-
方案:
- 定期扫描+延时消息(腾讯、字节方案)
- 时间轮(Quartz)
-
-
调度器Scheduler
- 资源来源
- 资源调度
- 任务执行
方案:
- 业务系统提供机器资源
- 定时任务平台提供机器资源
-
执行器Executor
基于注册中心,可以做到执行器的弹性扩缩容