1. 题目
一个异步订单处理服务在高峰期出现延迟上升。监控显示稳定吞吐约 200 req/s,端到端平均延迟约 150 ms。请用 Little 定律估算在途请求数,解释延迟、吞吐和队列的关系,并给出避免 backlog 失控的工程动作。
2. 约束与澄清
- Little 定律描述稳定系统的长期平均关系:
L = λW,其中 L 是系统内平均请求数,λ 是平均吞吐,W 是平均停留时间。 - 先说明统计窗口、请求边界和单位;短暂突发或尚未稳定的系统不能直接套用长期平均。
- 要区分服务时间、排队时间和端到端停留时间,否则会低估并发或误配线程池。
- 还要确认容量上限、超时策略、优先级和可丢弃工作。
3. 核心推导
把 200 req/s 与 0.15 s 相乘,得到平均在途请求数 L = 30。这不是“最多只能有 30 个请求”,也不是 p99 并发;它是给定窗口下的平均库存。若吞吐不变而平均停留时间翻倍,平均在途请求也翻倍,通常意味着队列或依赖延迟正在增长。
4. 参考分析
lambda = 200 # requests / second
W = 0.150 # seconds / request
L = lambda * W # 30 requests in the system on average
if arrival_rate > sustainable_service_rate:
queue grows without a stable bound
apply_admission_control_or_scale_out()
capacity = concurrency_limit / target_latency工程上应分别测量进入队列、开始处理、完成处理的时间。使用 Little 定律可反推容量:当并发上限为 100、目标平均停留时间为 200 ms 时,稳定吞吐的粗略上限约为 500 req/s;实际还要留出尾延迟、突发和依赖抖动余量。
5. 过载场景与取舍
当到达率持续高于可服务率,队列会增长,W 变大,进而让 L 变大,形成超时和重试放大的反馈回路。无限队列只把失败推迟,工作完成时可能已经失去价值。可采用有界队列、快速失败、优先级、负载削减、背压或扩容;每种策略都要明确丢弃哪类工作以及如何向调用方报告。
6. 验证与观测
- 按时间窗口记录到达率、完成率、在途数、平均和 p95/p99 延迟。
- 用
L、λ、W三组独立指标互相校验,发现单位或采样边界错误。 - 进行受控压测,逐步提高到达率,观察队列长度、超时率和恢复时间。
- 为队列深度、年龄、并发上限、拒绝率和重试率设置告警,并验证扩容或降载后的回落速度。
7. 常见误区
- 把平均 L 当作硬并发上限,忽略突发、尾延迟和排队分布。
- 用服务处理时间代替端到端 W,漏掉网络、锁和依赖等待。
- 在未达到稳定状态时用一小段样本推断长期容量。
- 只扩容消费者,不限制生产者,结果让共享依赖或下游队列继续过载。
8. 面试评分点
能正确代入公式
应统一单位,算出 200 × 0.15 = 30,并解释这是平均在途请求数而非上限。
能划分时间边界
应区分排队、服务和端到端时间,说明采样窗口与稳定状态假设。
能识别过载反馈
应说明到达率超过服务率会让队列、延迟、重试和并发相互放大,并提出有界化措施。
能用数据验证容量
应结合压测、p95/p99、队列年龄、拒绝率和恢复时间验证结论,而非只报一个平均数。