服务等级目标(SLO)
SLO 为用户可感知的服务表现设定目标。本文讲解 SLI、错误预算、告警和容量余量。
1. 面试核心
先记住这几条,再读正文- SLI 口径。 请求型 SLI 等于好事件数除以有效事件数。
- SLO 定义。 SLO 同时包含指标目标与统计窗口。卡 · 综合题
- 错误预算。 错误预算比例为
1-SLO,允许失败数还取决于有效事件数。 - 预算消耗速率。 燃烧率等于错误率除以预算比例,多窗口用于确认持续故障。卡 · 多窗口计算
- 故障容量。 故障余量按剩余资源的安全吞吐计算。卡 · 可用区故障余量
2. 服务与用户旅程
登录、支付和后台导出有不同的时效要求。指标需明确用户、入口、完成条件和统计范围。
下单可用性可从合法请求进入网关开始计算。成功下单或正确拒绝都可作为好事件。依赖超时造成未知结果,则计为失败。具体定义需与产品语义一致。
3. SLI
请求型 SLI 采用比例:
SLI = good events / valid events
可用性统计正确完成的请求。延迟指标统计阈值内完成的请求。两者可分别定义,也可组合成一个好事件条件。
定义还需说明采集位置、排除条件和缺失数据处理。地区或租户分组用于发现局部故障。靠近用户的测量能覆盖网关等链路。
4. SLO
目标示例为:过去 28 天,99.9% 的有效下单请求正确完成。另一个目标为:99% 的商品查询在 300 ms 内完成。
滚动窗口持续反映近期表现。日历窗口便于按月评估。报表、告警和发布策略应采用一致口径。
目标由用户需求、失败损失与实现成本决定。内部目标可严于外部协议,以保留响应时间。
5. 错误预算
99.9% 的请求型 SLO 对应 0.1% 的预算比例。若窗口内有一亿次有效请求,允许十万次失败。剩余预算还需扣除已经发生的失败。
请求预算与停机时长的口径不同。高峰期短暂故障可消耗大量请求预算。换算停机分钟数时,应单独说明时间型指标。
发布策略可按预算状态执行。预算充足时正常发布,快速消耗时缩小灰度。预算耗尽后优先恢复可靠性。安全修复与止损变更可保留通道。
6. 燃烧率告警
燃烧率比较当前错误率和允许错误比例:
burn rate = observed error ratio / (1 - SLO)
SLO 为 99.9%,当前错误率为 1%,燃烧率就是 10。它描述消耗速度,剩余预算决定还能支撑多久。
6.1 多窗口计算
以 30 天窗口和近似恒定流量为例。燃烧率 14.4 持续一小时,消耗整窗预算的 2%:
14.4 × 1 / (30 × 24) = 2%
可同时要求过去 1 小时和 5 分钟超过 14.4。长窗口确认累计影响,短窗口确认故障仍在持续。故障结束后,短窗口更快恢复正常。
流量变化时,应直接计算失败事件与整窗预算。低流量接口需结合合成探针和实际失败数量。单个失败就会显著改变低流量比例。
7. 容量余量
单位资源安全吞吐由满足 SLO 的压测结果给出。预测峰值除以安全吞吐,得到基础资源需求。还需计入扩容预热、发布并存和依赖退化。
7.1 可用区故障余量
假设三个可用区均衡承载 6000 QPS。单实例安全吞吐为 500 QPS。要求任一区失效后仍能承接全部流量。
剩余两区共需 12 个实例,所以每区至少 6 个。正常状态共 18 个实例,总安全容量为 9000 QPS。负载占安全容量约 66.7%。
这只是给定假设下的最低配置。实际流量倾斜与数据库瓶颈还需压测。自动扩容的预热时间也需额外余量。
8. 依赖的可用性预算
同步必选依赖会影响整条用户路径。若两个依赖相互独立,且都必须成功,可用性可相乘估算。相关故障会破坏独立假设。
缓存、异步化或降级可减少必选依赖。它们也会改变结果语义。返回 200 但用户无法完成任务时,仍应按定义计为坏事件。
9. 常见问题
9.1 SLA 与 SLO
SLO 是工程管理目标。SLA 是对外协议,并约定未达标的后果。内部 SLO 可严于 SLA。
9.2 目标的划分粒度
按关键用户旅程划分少量目标,便于资源决策。登录、支付和后台导出可分别定义。过多接口级目标会增加维护成本。
10 · 面试题卡片
本页题目与参考回答
10.1 怎样为一个核心服务制定 SLO 和容量余量
出现公司:阿里巴巴
题型:综合题
考察重点
- 用户旅程、SLI 分子分母和统计窗口。
- 错误预算、燃烧率与发布策略。
- 峰值、故障域、扩容时间和压测基线。
参考回答
核心服务的 SLO 应由用户旅程、好事件和统计窗口定义。
例如,28 天内 99.9% 的合法下单请求正确完成。错误预算据此计算,并绑定告警与发布策略。
容量用满足 SLO 的安全吞吐计算。峰值、预热和可用区失效共同决定余量。剩余实例与关键依赖都要具备接管能力。上线后用真实流量和演练结果修正估计。
10.2 99.9% 的 SLO 下,14.4 倍燃烧率持续一小时意味着什么?
出现公司:暂无已核验的公开来源(本站自测)
考察重点:预算比例、统计窗口与多窗口告警。
相关内容:多窗口计算。
参考回答
按 30 天窗口、流量近似恒定计算,14.4 倍燃烧率持续一小时会消耗整窗预算的 2%。
99.9% SLO 的允许错误比例为 0.1%,14.4 倍对应实际错误率 1.44%。一小时占 30 天的 1/720,所以预算消耗为 14.4 / 720 = 2%。告警再结合短窗口,可确认故障仍在持续。
10.3 三可用区承接 6000 QPS,如何计算单区失效后的实例余量?
出现公司:暂无已核验的公开来源(本站自测)
考察重点:安全吞吐、故障域与负载均衡假设。
相关内容:可用区故障余量。
参考回答
每实例安全吞吐为 500 QPS 时,每区至少需要 6 个实例。
任一区失效后,剩余 12 个实例共承接 6000 QPS。计算假设三地均衡且下游容量足够。倾斜、增长和预热还需额外余量。