---
title: 有限队列与准入控制
url: https://doc.liz6.com/theory/03-queueing-theory/08-finite-queues-and-admission
locale: zh
area: theory
tags:
- 排队论
- 基础理论
date: 2026-09-10
modified: 2026-09-10
description: 有限队列把无界等待转化为接纳与拒绝的取舍。队长不再增长，只能说明存储有界；若多数请求被拒绝，系统仍可能不满足业务目标。
---

# 有限队列与准入控制

有限队列把无界等待转化为接纳与拒绝的取舍。队长不再增长，只能说明存储有界；若多数请求被拒绝，系统仍可能不满足业务目标。

## M/M/1/K：K 包括正在服务的请求

沿用 Poisson 到达、独立指数服务、单台 FCFS，但系统最多容纳 $K$ 个请求。满时立即拒绝，不重试、不放弃。定义提供负荷比 $r=\lambda/\mu$，有限状态 $0,\ldots,K$ 的稳态为：

$$\pi_n=\frac{r^n}{\sum_{j=0}^{K}r^j}.
$$

当 $r=1$ 时，各状态概率为 $1/(K+1)$，没有奇点。有限链在正的到达与服务率下可正再生，即使提供流量超过能力也有稳态。注意此时 $r$ 不等于实际利用率，甚至可以大于 1。

Poisson 到达使拒绝概率等于 $\pi_K$。有效接纳率、实际忙碌比例与平均系统时间分别为：

$$\lambda_{\mathrm{eff}}=\lambda(1-\pi_K)=\mu(1-\pi_0),\qquad
U=1-\pi_0,\qquad E[T\mid\text{accepted}]=\frac{L}{\lambda_{\mathrm{eff}}}.$$

这里 $L=\sum n\pi_n$。对内部在途数使用外部 $\lambda$ 会把被拒绝、没有进入系统的请求混进分母。

**有限队列与准入控制 · 实验**

M/M/1/K，μ=100/s；K含服务中的1个位置，满时立即拒绝且不重试。有限链有稳态，但接纳率、拒绝率和延迟共同决定是否可用。


默认 $\lambda=120$/s、$\mu=100$/s、$K=5$，拒绝概率约 25.1%，接纳率约 89.9/s，平均系统时间约 33.6 ms。把 K 增大，拒绝可能减少、实际忙碌更充分，但接纳者的等待通常增加。实验没有超时、失败或重试，所以接纳者最终都完成；生产中的成功速率还需另计。

## 准入、背压和超时各改变什么

准入在资源消耗前拒绝或延后工作；背压把下游承受能力反馈给上游，可能让等待转移到客户端或另一个队列；超时规定调用者愿意等多久。三者不能互相替代。

仅在客户端超时，服务器未必停止原工作。继续重试可能造成多个副本同时占用资源。应该传播截止时间、在排队和派工时检查剩余预算，并支持确实可执行的取消或去重语义。有限队列模型没有刻画这些机制，不能从其结果直接推导 deadline 成功率。

排队预算若为 20 ms，不能简单以平均 1000/s 乘 20 ms 就断言 K=20 满足 p99。前方服务成本、剩余服务、并行台数和波动都重要；若有可靠的单任务工作量上界，可建立保守等待上界，否则需要分布模型或测量。

## 成功完成工作量才是目标

吞吐应区分提供、接纳、完成和有效成功（goodput）。一个很快返回拒绝的系统，整体响应分位数甚至可能变好；应将拒绝率与成功请求延迟并列报告，并声明超时、取消和未完成请求如何计入 SLO。

## 自检

1. $\lambda=\mu$、$K=1$ 时，拒绝率和平均接纳者系统时间是多少？

<details><summary>参考思路</summary>

$\pi_0=\pi_1=1/2$，拒绝率一半，接纳率 $\lambda/2$，$L=1/2$，故平均时间为 $1/\mu$。K=1 没有等待位，接纳者立即服务；它不是“一个等待位加一个服务位”。

</details>

2. 超时从 1 s 改成 100 ms，服务端工作量是否一定下降？

<details><summary>参考思路</summary>

不一定。若没有取消原工作且客户端更频繁重试，总工作量可能增加。需要观察尝试次数、服务端完成/取消、重复工作和资源占用，而不只看客户端等待变短。

</details>

## 延伸

有限容量记账见 [MIT 排队讲义](https://web.mit.edu/1.041/www/lectures/L8-queuing-models-2026sp.pdf)；实际准入与拒绝成本见 [Google SRE](https://sre.google/sre-book/handling-overload/)。消息重复与业务身份见[消息语义](../../distributed-systems/07-messages-and-streams/01-message-semantics.md)。
