这是我参与[第五届青训营]笔记伴学活动的第11天
定时任务的应用背景
对于用户规模亿级,资金规模亿级,读写QPS百万级的类似于“春节季卡瓜分20亿”的活动后端开发人员应当怎么设计最终开奖环节的技术方案?
自动化 + 定时执行 + 海量数据 + 高效稳定 = 分布式定时任务
定时任务的发展历程
- Windows批处理:例如编写"shutdown-s -t 600"的.bat文件使电脑在10分钟之后自动关机
- Windows任务计划程序:例如每天12:00自动打卡
- Linux命令-CronJob,使用简单,稳定可靠,但只能控制单台机器,无法适用于其他操作系统
- 单机定时任务-Timer,Ticker:例如没个5分钟定时刷新本地缓存
func main(){
ticker:=time.NewTicker(5 * time.Minute)
for{
select{
case <-ticker.C:
SyncLocalCache()
}
}
}
- 单机定时任务-ScheduledExecutorService:例如每隔5分钟定时执行多个任务,拥有线程池功能,仅单机可用
- 任务调度-Quartz:单任务极致控制,没有负载均衡机制
- 分布式定时任务:平台化管理,分布式部署,支持海量数据
什么是分布式定时任务
定时任务是指系统为了自动完成特定任务,实时,延时,周期性完成任务调度的过程。分布式定时任务是把分散的,可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式
按触发时机分类:
- 定时任务:特定时间触发
- 延时任务:延时触发,比如10s后执行
- 周期任务:固定钉周期时间,或固定评率周期调度触发,比如每5s或者每天12点执行
分布式定时任务-特点
- 自动化:全自动完成定时任务的调度和执行
- 平台化:基于平台化的思维管控一系列的分布式定时任务
- 分布式:在分布式环境下运行任务调度,突破单机定时任务的性能瓶颈
- 伸缩性:采用集群方式部署,可以随时按需扩缩容
- 高可用:单点故障不影响最终任务结果,可以做到故障转移