延时队列

设计分布式延时队列和定时任务系统

系统设计 延时队列 定时任务

系统演进路线

从 sleep 定时器到分布式延时任务平台

第 1 版

业务线程 sleep

订单 30 分钟未支付要取消,开发者先在代码里启动定时线程。

内存任务sleep订单回调

最容易理解,但进程重启、任务量和可观测性都不可接受。

第 2 版

数据库轮询

任务必须持久化,系统开始用表记录执行时间和状态。

任务表状态机索引扫描批处理

可靠性提高,但扫描成本和调度延迟会限制规模。

第 3 版

高性能调度

任务量上升到百万级,需要 Redis ZSet、MQ 或时间轮承接热任务。

Redis ZSet延迟消息时间轮分片队列

调度性能提升后,取消、重试和幂等仍要靠任务模型保证。

生产版

分布式延时任务平台

多个业务接入后,需要隔离、抢占、故障转移和死信治理。

租约锁执行器集群重试策略死信队列监控告警

生产级延时队列是调度、执行、恢复和业务幂等共同组成的系统。

课程简介

延时队列解决的是“现在产生任务,将来某个时间点可靠执行”的问题。它看起来像一个简单定时器,但一旦进入生产环境,就会遇到任务持久化、执行幂等、重复消费、调度延迟、节点故障、任务积压和跨业务隔离等系统问题。

这门课以订单 30 分钟未支付自动取消为起点,逐步把一个临时脚本演进为生产级延时任务平台。

学习路线

  1. 开始:从真实事故理解延时队列为什么是基础设施,而不是业务代码里的 sleep
  2. 基本概念:建立延迟语义、任务模型、可靠性和幂等边界。
  3. 数据库轮询方案:用最容易落地的方案理解索引、批处理和扫描成本。
  4. Redis ZSet 方案:用分数表达执行时间,提升调度性能并处理多队列隔离。
  5. 消息队列延时方案:比较 RabbitMQ、Kafka 等方案在延迟任务中的能力和限制。
  6. 时间轮:理解高性能定时调度如何把大量任务分桶推进。
  7. 系统架构:整合存储、调度、执行、重试、监控和容量规划。
  8. 分布式任务:处理多调度器、锁、故障转移和任务重复执行问题。

读完后,你应该能判断不同延时任务方案适合什么规模和业务要求,并能设计一套可观测、可恢复、可水平扩展的延时队列系统。

章节