2、SLO基础回顾:服务等级目标定义、SLI指标类型(延迟、错误率、吞吐量、饱和度)、SLO燃烧速率
2.1 服务等级目标(SLO)定义
SLO(Service Level Objective)是服务等级协议(SLA)中的核心量化承诺,它基于一个或多个SLI(Service Level Indicator)设定目标阈值。SLO定义了“在特定时间窗口内,服务应达到的可靠性水平”。
SLO的核心公式:
SLO = 良好事件计数 / 总有效事件计数 ≥ 目标百分比
SLO关键属性:
- 时间窗口:滚动窗口(如30天、28天)或日历窗口(如月度、季度)。
- 目标阈值:通常表示为“三个9”(99.9%)、“四个9”(99.99%)等。
- 测量粒度:SLI数据采集的最小时间单位(如1分钟、5分钟)。
- 合规条件:窗口内满足目标的时间比例。
💡 关键概念: SLO不是“承诺”,而是“目标”。SLA是法律承诺,SLO是内部工程目标。SLO通常比SLA更严格(例如SLA为99.9%,SLO设为99.95%),为违反SLA预留缓冲。
2.2 SLI指标四大类型
SLI(Service Level Indicator)是衡量服务质量的量化指标。Google SRE经典分类将SLI归纳为四大黄金信号:延迟、错误率、吞吐量、饱和度。每个类型对应不同的采集策略和阈值设定方法。
| SLI类型 | 定义 | 典型测量方式 | 常见SLO目标 | 采集难点 |
|---|---|---|---|---|
| 延迟 | 请求从发出到收到完整响应的时间 | 百分位数(p50, p95, p99) | p99 ≤ 200ms | 长尾分布、客户端与服务端差异 |
| 错误率 | 失败请求占总请求的比例 | HTTP 5xx / 4xx / 超时 / 业务错误码 | 错误率 ≤ 0.1% | 业务错误与基础设施错误区分 |
| 吞吐量 | 单位时间内处理的请求量 | RPS(每秒请求数)、TPS(每秒事务数) | 峰值吞吐量 ≥ 10000 RPS | 突发流量、限流与降级影响 |
| 饱和度 | 资源使用程度,越接近上限越危险 | CPU / 内存 / 磁盘IO / 连接池使用率 | CPU ≤ 80% | 饱和度阈值因系统而异,需动态调整 |
📌 实践建议: 并非所有服务都需要四个SLI。对于关键用户路径,优先选择延迟和错误率;对于数据管道类服务,优先选择吞吐量和饱和度。
2.3 SLI指标类型关系图
下图展示了四大SLI类型之间的关联关系及其对服务健康状态的影响路径:
2.4 SLO燃烧速率
SLO燃烧速率(Burn Rate)衡量SLO消耗的速度。它表示在给定时间窗口内,实际错误率相对于SLO允许的错误率的倍数。燃烧速率是触发自愈剧本的关键信号。
燃烧速率计算公式:
燃烧速率 = 实际错误率 / (1 - SLO目标百分比)
示例:
SLO = 99.9% → 允许错误率 = 0.1%
实际错误率 = 0.5%
燃烧速率 = 0.5% / 0.1% = 5x
燃烧速率与SLO消耗时间的关系:
| 燃烧速率 | 含义 | SLO消耗时间(30天窗口) | 典型响应级别 |
|---|---|---|---|
| 1x | 刚好在SLO边界运行 | 30天 | 无需响应 |
| 2x | 错误率是允许值的2倍 | 15天 | 低优先级告警 |
| 5x | 错误率是允许值的5倍 | 6天 | 中优先级告警 |
| 10x | 错误率是允许值的10倍 | 3天 | 高优先级告警 |
| 36x | 错误率是允许值的36倍 | 20小时 | 紧急响应(P0) |
⚠️ 常见误区: 不要只依赖单一燃烧速率阈值。建议使用多窗口燃烧速率检测(如1小时窗口+6小时窗口+24小时窗口),避免短时突发误触发或长时慢速消耗漏报。
2.5 多窗口燃烧速率检测策略
为了平衡检测灵敏度和误报率,SRE实践推荐使用多窗口燃烧速率策略。下图展示了典型的多窗口检测架构:
2.6 SLO与自愈剧本的关联
在自愈剧本设计中,SLO燃烧速率是触发条件,SLI采集链路是数据基础。两者关系如下:
- SLI采集链路:提供实时、准确的SLI数据,是燃烧速率计算的输入。
- 燃烧速率:将SLI数据转化为SLO消耗速度,决定是否触发自愈。
- 自愈剧本:根据燃烧速率级别执行不同恢复动作(如扩容、重启、降级)。