这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
延时队列
设计分布式延时队列和定时任务系统
系统设计 延时队列 定时任务
系统演进路线
从 sleep 定时器到分布式延时任务平台
第 1 版
业务线程 sleep
订单 30 分钟未支付要取消,开发者先在代码里启动定时线程。
内存任务sleep订单回调
最容易理解,但进程重启、任务量和可观测性都不可接受。
第 2 版
数据库轮询
任务必须持久化,系统开始用表记录执行时间和状态。
任务表状态机索引扫描批处理
可靠性提高,但扫描成本和调度延迟会限制规模。
第 3 版
高性能调度
任务量上升到百万级,需要 Redis ZSet、MQ 或时间轮承接热任务。
Redis ZSet延迟消息时间轮分片队列
调度性能提升后,取消、重试和幂等仍要靠任务模型保证。
生产版
分布式延时任务平台
多个业务接入后,需要隔离、抢占、故障转移和死信治理。
租约锁执行器集群重试策略死信队列监控告警
生产级延时队列是调度、执行、恢复和业务幂等共同组成的系统。
课程简介
延时队列解决的是“现在产生任务,将来某个时间点可靠执行”的问题。它看起来像一个简单定时器,但一旦进入生产环境,就会遇到任务持久化、执行幂等、重复消费、调度延迟、节点故障、任务积压和跨业务隔离等系统问题。
这门课以订单 30 分钟未支付自动取消为起点,逐步把一个临时脚本演进为生产级延时任务平台。
学习路线
- 开始:从真实事故理解延时队列为什么是基础设施,而不是业务代码里的
sleep。 - 基本概念:建立延迟语义、任务模型、可靠性和幂等边界。
- 数据库轮询方案:用最容易落地的方案理解索引、批处理和扫描成本。
- Redis ZSet 方案:用分数表达执行时间,提升调度性能并处理多队列隔离。
- 消息队列延时方案:比较 RabbitMQ、Kafka 等方案在延迟任务中的能力和限制。
- 时间轮:理解高性能定时调度如何把大量任务分桶推进。
- 系统架构:整合存储、调度、执行、重试、监控和容量规划。
- 分布式任务:处理多调度器、锁、故障转移和任务重复执行问题。
读完后,你应该能判断不同延时任务方案适合什么规模和业务要求,并能设计一套可观测、可恢复、可水平扩展的延时队列系统。