3. SLA 核心概念:SLA、SLI、SLO 与错误预算
在构建服务画像与弹性伸缩运营体系之前,必须统一团队对 SLA 核心概念的语言。本章将定义 SLA、SLI、SLO 与错误预算四个基础概念,并建立它们之间的量化推导关系。
3.1 概念定义与职责边界
| 概念 | 英文全称 | 核心定义 | 典型粒度 |
|---|---|---|---|
| SLA | Service Level Agreement | 服务提供商与客户之间的正式合同承诺,包含违约赔偿条款 | 产品 / 客户合同 |
| SLI | Service Level Indicator | 服务质量的原始可测量指标,如延迟、错误率、吞吐量 | 单个请求 / 时间窗口 |
| SLO | Service Level Objective | 对 SLI 设定的目标阈值,如“99.9% 的请求延迟 < 200ms” | 滚动窗口(如 30 天) |
| 错误预算 | Error Budget | SLO 允许的不可用时间或失败次数 = 1 − SLO | 月度 / 季度预算池 |
关键认知:SLA 是法律合同,SLO 是内部工程目标,SLI 是原始数据,错误预算则是风险控制工具。弹性伸缩的健康口径应基于 SLO 而非 SLA 设计,因为 SLO 更贴近实际运营窗口。
3.2 四者之间的量化推导关系
下图展示了从原始指标到合同承诺的完整链路:
推导公式:
错误预算 = 1 − SLO(例如 SLO = 99.9%,则错误预算 = 0.1%)。
月度错误预算分钟数 = 总分钟数 × (1 − SLO) = 43200 × 0.001 = 43.2 分钟 / 月。
错误预算 = 1 − SLO(例如 SLO = 99.9%,则错误预算 = 0.1%)。
月度错误预算分钟数 = 总分钟数 × (1 − SLO) = 43200 × 0.001 = 43.2 分钟 / 月。
3.3 SLI 的选取原则与常见类型
SLI 必须直接反映用户体验,且可被自动化采集。以下是弹性伸缩场景中最常用的 SLI 分类:
| SLI 类别 | 典型指标 | 采集方式 | 弹性伸缩关联性 |
|---|---|---|---|
| 延迟 | P50 / P95 / P99 响应时间 | APM / 中间件埋点 | 高延迟触发扩容 |
| 错误率 | HTTP 5xx 占比 / 业务错误码 | 负载均衡日志 / 业务监控 | 错误率突增触发熔断或扩容 |
| 吞吐量 | QPS / TPS / 并发连接数 | 网关 / 服务网格指标 | 吞吐量接近上限触发扩容 |
| 饱和度 | CPU / 内存 / 连接池使用率 | 基础设施监控 | 饱和度超过阈值触发扩容 |
避坑提示:不要将基础设施指标(如 CPU 使用率)直接作为 SLI 的 SLO 目标。CPU 高不一定代表用户体验受损,应优先选择端到端的请求延迟或错误率作为核心 SLI。
3.4 SLO 的设定方法与常见误区
SLO 的设定需要平衡用户体验与运营成本。以下是推荐的设定步骤:
- 收集历史数据:分析过去 30-90 天的 SLI 分布,找到自然波动区间。
- 确定目标百分位:通常使用 P99 或 P95 作为 SLO 的统计窗口。
- 设定宽松内部 SLO:内部 SLO 应比对外 SLA 严格 10%-20%,预留错误预算缓冲。
- 定义多级 SLO:例如“核心 API P99 延迟 < 200ms(SLO1)”、“非核心 API P99 延迟 < 500ms(SLO2)”。
- 定期评审调整:每季度根据业务增长和架构变化重新校准 SLO。
| 常见误区 | 错误表现 | 正确做法 |
|---|---|---|
| SLO 等于 SLA | 内部目标与合同承诺完全一致,无缓冲 | 内部 SLO 应比 SLA 严格 10%-20% |
| 单一 SLO 覆盖所有请求 | 忽略不同 API 路径的差异化要求 | 按业务重要性分级设定 SLO |
| SLO 设定后不调整 | 业务增长后 SLO 过松或过严 | 每季度基于数据重新校准 |
3.5 错误预算的运营机制
错误预算将 SLO 转化为可消耗的“风险额度”,是弹性伸缩决策的核心输入。下图展示了错误预算的消耗与恢复周期:
错误预算驱动的弹性伸缩策略:
• 当错误预算消耗 < 50%:允许激进扩容,快速响应流量增长。
• 当错误预算消耗 50%-80%:转为保守扩容,优先使用现有资源。
• 当错误预算消耗 > 80%:冻结所有非必要变更,仅执行缩容以降低成本。
• 当错误预算耗尽:立即启动熔断机制,停止所有弹性伸缩操作,进入人工应急模式。
• 当错误预算消耗 < 50%:允许激进扩容,快速响应流量增长。
• 当错误预算消耗 50%-80%:转为保守扩容,优先使用现有资源。
• 当错误预算消耗 > 80%:冻结所有非必要变更,仅执行缩容以降低成本。
• 当错误预算耗尽:立即启动熔断机制,停止所有弹性伸缩操作,进入人工应急模式。
3.6 核心概念总结
| 概念 | 一句话总结 | 在弹性伸缩中的角色 |
|---|---|---|
| SLA | 对外合同承诺,包含赔偿条款 | 定义伸缩的底线约束 |
| SLI | 原始可测量指标 | 作为伸缩触发条件的输入数据 |
| SLO | 内部服务质量目标 | 设定伸缩的健康阈值 |
| 错误预算 | 允许的不可用额度 | 控制伸缩的激进程度与风险 |