2. 容量水位基础概念
2.1 什么是容量水位
容量水位(Capacity Watermark)是衡量系统资源使用程度与剩余承载能力的量化指标。它并非简单的“已用/总量”百分比,而是融合了资源利用率、排队深度、响应延迟和错误率的多维度量,用于回答“系统当前离极限还有多远”。
核心定义:容量水位 = 当前负载 / 安全承载上限 × 100%。其中“安全承载上限”通常取性能拐点(Knee Point)处负载的 80%,而非硬件理论最大值。
容量水位按资源维度可划分为以下几类:
| 维度 | 典型指标 | 水位计算方式 | 安全阈值 |
|---|---|---|---|
| 计算 | CPU 使用率、Load Average | CPU 使用率 / 80% | ≤ 1.0(即 ≤ 80%) |
| 内存 | 已用内存、Swap 使用量 | 已用内存 / 可用内存上限 | ≤ 0.85 |
| 网络 | 带宽利用率、连接数 | 当前带宽 / 链路带宽 × 100% | ≤ 70% |
| 存储 | 磁盘 IOPS、吞吐量 | 当前 IOPS / 磁盘最大 IOPS | ≤ 0.75 |
| 应用 | QPS、P99 延迟 | QPS / 压测拐点 QPS | ≤ 0.8 |
2.2 水位口径的定义
水位口径(Watermark Caliber)是指容量水位计算时所采用的基准值、统计窗口和聚合策略的完整约定。口径不统一,水位数据就失去可比性。混沌工程验证必须明确以下三个口径要素:
- 基准口径:安全承载上限的确定方式。常见有压测拐点法、历史峰值法、硬件标称法。
- 统计口径:数据采集的时间窗口与聚合方式。例如“过去 5 分钟 P99 水位”或“过去 1 小时平均水位”。
- 触发口径:水位达到何值时触发混沌实验、告警或自动扩缩容。
| 口径类型 | 定义方法 | 适用场景 | 风险提示 |
|---|---|---|---|
| 压测拐点法 | 通过全链路压测找到性能拐点,取拐点负载的 80% 作为上限 | 核心链路、有压测能力的系统 | 压测模型需定期校准 |
| 历史峰值法 | 取过去 30 天业务高峰期的 P99 负载值 | 无压测条件、业务波动明显的系统 | 可能低估真实上限 |
| 硬件标称法 | 使用硬件厂商提供的理论最大吞吐量 | 新建系统、无历史数据 | 理论值远高于实际可用值 |
口径陷阱:不同团队使用不同口径计算同一系统的水位,结果可能相差 30% 以上。混沌工程实验前必须统一口径定义,并在实验报告中注明口径来源。
2.3 水位与系统健康度的映射关系
系统健康度(System Health Score)是容量水位在业务语义层面的映射。水位是客观的物理度量,健康度是主观的业务评价。两者通过以下映射模型关联:
水位与健康度的映射遵循以下三条核心规则:
- 非线性映射:健康度随水位上升呈二次方衰减。水位从 0% 升至 40%,健康度从 100 降至 36;水位从 40% 升至 80%,健康度从 36 骤降至 4。
- 分区阈值:健康区(水位 ≤ 40%)可正常进行混沌实验;警戒区(40%–60%)需评估实验风险;危险区(60%–80%)禁止引入额外故障;崩溃区(> 80%)应立即启动降级或扩容。
- 混沌实验触发条件:系统整体水位必须处于健康区或警戒区下沿(≤ 50%),且目标资源维度水位 ≤ 60%,方可注入故障。
实践建议:在混沌工程平台中,将水位口径配置为实验前置检查项。每次实验前自动校验当前水位是否在允许范围内,并记录实验前后的水位变化量,作为容量规划的重要输入。