消息队列与实战 | 青训营笔记

59 阅读2分钟

这是我参与[第五届青训营]笔记伴学活动的第11天

定时任务的应用背景

对于用户规模亿级,资金规模亿级,读写QPS百万级的类似于“春节季卡瓜分20亿”的活动后端开发人员应当怎么设计最终开奖环节的技术方案?
自动化 + 定时执行 + 海量数据 + 高效稳定 = 分布式定时任务

定时任务的发展历程

  1. Windows批处理:例如编写"shutdown-s -t 600"的.bat文件使电脑在10分钟之后自动关机
  2. Windows任务计划程序:例如每天12:00自动打卡
  3. Linux命令-CronJob,使用简单,稳定可靠,但只能控制单台机器,无法适用于其他操作系统
  4. 单机定时任务-Timer,Ticker:例如没个5分钟定时刷新本地缓存
func main(){
  ticker:=time.NewTicker(5 * time.Minute)
  for{
    select{
    case <-ticker.C:
         SyncLocalCache()
       }
    }
}
  1. 单机定时任务-ScheduledExecutorService:例如每隔5分钟定时执行多个任务,拥有线程池功能,仅单机可用
  2. 任务调度-Quartz:单任务极致控制,没有负载均衡机制
  3. 分布式定时任务:平台化管理,分布式部署,支持海量数据

什么是分布式定时任务

定时任务是指系统为了自动完成特定任务,实时,延时,周期性完成任务调度的过程。分布式定时任务是把分散的,可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式

按触发时机分类:

  • 定时任务:特定时间触发
  • 延时任务:延时触发,比如10s后执行
  • 周期任务:固定钉周期时间,或固定评率周期调度触发,比如每5s或者每天12点执行

分布式定时任务-特点

  • 自动化:全自动完成定时任务的调度和执行
  • 平台化:基于平台化的思维管控一系列的分布式定时任务
  • 分布式:在分布式环境下运行任务调度,突破单机定时任务的性能瓶颈
  • 伸缩性:采用集群方式部署,可以随时按需扩缩容
  • 高可用:单点故障不影响最终任务结果,可以做到故障转移