批量摘要任务放在低优先级队列,高优先级流量一直不断,低优任务三天没被调度,业务方以为任务丢了,其实是队列里排着 12 万条。

一开始怀疑是「任务没有超时和过期时间,堆积后没人发现」,查了一圈,方向不对。

原因不止一个,得分开看。优先级队列严格按级别取任务,没有配额保护。也可能是高优队列持续有流量,低优永远轮不到。

不容易想到的是,监控只看总积压,按优先级拆不开。

动手时先按优先级统计积压与等待时长

python queue_stat.py --by priority --window 72h

给低优队列留固定并发配额

python -c "print({'high':12,'low':4})"

接着加任务过期时间避免无限堆积

python -c "print({'ttl_s':86400})"

末了用低峰窗口单独跑一批验证吞吐

python drain_queue.py --priority low --max 5000

别只看报错消失,验证要多做一步。低优队列的等待时长从 72 小时降到 2 小时以内,高优的 P99 没有变化,按优先级拆开的积压曲线都能看到。

补一句。严格优先级一定会饿死低优任务,得给低优留固定配额或者用加权轮询;监控按优先级拆开,不然积压只是一个大数字。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189