4. 容量模型基础:容量规划三要素与资源消耗模型
在 PromServerless 平台中,容量调优的核心是建立可量化的容量模型。本章将深入剖析容量规划的三大要素(CPU、内存、并发),并推导请求速率与并发的关系,最终构建 QPS 与资源消耗的数学模型。只有理解这些基础,后续的配额校准才有理论依据。
4.1 容量规划三要素:CPU / 内存 / 并发
容量规划不是盲目堆资源,而是围绕三个核心维度进行建模:
| 要素 | 含义 | 在 PromServerless 中的体现 | 典型瓶颈特征 |
|---|---|---|---|
| CPU | 每秒可执行的指令数(计算能力) | 函数执行耗时、冷启动 CPU 突发、运行时 CPU 积分 | 请求延迟增加、CPU 节流(Throttling) |
| 内存 | 函数实例可使用的最大内存空间 | 堆内存使用、缓存命中率、GC 频率 | OOM Kill、频繁 Full GC、内存交换 |
| 并发 | 同一时间正在处理中的请求数量 | 实例并发度(单实例多请求)、最大实例数 | 请求排队、连接池耗尽、超时错误 |
实践要点: 三要素并非独立。例如,增加内存可能降低 GC 频率从而减少 CPU 开销;提高并发度可能增加内存压力。容量模型必须考虑三者之间的耦合关系。
4.2 请求速率与并发关系:Little's Law 在 Serverless 中的应用
请求速率(QPS)与并发数(Concurrency)之间存在确定性的数学关系,即 Little's Law:
Concurrency = QPS × Latency (秒)
在 PromServerless 平台中,这个公式需要拆解为两层:
- 实例级并发:单个函数实例同时处理的请求数。例如,一个实例并发处理 10 个请求,每个请求延迟 200ms,则该实例的吞吐量为 10 / 0.2 = 50 QPS。
- 平台级并发:所有实例的总并发数。平台级并发 = 实例数 × 实例级并发。
下面通过一个 SVG 图展示请求速率、延迟与并发之间的三角关系:
案例: 假设某函数平均延迟为 500ms,目标 QPS 为 200。则所需平台级并发 = 200 × 0.5 = 100。如果每个实例最大并发为 10,则需要至少 10 个实例。
4.3 QPS 与资源消耗模型
QPS 与资源消耗的关系并非线性,而是受限于函数本身的资源效率。我们构建一个通用的资源消耗模型:
CPU_Usage = QPS × (CPU_Time_Per_Request + Overhead)
Memory_Usage = QPS × Memory_Per_Request × Avg_Request_Lifetime
其中:
- CPU_Time_Per_Request:单次请求消耗的 CPU 时间(秒)。
- Overhead:冷启动、序列化、网络 IO 等额外 CPU 开销。
- Memory_Per_Request:每个请求占用的内存(MB)。
- Avg_Request_Lifetime:请求在内存中的平均驻留时间(秒)。
下面通过一个 SVG 图展示 QPS 增长时资源消耗的变化趋势:
4.4 容量模型实战:从指标到配额
在 PromServerless 平台中,容量模型最终要转化为具体的配额数值。以下是一个典型的容量计算流程:
- 采集基线:通过压测或生产监控获取函数在稳定状态下的 CPU 时间、内存占用、延迟 P99。
- 确定目标 QPS:根据业务 SLA 确定需要支撑的峰值 QPS。
- 计算并发需求:使用 Little's Law 计算所需平台级并发。
- 计算资源需求:根据 QPS 与单请求资源因子计算总 CPU 和内存需求。
- 设置配额:将资源需求转换为 PromServerless 的配额配置(如最大实例数、实例规格、并发度上限)。
常见陷阱: 不要直接使用平均延迟计算并发。在 Serverless 场景中,P99 延迟往往比平均值高 2-5 倍。建议使用 P95 或 P99 延迟作为 Little's Law 的输入,以避免突发流量下的容量不足。
4.5 本章小结
| 核心概念 | 关键公式 / 关系 | 在容量调优中的作用 |
|---|---|---|
| CPU / 内存 / 并发 | 三要素相互耦合 | 确定资源瓶颈维度 |
| Little's Law | 并发 = QPS × 延迟 | 计算所需实例数与并发度 |
| 资源消耗模型 | 资源 = QPS × 单请求因子 | 量化 CPU 与内存配额 |