积压一定发生在最窄处
存储路径上分布着许多队列:应用线程池、操作系统块层、主机总线适配器、存储前端端口、后端磁盘组,每一段都有容量上限。请求一旦超过某一段的处理速度,就在该段排队,队列填满后新请求只能等待或直接被拒绝。排队本身的规律可以用「平均排队请求数 ≈ 到达速率 × 平均等待时间」来估计,所以看到队列变长时,要么到达速率上去了,要么某段处理变慢了。
基本信息
| 队列位置 | 应用线程池、块层、适配器、前端端口、后端盘组 |
|---|---|
| 观测指标 | 队列长度、时延分位、完成速率、拒绝与重试计数 |
| 容量参数 | 块层队列深度、适配器队列深度、端口并发上限 |
| 拥塞特征 | 时延上升而完成速率不变,重试与超时同步增加 |
| 处理方向 | 降到达速率、扩最窄段、断开重试放大链 |
典型使用场景
- 批量任务上线后时延整体抬升:确认队列是否被填满
- 共享存储多主机争用:总量超过后端能力导致集体排队
- 接口超时集中爆发:重试叠加使队列进一步恶化
- 链路抖动后恢复缓慢:排队请求一次性释放形成尖峰
- 容量规划:用队列余量判断还能承接多少新业务
拥塞处置的优先顺序
拥塞处置的优先顺序
# 第 1 步 止损:暂停非关键批量任务与备份窗口,先把到达速率降下来
# 第 2 步 断开放大链:给应用与客户端设置退避与重试上限,避免重试风暴
# 第 3 步 定位最窄段:逐段比较完成速率,最慢的一段就是拥塞点
# 第 4 步 扩最窄段:增加端口或链路、提升后端并行度、调整队列深度
# 第 5 步 设限:对单主机、单租户、单业务设置并发或带宽上限,防止互相挤占
# 第 6 步 复盘:把触发条件写入容量评估与变更评审,避免重复发生拥塞表现对照
| 表现 | 说明 | 建议动作 |
|---|---|---|
| 队列长且时延长 | 到达速率超过处理能力 | 先降并发,再评估扩容 |
| 队列长但时延稳定 | 后端尚有余力,属正常缓冲 | 持续观察,不必立即干预 |
| 完成速率下降 | 后端或介质侧出现退化 | 查介质健康与后端负载 |
| 超时与重试齐增 | 已进入重试放大阶段 | 限制重试次数并加退避 |
| 个别主机时延高 | 该主机侧队列或多路径不均衡 | 检查本机适配器与路径分布 |
拥塞期间最危险的动作是重试:每一次失败重试都会增加到达速率,把本该缓解的排队推向崩盘。客户端必须设置指数退避与重试上限。
队列深度不是越大越好:更深的队列能吸收突发,但会让请求等待更久才被处理,尾时延明显变差。深度参数应结合业务的超时时间设定。