2. SLO与SLI基础:定义服务等级目标与指标,如何为容量规划奠定可量化基础
在容量规划中,最常犯的错误是“凭感觉扩容”或“按峰值盲目加资源”。要解决这个问题,必须引入一套可量化的服务健康度衡量体系——SLI(服务等级指标)与SLO(服务等级目标)。它们不仅是监控的输入,更是容量水位优化的“度量衡”。
2.1 核心概念:SLI、SLO与Error Budget
在开始实战之前,需要清晰区分这三个基础概念。它们构成了从“测量”到“目标”再到“预算”的完整闭环。
| 术语 | 定义 | 容量规划中的角色 |
|---|---|---|
| SLI | 服务等级指标,是对服务某个特性的具体量化测量值。例如:请求延迟的P99、请求成功率、吞吐量。 | 作为容量水位的“温度计”,直接反映当前资源供给下服务的真实表现。 |
| SLO | 服务等级目标,是SLI的目标值或目标范围。例如:99.9%的请求延迟小于200ms。 | 作为容量规划的“红线”,定义了资源供给必须满足的最低性能标准。 |
| Error Budget | 错误预算,是SLO允许的“不达标”时间或次数。例如:月度SLO为99.9%,则月度错误预算为0.1%的总请求量。 | 作为容量决策的“货币”,当错误预算充足时,可以接受更激进的资源利用率;当预算紧张时,必须优先保障稳定性。 |
关键认知: 容量规划不是追求“永远不失败”,而是追求“在Error Budget允许的范围内,最大化资源利用率”。SLO定义了“多好才算好”,Error Budget定义了“可以容忍多差”。
2.2 如何定义有效的SLI:从用户视角出发
并非所有指标都适合作为容量规划的SLI。必须选择那些能直接反映用户体验且与资源瓶颈强相关的指标。以下是四个核心维度:
- 可用性(Availability):服务是否正常响应。通常用请求成功率衡量。容量不足时,典型表现是连接超时或请求被拒绝。
- 延迟(Latency):服务响应速度。通常关注高百分位(如P99、P95)。容量不足时,延迟会显著增加,尤其是尾部延迟。
- 吞吐量(Throughput):服务处理请求的速率。通常用RPS(每秒请求数)或QPS衡量。这是容量规划的直接输入。
- 饱和度(Saturation):服务资源被占用的程度。例如CPU使用率、内存使用率、连接池占用率。这是容量规划的“先行指标”。
实战建议: 对于容量规划,建议至少选择延迟(P99)和饱和度(CPU/内存)作为核心SLI。延迟直接反映用户体验,饱和度则能提前预警容量瓶颈。
2.3 从SLI到SLO:设定可量化的容量红线
定义好SLI后,需要为其设定SLO。SLO的设定需要平衡用户体验与资源成本。以下是一个典型的SLO定义示例:
# 示例:核心API服务的SLO定义
service: "user-api"
slis:
- name: "请求延迟 P99"
measurement: "latency_p99_ms"
slo:
target: 200 # 单位:毫秒
compliance_window: "rolling_30d" # 滚动30天窗口
threshold: 99.9 # 99.9%的请求需要满足此延迟
- name: "请求成功率"
measurement: "success_rate"
slo:
target: 99.99 # 百分比
compliance_window: "rolling_30d"
threshold: 99.99
- name: "CPU饱和度"
measurement: "cpu_utilization_pct"
slo:
target: 80 # CPU使用率不超过80%
compliance_window: "rolling_1h" # 短窗口用于容量告警
threshold: 99.0
在容量规划中,SLO的合规窗口非常重要。长窗口(如30天)用于评估整体服务质量,短窗口(如1小时)用于触发容量告警和扩缩容决策。
2.4 Error Budget:容量决策的“货币”
Error Budget是SLO的衍生品,它量化了服务可以“犯错”的额度。在容量规划中,Error Budget的状态直接决定了资源策略:
- Error Budget充足(> 50%剩余):可以接受更高的资源利用率,允许进行成本优化、缩容或使用更便宜的实例类型。
- Error Budget中等(20% - 50%剩余):保持当前容量策略,谨慎进行变更,监控资源趋势。
- Error Budget紧张(< 20%剩余):立即启动容量保障流程,暂停非必要的变更,准备扩容或限流。
- Error Budget耗尽(0%):触发SLO违规,必须立即进行容量修复,否则将面临严重的服务降级。
常见误区: 不要将Error Budget视为“可以随意浪费的额度”。在容量规划中,Error Budget是风险缓冲,而不是性能基准。频繁耗尽Error Budget意味着SLO设定过于激进或容量规划存在系统性缺陷。
2.5 容量规划的可量化基础:SLI/SLO驱动的水位模型
将SLI、SLO和Error Budget整合后,可以构建一个清晰的容量水位模型。这个模型将资源利用率与服务质量直接挂钩,使得容量决策有据可依。
2.6 实战案例:从指标到容量决策
假设一个电商核心服务“订单服务”定义了以下SLO:
- SLI:P99延迟 < 500ms
- SLO:99.9%的请求在30天滚动窗口内满足此延迟
- Error Budget:月度总请求量的0.1%
某天,监控显示P99延迟从200ms飙升至450ms,CPU使用率从60%升至85%。此时:
- SLI告警:延迟SLI接近SLO红线,CPU饱和度SLI已超过80%的预警线。
- Error Budget消耗:计算过去1小时的错误预算消耗,发现消耗速度是平时的5倍。
- 容量决策:根据Error Budget剩余量(假设剩余40%),决定立即扩容2个Pod,并触发容量水位复盘。
核心收益: 通过SLI/SLO体系,容量规划从“被动响应”转变为“主动管理”。Error Budget成为了衡量容量风险的统一货币,使得扩容、缩容、成本优化等决策都有了明确的量化依据。
2.7 本章小结:可量化基础的建设路径
为容量规划奠定可量化基础,需要完成以下三步:
| 步骤 | 动作 | 产出 |
|---|---|---|
| 1 | 识别与容量强相关的SLI(延迟、饱和度) | SLI定义文档 |
| 2 | 设定合理的SLO目标值及合规窗口 | SLO配置文件 |
| 3 | 建立Error Budget消耗与容量决策的联动机制 | 容量决策矩阵 |