2. SLO 与 SLI 基础:服务等级目标与指标

在蓝绿发布场景中,自动化决策的核心依据来自 服务等级指标(SLI) 与 服务等级目标(SLO)。没有量化的 SLI 和 SLO,发布系统无法判断新版本是否“健康”,也无法触发自动回滚。本节将系统性地定义 SLI、SLO、错误预算,并解释 SLO 违约在发布流程中的实际含义。

2.1 服务等级指标(SLI)选取原则

SLI 是衡量服务某个维度质量的具体量化指标。在蓝绿发布中,SLI 必须能够快速反映新版本实例的真实表现。

维度 常见 SLI 示例 采集方式 蓝绿发布中的重要性
可用性 请求成功率(HTTP 200/5xx 比率) 负载均衡器指标、应用探针 极高:直接反映服务是否存活
延迟 P50 / P95 / P99 响应时间 APM 工具、中间件埋点 高:新版本性能退化常先体现在延迟
吞吐量 每秒请求数(RPS) 网关指标、服务端计数器 中:用于判断新版本是否出现连接泄漏
错误率 业务错误码比例(非 HTTP 层面) 应用日志、业务埋点 高:HTTP 200 但业务逻辑失败
饱和度 CPU / 内存 / 连接池使用率 基础设施监控 中:辅助判断资源瓶颈
选取原则:蓝绿发布场景下,SLI 应满足 R.U.S.T 原则——Relevant(与用户体验强相关)、Unambiguous(定义明确无歧义)、Sensitive(对异常敏感)、Timely(采集延迟在秒级以内)。

2.2 服务等级目标(SLO)定义

SLO 是为 SLI 设定的目标阈值,表示“在特定时间窗口内,SLI 必须达到的水平”。SLO 不是 100%,因为 100% 的可用性在分布式系统中既不现实也不经济。

SLO 的典型表达方式:

  • 月度 SLO:“99.9% 的请求在 30 天内成功返回。”
  • 滚动窗口 SLO:“过去 28 天内,P99 延迟 ≤ 200ms。”
  • 发布窗口 SLO:“蓝绿切换后的 5 分钟内,错误率 ≤ 0.1%。”
蓝绿发布中的 SLO 设定建议:建议设置两个层级的 SLO——严格 SLO(用于触发自动回滚,如错误率 > 1%)和预警 SLO(用于触发告警,如错误率 > 0.5%)。
SLI 到 SLO 的映射关系 SLI → SLO → 错误预算 映射关系 SLI 指标采集 SLO 目标设定 错误预算计算 示例: SLI = 过去 1 分钟请求成功率(200 / 总请求数) SLO = 过去 28 天滚动窗口内,SLI ≥ 99.9% 错误预算 = (1 - 0.999) × 28 × 24 × 60 = 40.32 分钟可容忍的故障时间

2.3 错误预算概念

错误预算(Error Budget)是 SLO 的衍生概念,定义为 1 - SLO 所对应的可容忍故障时间。它把抽象的百分比目标转化为团队可感知的“可用时间额度”。

错误预算的计算公式:

错误预算 = (1 - SLO) × 时间窗口总时长

示例:
SLO = 99.9%(月度)
时间窗口 = 30 天 = 43,200 分钟
错误预算 = (1 - 0.999) × 43,200 = 43.2 分钟
关键理解:错误预算不是“允许出错的额度”,而是决策阈值。当错误预算耗尽时,团队应停止所有非必要的变更(包括蓝绿发布),优先恢复稳定性。

2.4 SLO 违约的含义

SLO 违约指在 SLO 定义的时间窗口内,SLI 的实际表现未达到预设的 SLO 阈值。在蓝绿发布场景中,SLO 违约是触发自动恢复(回滚)的核心条件。

SLO 违约的两种典型场景:

  • 瞬时违约:SLI 在短时间内(如 1 分钟)跌破 SLO 阈值,但尚未耗尽整个错误预算。此时应触发告警,但不一定立即回滚。
  • 持续违约:SLI 持续低于 SLO 阈值,导致错误预算快速消耗。当错误预算耗尽或达到预设的“回滚阈值”时,系统应自动执行回滚。
SLO 违约检测与自动恢复流程 蓝绿发布中的 SLO 违约检测与自动恢复流程 蓝绿流量切换完成 SLI 持续监控(1s 粒度) SLO 违约判断 触发自动回滚 保持新版本运行 违约 正常 检测周期:每 1 秒采集 SLI → 每 10 秒评估一次 SLO 违约状态 → 连续 3 次违约触发自动回滚

2.5 蓝绿发布中的 SLO 违约检测策略

在蓝绿发布自动化中,SLO 违约检测不是简单的“低于阈值就回滚”,而是需要结合时间窗口和错误预算消耗速率做综合判断。

推荐策略:

  1. 预热期忽略:流量切换后的前 30-60 秒,不触发 SLO 违约判断,避免冷启动导致的误报。
  2. 滑动窗口评估:使用 5 分钟滑动窗口计算 SLI,避免单次抖动触发回滚。
  3. 错误预算消耗速率告警:当错误预算消耗速率超过正常值的 2 倍时,提前告警。
  4. 硬性回滚阈值:当错误预算剩余不足 10% 时,无论是否达到 SLO 违约条件,都应暂停发布并评估回滚。
实战配置示例(Prometheus + Alertmanager):
groups:
  - name: bluegreen_slo
    rules:
      - alert: SLOViolationHighErrorRate
        expr: |
          (
            sum(rate(http_requests_total{status=~"5..", version="green"}[5m]))
            /
            sum(rate(http_requests_total{version="green"}[5m]))
          ) > 0.01
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Green 版本错误率超过 SLO 阈值 (1%)"
          description: "当前错误率: {{ $value | humanizePercentage }}"

2.6 本节小结

概念 定义 在蓝绿发布中的作用
SLI 服务质量的量化指标(如错误率、延迟) 作为新版本健康度的实时信号
SLO SLI 必须达到的目标阈值 定义“什么是可接受的发布质量”
错误预算 1 - SLO 对应的可容忍故障时间 用于判断是否应该继续发布或回滚
SLO 违约 SLI 未达到 SLO 阈值 触发自动回滚的核心条件