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
容量水位多维模型 容量水位 计算水位 内存水位 网络水位 存储水位 应用水位 水位聚合原则: • 单维度水位 = max(该维度下所有子指标水位) • 系统整体水位 = max(计算水位, 内存水位, 网络水位, 存储水位, 应用水位) • 短板效应:系统容量由水位最高的维度决定,而非平均值

2.2 水位口径的定义

水位口径(Watermark Caliber)是指容量水位计算时所采用的基准值、统计窗口和聚合策略的完整约定。口径不统一,水位数据就失去可比性。混沌工程验证必须明确以下三个口径要素:

  1. 基准口径:安全承载上限的确定方式。常见有压测拐点法、历史峰值法、硬件标称法。
  2. 统计口径:数据采集的时间窗口与聚合方式。例如“过去 5 分钟 P99 水位”或“过去 1 小时平均水位”。
  3. 触发口径:水位达到何值时触发混沌实验、告警或自动扩缩容。
口径类型 定义方法 适用场景 风险提示
压测拐点法 通过全链路压测找到性能拐点,取拐点负载的 80% 作为上限 核心链路、有压测能力的系统 压测模型需定期校准
历史峰值法 取过去 30 天业务高峰期的 P99 负载值 无压测条件、业务波动明显的系统 可能低估真实上限
硬件标称法 使用硬件厂商提供的理论最大吞吐量 新建系统、无历史数据 理论值远高于实际可用值
口径陷阱:不同团队使用不同口径计算同一系统的水位,结果可能相差 30% 以上。混沌工程实验前必须统一口径定义,并在实验报告中注明口径来源。

2.3 水位与系统健康度的映射关系

系统健康度(System Health Score)是容量水位在业务语义层面的映射。水位是客观的物理度量,健康度是主观的业务评价。两者通过以下映射模型关联:

水位 → 健康度映射模型 0% 40% 60% 80% 100% 健康区 水位 ≤ 40% 警戒区 40% < 水位 ≤ 60% 危险区 60% < 水位 ≤ 80% 崩溃区 水位 > 80% 健康度评分公式: 健康度 = 100 × (1 - 水位 / 100)² 当水位 = 40% 时,健康度 = 36 分(警戒线) 当水位 = 80% 时,健康度 = 4 分(崩溃线)

水位与健康度的映射遵循以下三条核心规则:

  • 非线性映射:健康度随水位上升呈二次方衰减。水位从 0% 升至 40%,健康度从 100 降至 36;水位从 40% 升至 80%,健康度从 36 骤降至 4。
  • 分区阈值:健康区(水位 ≤ 40%)可正常进行混沌实验;警戒区(40%–60%)需评估实验风险;危险区(60%–80%)禁止引入额外故障;崩溃区(> 80%)应立即启动降级或扩容。
  • 混沌实验触发条件:系统整体水位必须处于健康区或警戒区下沿(≤ 50%),且目标资源维度水位 ≤ 60%,方可注入故障。
实践建议:在混沌工程平台中,将水位口径配置为实验前置检查项。每次实验前自动校验当前水位是否在允许范围内,并记录实验前后的水位变化量,作为容量规划的重要输入。