这是我参与【第五届青训营】伴学笔记创作活动的第12天,
前言
春节集卡瓜分活动:先用扫描脚步进行扫描集卡信息,然后进行汇总计算,之后定时开奖
需求:自动化、定时执行、海量数据、高效稳定 (分布式定时任务)
发展历程
Windows批处理
1.定时关机
2.定时打卡
Linux命令——CronJob
- 定时清理机器日志
单机定时任务
- 每五分钟刷新本地缓存数据
fun main(){
ticker:=time.NewTicker(5*time.Minute)
for{
select{
case <-ticker.C:
SyncLocalCache()
}
}
}
任务调度——Quartz
分布式定时任务
-
平台化管理
-
分布式部署
-
支持海量数据
分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式
按照执行方式分为:单机任务、广播任务、Map任务(分成小任务)、MapReduce任务(汇总计算)
框架
Xxl-job是开源且免费的,腾讯TCT没有开源
实现原理
整体架构
分布式定时任务核心解决触发、调度、执行三个关键问题
-
触发器:Trigger
-
调度器:Scheduler
-
执行器:Executor
还需要提供一个控制台,提供任务管理和干预的功能
业务流
功能架构
-
Admin:元数据存储、元数据状态流转、任务分片、任务依赖、规则引擎、任务暂停、日志管理、监控报警、指标统计等
-
Trigger:解析引擎、Scanner、可靠投递、状态流转、补偿策略等
-
Scheduler:调度、负载均衡、幂等控制、容错、故障转移、限流、计费、状态管控等
-
Executor:注册、任务获取、任务执行、状态上报、日志处理、本都幂等、任务回溯等
控制台
任务元数据是用户对任务属性定义(基础信息,时机,执行行为,执行方式)
任务实例是一个确定的Job的一次运行实例(Job_id,触发事件,状态,过程)
触发器
设计约束:
-
支持大量任务
-
支持秒级的调度
-
需多次执行
-
高性能
方案1:定时扫描+延时消息(Scanner定时扫描DB,然后遇到延时的任务会有延时消息)
方案2:时间轮(一种高效利用线程资源进行批量化调度的一种调度模型,是一个存储环形队列,底层采用数组实现)
Trigger集群模式可避免单点故障
高可用-分布式锁模式
调度器
资源来源:业务系统提供机器资源、定时任务平台提供机器资源
节点选择:随机节点执行、广播执行、分片执行(自定义拆分)
- 任务分片:提高执行任务的的效率和资源的利用率
故障转移:确保部分执行单元任务失败时,任务最终成功
执行器
首先机器注册,然后调度器发出调度请求,之后进行日志服务和回调服务
业务应用
定时、延时、周期性都可以考虑定时任务
电商(自动关闭订单,发放优惠价)