4. SLO 基础概念:SLI、SLO、SLA 的定义与区别、错误预算机制、SLO 目标设定方法论
在构建蓝绿发布门禁系统之前,必须建立一套可量化的服务质量衡量体系。SLI、SLO、SLA 是这一体系的三大支柱,而错误预算则是连接 SLO 与运维决策的桥梁。本节将系统梳理这些核心概念的定义、区别与实战应用方法。
4.1 三大核心概念定义
| 术语 | 全称 | 核心定义 | 典型示例 |
|---|---|---|---|
| SLI | Service Level Indicator 服务等级指标 |
对服务某个维度的实际测量值,是原始观测数据 | 请求延迟 P99 = 120ms;错误率 = 0.05% |
| SLO | Service Level Objective 服务等级目标 |
对 SLI 设定的目标阈值或范围,是内部承诺 | 99.9% 的请求延迟 ≤ 200ms(SLO) |
| SLA | Service Level Agreement 服务等级协议 |
与客户/用户签订的正式合同条款,含惩罚机制 | 99.95% 可用性,否则赔偿 10% 月费 |
关键区别:SLI 是事实(测量值),SLO 是目标(内部承诺),SLA 是合同(外部约束)。SLO 通常比 SLA 更严格,为 SLA 提供缓冲。
4.2 三者的层级关系与数据流
下图展示了从原始指标采集到合同承诺的完整数据链路,以及蓝绿发布门禁在其中扮演的角色。
实战要点:蓝绿发布门禁的判定逻辑应基于 SLO 阈值,而非 SLA 阈值。因为 SLO 比 SLA 更严格,在 SLO 被违反之前拦截有问题的发布,可以避免触发 SLA 赔偿。
4.3 错误预算机制
错误预算(Error Budget)是 SRE 实践中最具创新性的概念之一,它将 SLO 的遵守情况转化为可量化的“预算”进行管理。
4.3.1 错误预算的定义与计算
错误预算 = 1 - SLO。例如:
- 如果 SLO 为 99.9%,则错误预算为 0.1%(即 100% - 99.9%)。
- 在一个 30 天的月份中,允许的最大不可用时间为:30 × 24 × 60 × 0.1% = 43.2 分钟。
- 如果本月已发生 30 分钟故障,则剩余错误预算为 13.2 分钟。
| SLO 目标 | 错误预算(30 天) | 允许最大故障时间 | 典型场景 |
|---|---|---|---|
| 99.9%(3 个 9) | 0.1% | 43.2 分钟 | 内部工具、非关键业务 |
| 99.99%(4 个 9) | 0.01% | 4.32 分钟 | 核心业务、在线交易 |
| 99.999%(5 个 9) | 0.001% | 25.9 秒 | 金融核心、电信基础设施 |
4.3.2 错误预算的消费与恢复
错误预算的消耗与恢复机制是门禁决策的核心依据:
门禁联动规则:当错误预算消耗超过 50% 时,蓝绿发布门禁应进入黄色预警状态,允许发布但需人工确认;当消耗超过 80% 时,门禁应自动拦截所有非紧急发布,直到错误预算恢复至安全水位。
4.4 SLO 目标设定方法论
设定合理的 SLO 目标是门禁系统有效运作的前提。以下是经过 Google SRE 实践验证的设定方法论:
4.4.1 四步设定法
- 识别关键用户旅程:列出用户最常使用的 3-5 个核心流程(如登录、搜索、下单、支付)。
- 选择合适 SLI:为每个用户旅程选择最能反映用户体验的指标(延迟、错误率、可用性)。
- 设定初始目标:基于历史数据(过去 1-3 个月)的 P90/P99 值,设定一个“可达成但需努力”的目标。
- 迭代优化:每季度回顾 SLO 达成情况,根据业务增长和技术演进调整目标。
4.4.2 目标设定原则
| 原则 | 说明 | 反例 |
|---|---|---|
| 用户中心 | SLO 应反映真实用户体验,而非基础设施指标 | CPU 使用率 ≤ 80%(与用户无关) |
| 可测量 | SLI 必须能被持续、准确地采集 | “用户体验良好”(无法量化) |
| 可达成 | 目标不应过于激进,留出创新空间 | 100% 可用性(不现实) |
| 可改进 | 目标应能驱动团队采取具体行动 | “保持稳定”(无改进方向) |
4.4.3 蓝绿发布场景下的 SLO 设定示例
案例:电商平台蓝绿发布门禁 SLO
- SLI 1 - 请求延迟 P99:测量新版本上线后 5 分钟内,所有请求的 P99 延迟。
- SLO 1:P99 延迟 ≤ 200ms,且相比基线版本退化 ≤ 10%。
- SLI 2 - 错误率:测量新版本上线后 5 分钟内,HTTP 5xx 错误率。
- SLO 2:错误率 ≤ 0.1%,且相比基线版本退化 ≤ 0.05%。
- SLI 3 - 可用性:测量新版本上线后 10 分钟内,服务可用性。
- SLO 3:可用性 ≥ 99.99%(即 10 分钟内不可用时间 ≤ 0.06 秒)。
4.5 门禁决策中的 SLO 聚合模型
在蓝绿发布场景中,门禁系统需要综合多个 SLO 指标做出决策。以下是推荐的聚合判定模型:
# 门禁 SLO 聚合判定伪代码
def canary_gate_decision(canary_metrics, baseline_metrics, slo_config):
"""
基于多 SLO 聚合的门禁决策
"""
violations = []
# 1. 延迟 SLO 检查
if canary_metrics.p99_latency > slo_config.latency_threshold:
violations.append("P99_LATENCY_EXCEEDED")
elif (canary_metrics.p99_latency - baseline_metrics.p99_latency) / \
baseline_metrics.p99_latency > slo_config.latency_degradation_pct:
violations.append("P99_LATENCY_DEGRADED")
# 2. 错误率 SLO 检查
if canary_metrics.error_rate > slo_config.error_rate_threshold:
violations.append("ERROR_RATE_EXCEEDED")
elif (canary_metrics.error_rate - baseline_metrics.error_rate) > \
slo_config.error_rate_degradation:
violations.append("ERROR_RATE_DEGRADED")
# 3. 可用性 SLO 检查
if canary_metrics.availability < slo_config.availability_threshold:
violations.append("AVAILABILITY_BELOW_THRESHOLD")
# 4. 错误预算检查
if slo_config.error_budget_remaining < slo_config.error_budget_minimum:
violations.append("ERROR_BUDGET_EXHAUSTED")
# 决策逻辑
if len(violations) == 0:
return "PASS" # 全部通过,允许全量发布
elif len(violations) <= 1:
return "WARN" # 轻微违规,需人工确认
else:
return "BLOCK" # 严重违规,自动拦截发布
最佳实践:门禁系统应同时检查值 SLO(如延迟 ≤ 200ms)和相对退化 SLO(如相比基线退化 ≤ 10%)。前者确保服务不突破底线,后者防止渐进式劣化被忽视。
4.6 本章小结
- SLI 是原始测量指标,SLO 是内部目标,SLA 是外部合同承诺,三者构成服务质量管理的金字塔。
- 错误预算 = 1 - SLO,是连接 SLO 与运维决策的量化工具,也是蓝绿发布门禁的核心输入。
- SLO 设定应遵循用户中心、可测量、可达成、可改进四大原则,避免设定不切实际的目标。
- 门禁系统应采用多 SLO 聚合判定模型,综合延迟、错误率、可用性和错误预算做出 PASS / WARN / BLOCK 决策。