深色模式
分布式系统 SLO
摘要:一个接口背后有 N 个服务,A 99.9% × B 99.9% × C 99.9% ≈ 99.7%。分布式系统里 SLO 不是简单取最小,要考虑依赖拓扑与降级策略,否则目标订得永远达不成。
适用环境
- 服务存在明确上下游依赖(如 网关→订单→库存→支付)
- 有调用链/依赖关系可参考
操作步骤
1. 画依赖链并算端到端理论值
text
端到端可用 ≈ 各依赖可用之积(无降级时)
网关 99.95% × 订单 99.9% × 支付 99.9% ≈ 99.75%1
2
2
2. 对关键依赖设更严内部 SLO
text
支付对外 SLO 99.9%,那它依赖的“记账服务”内部 SLO 应更严(如 99.95%),
给上游留余量。1
2
2
3. 用降级把“硬依赖”变“软依赖”
text
库存查不到时返回缓存/默认值(降级),
则“库存不可用”不再直接拉垮下单 SLO。1
2
2
4. 端到端 SLI 实测而非理论
promql
# 用入口网关的成功率作为端到端 SLI
sum(rate(gateway_requests_total{result="ok"}[5m]))
/ sum(rate(gateway_requests_total[5m]))1
2
3
2
3
DANGER
不要对各服务 SLO 取“最小值”当作系统 SLO——乘积效应会让末端远低于单服务目标,目标必须按依赖层数反推。
验证
bash
# 在 Grafana 对比“理论乘积”与“端到端实测 SLI”,差距过大说明有隐藏依赖1
常见坑
WARNING
- 降级会掩盖真实故障,降级开关要有指标和告警,避免“一直在降级”没人发现。
- 跨团队依赖时,对方 SLO 不可控,需在合同中约定并监控其达标率。