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 三者的层级关系与数据流

下图展示了从原始指标采集到合同承诺的完整数据链路,以及蓝绿发布门禁在其中扮演的角色。

SLI / SLO / SLA 层级关系与数据流 SLI → SLO → SLA 层级关系与数据流 SLI 层:原始指标采集 请求延迟(P50/P90/P99) | 错误率(5xx / 超时) | 吞吐量(QPS / RPS) | 饱和度(CPU / 内存) SLO 层:目标定义与门禁判定 延迟 SLO:99.9% 请求 ≤ 200ms | 错误率 SLO:≤ 0.1% | 可用性 SLO:≥ 99.99% 蓝绿发布门禁判定 SLA 层:合同承诺与补偿 可用性 ≥ 99.95% | 月度故障时间 ≤ 21.6 分钟 | 违约补偿:10% 月费
实战要点:蓝绿发布门禁的判定逻辑应基于 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 错误预算的消费与恢复

错误预算的消耗与恢复机制是门禁决策的核心依据:

错误预算消耗与恢复周期 错误预算消耗与恢复周期 Day 0 Day 7 Day 15 Day 22 Day 30 消耗(故障/延迟增加) 恢复(正常运营/优化) 门禁触发 门禁触发 当消耗曲线超过恢复曲线 门禁自动拦截新发布
门禁联动规则:当错误预算消耗超过 50% 时,蓝绿发布门禁应进入黄色预警状态,允许发布但需人工确认;当消耗超过 80% 时,门禁应自动拦截所有非紧急发布,直到错误预算恢复至安全水位。

4.4 SLO 目标设定方法论

设定合理的 SLO 目标是门禁系统有效运作的前提。以下是经过 Google SRE 实践验证的设定方法论:

4.4.1 四步设定法

  1. 识别关键用户旅程:列出用户最常使用的 3-5 个核心流程(如登录、搜索、下单、支付)。
  2. 选择合适 SLI:为每个用户旅程选择最能反映用户体验的指标(延迟、错误率、可用性)。
  3. 设定初始目标:基于历史数据(过去 1-3 个月)的 P90/P99 值,设定一个“可达成但需努力”的目标。
  4. 迭代优化:每季度回顾 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 决策。