01 发展历程
- windows批处理、windows任务计划程序
- Linux命令CronJob
- 单机定时任务Timer、Ticker
- 任务调度-Quartz
- 分布式定时任务
什么是分布式定时任务?
- 定时任务:系统为了自动完成特定的任务,实时、延时、周期性完成任务调度的过程
- 分布式定时任务:把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
按触发时机分类:
- 定时任务
- 延时任务
- 周期任务
分布式定时任务特点: 自动化、平台化、分布式、伸缩性、高可用
执行方式:
- 单机任务
- 广播任务
- Map任务
- MapReduce任务
业内流行框架:Xxl-job、SchedulerX、TCT
02 实现原理
2.1 核心架构
分布式定时任务核心要解决触发、调度、执行三个关键问题
数据流
功能架构
2.2 触发器
方案1 定期扫描+延时消息(腾讯、字节方案)
方案2 时间轮(Quartz)
链表-最小堆-时间轮-多级时间轮
时间轮由最小堆优化而来
时间轮的优化:多级时间轮方案(时分秒轮)
高可用
- 存储上,不同国别、业务做资源隔离
- 运行时,不同国别、业务分开执行
- 部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁(Redis或Zookeeper)保证任务只被触发一次
2.3 调度器
资源来源
业务系统提供 / 定时任务平台提供
节点选择
随机节点执行、广播执行、分片执行
N个执行器Executor,M个业务数据区段,最好M>=N,且M是N的整数倍
高级特性
- 任务编排:使用有向无环图(DAG)进行任务编排
- 故障转移:确保部分执行单元任务失败时,任务最终成功
- 分片任务基于一致性hash策略分发任务,当某Executor异常时,调度器会将任务分发到其他Executor
- 高可用:调度器可以集群部署,做到完全的无状态,靠消息队列的重试机制保障任务一定会被调度
2.4 执行器
- 注册、调度、回调、心跳检测
- 基于注册中心,可以做到执行器的弹性扩缩容
03 业务应用
电商
- 订单30分钟未付款自动关闭订单
- 定时给商家、达人发送消息,给用户发送youhuiquan
互动
- 支付宝集五福
- 字节春节集卡瓜分红包
游戏
- 活动结束后批量补发用户未领取的奖励
- 定期更新游戏内榜单
其他解决方案
发货后超过10天未收货时系统自动确认收货
- 使用分布式定时任务的延时任务
- 使用消息队列的延时消息或者定时消息
春节集卡活动统计集卡用户的用户个数和总翻倍数
- 使用分布式定时任务的MapReduce任务
- 使用大数据离线处理引擎Hive离线做统计
- 使用大数据实时处理引擎Flink实时做累计