2. SLI 基础概念:SLI、SLO、SLA 的定义与区别
2.1 核心术语定义
在微服务 CI/CD 流水线中,可靠性度量需要从三个层次进行定义:
| 术语 | 全称 | 定义 | CI/CD 场景示例 |
|---|---|---|---|
| SLI | Service Level Indicator | 服务等级指标,是实际测量的量化数据 | 构建成功率 = 成功构建次数 / 总触发次数 |
| SLO | Service Level Objective | 服务等级目标,是团队承诺的目标阈值 | 构建成功率 ≥ 99.5%(月度统计) |
| SLA | Service Level Agreement | 服务等级协议,是面向用户的正式承诺 | 对外承诺构建成功率 ≥ 99.0%,否则赔付 |
关键区别: SLI 是“测量值”,SLO 是“目标值”,SLA 是“合同值”。SLO 通常比 SLA 更严格,为团队留出安全缓冲。
2.2 三者的层级关系
下图展示了 SLI → SLO → SLA 的递进关系,以及它们在 CI/CD 流水线中的位置:
2.3 黄金信号在 CI/CD 中的映射
Google SRE 定义的四个黄金信号(延迟、流量、错误、饱和度)在 CI/CD 流水线中有明确的对应指标:
| 黄金信号 | CI/CD 映射指标 | SLI 口径示例 | 测量粒度 |
|---|---|---|---|
| 延迟 (Latency) | 流水线各阶段耗时 | 构建阶段 P95 耗时 ≤ 5min | 按流水线/阶段 |
| 流量 (Traffic) | 构建/部署触发频率 | 每小时构建触发次数 | 按时间窗口 |
| 错误 (Errors) | 构建失败率、测试失败率 | 构建失败次数 / 总构建次数 | 按流水线/分支 |
| 饱和度 (Saturation) | CI 资源利用率、队列深度 | 构建节点 CPU 使用率 ≥ 80% 时长 | 按节点/集群 |
实践建议: 在 CI/CD 流水线中,优先定义“错误”和“延迟”两个黄金信号的 SLI,因为它们直接影响开发者的交付效率。饱和度和流量信号通常在流水线规模扩大后逐步引入。
2.4 黄金信号映射关系图
下图展示了四个黄金信号如何从微服务运行态映射到 CI/CD 流水线的各个阶段:
2.5 SLI 口径设计原则
- 可测量性: SLI 必须能从 CI/CD 工具(Jenkins、GitLab CI、GitHub Actions)的日志或 API 中直接采集。
- 可对比性: 同一 SLI 在不同流水线、不同分支间的口径必须一致,避免“口径漂移”。
- 业务相关性: 优先选择直接影响开发者体验的指标,如“构建排队时间”比“构建节点温度”更有意义。
- 时间窗口: 明确 SLI 的统计周期(滚动窗口 1h / 24h / 7d),避免因短期波动导致误判。
常见陷阱: 不要将“构建成功率”定义为“成功构建次数 / 总触发次数”就结束。需要明确“成功”的标准——是编译通过?测试全部通过?还是镜像推送完成?口径定义越模糊,后续 SLO 监控越容易产生争议。
2.6 本章小结
| 概念 | 一句话总结 |
|---|---|
| SLI | 你实际测量到的数据(如:构建成功率 99.3%) |
| SLO | 你给自己定的目标(如:构建成功率 ≥ 99.5%) |
| SLA | 你对外承诺的底线(如:构建成功率 ≥ 99.0%) |
| 黄金信号 | 延迟、流量、错误、饱和度,映射到 CI/CD 各阶段形成具体 SLI |