3. SLO 设定方法论:三种核心路径

SLO(Service Level Objective)是 Error Budget 策略的起点。设定一个“既不过松导致无意义、也不过紧导致频繁告警”的 SLO,需要系统化的方法论。本章围绕三种主流设定路径展开:用户旅程驱动、历史数据驱动、业务目标驱动。三种方法并非互斥,实际生产中通常组合使用。

核心原则:SLO 不是“系统能跑多快”的宣言,而是“用户能接受多差”的共识。先定义“不可用”,再定义“可用”。

3.1 基于用户旅程的 SLO 设定

用户旅程(User Journey)是从用户视角出发,将一次完整交互拆解为多个关键步骤。SLO 应直接绑定到这些步骤的成败上,而非底层基础设施指标。

设定步骤:

  1. 绘制核心旅程:识别用户完成一次业务目标所经过的系统节点(如:登录 → 搜索 → 查看详情 → 加入购物车 → 支付 → 订单确认)。
  2. 定义每个步骤的 SLI:为每个步骤选择最能反映用户体验的指标(如:登录成功率、搜索响应时间、支付成功率)。
  3. 分配权重与目标:根据步骤对业务的影响程度,分配不同的 SLO 目标(支付步骤的 SLO 通常高于浏览步骤)。
  4. 计算复合 SLO:通过串联或并联模型,计算整体旅程的可用性。
案例:电商下单旅程 SLO 分解
旅程步骤SLI 口径权重单步 SLO
用户登录登录成功率 (5xx + 超时)20%99.9%
商品搜索搜索结果返回时间 P95 < 2s15%99.5%
商品详情加载详情页渲染成功率15%99.5%
加入购物车加购接口成功率10%99.9%
提交支付支付成功率 (含回调)30%99.99%
订单确认订单状态最终一致性延迟 < 5s10%99.9%

复合 SLO 计算(串联模型): 0.999 × 0.995 × 0.995 × 0.999 × 0.9999 × 0.999 ≈ 98.8%。这意味着即使每个步骤都很高,整体旅程仍可能只有 2 个 9。

基于用户旅程的 SLO 分解 登录 搜索 详情 加购 支付 确认 SLI: 成功率 SLI: P95延迟 SLI: 渲染成功率 SLI: 接口成功率 SLI: 支付成功率 SLI: 最终一致性 SLO: 99.9% SLO: 99.5% SLO: 99.5% SLO: 99.9% SLO: 99.99% SLO: 99.9% 复合旅程 SLO ≈ 98.8% 串联模型:0.999 × 0.995 × 0.995 × 0.999 × 0.9999 × 0.999

3.2 基于历史数据的 SLO 设定

当系统已经运行一段时间,积累了足够的监控数据时,可以通过分析历史表现来设定 SLO。这种方法的核心是“以过去的行为为锚点”,避免设定不切实际的目标。

实施流程:

  • 数据采集窗口:至少取过去 30~90 天的 SLI 数据,覆盖业务高峰、低谷、以及已知的故障时段。
  • 分位数分析:计算 SLI 的 P50、P90、P95、P99 值,观察分布形态。SLO 通常设定在 P95 或 P99 附近。
  • 排除异常点:剔除已知的重大故障窗口(如机房断电、代码回滚),避免“被故障拉低”的 SLO 成为常态目标。
  • 设定缓冲区间:在历史 P99 基础上,增加 0.1%~0.5% 的缓冲,为未来增长留出空间。
常见陷阱:直接使用历史数据的“平均值”作为 SLO。平均值会掩盖长尾问题。例如:平均延迟 200ms,但 P99 延迟可能高达 5s。SLO 应基于分位数,而非均值。

历史数据 SLO 设定示例(以 API 成功率为例):

指标过去 30 天 P50过去 30 天 P95过去 30 天 P99建议 SLO
API 成功率99.99%99.95%99.80%99.90%
API 延迟 (ms)1203501200P95 < 400ms
数据库查询成功率99.99%99.97%99.85%99.95%
基于历史数据分位数设定 SLO 历史 SLI 数据分布(简化示意) P50: 99.99% P95: 99.95% P99: 99.80% 建议 SLO: 99.90% 在 P99 基础上 +0.1% 缓冲

3.3 基于业务目标的 SLO 设定

这是最高层级的设定方法:SLO 直接服务于业务 KPI。例如:“支付成功率 SLO 必须保证季度营收损失不超过 10 万元”。这种方法将技术指标与财务影响挂钩,便于向管理层解释 SLO 的价值。

转化公式:

业务损失 = 总请求量 × (1 - SLO) × 单次失败平均损失金额

示例:
- 每日支付请求:100 万笔
- 目标 SLO:99.99%
- 单笔失败平均损失:50 元(含客诉、补偿、流失)
- 每日预期损失:1,000,000 × 0.01% × 50 = 5,000 元
- 月度损失:15 万元

若业务要求月度损失 < 5 万元,则 SLO 需提升至 99.997%
业务目标驱动 SLO 设定矩阵
业务目标关联 SLI可接受损失/影响反推 SLO
季度营收损失 < 50 万支付成功率单笔损失 50 元99.99%
核心用户流失率 < 0.5%登录成功率每次失败流失率 2%99.95%
客服工单量 < 1000/月订单最终一致性延迟每延迟 1 分钟产生 0.5 个工单P99 < 30s
合规审计通过率 100%数据持久化成功率单次失败导致合规扣分99.999%

3.4 三种方法对比与选择策略

维度用户旅程驱动历史数据驱动业务目标驱动
适用阶段新系统设计、重构已运行 3 个月以上的系统有明确财务/业务指标
数据依赖低(依赖业务理解)高(依赖监控数据质量)中(依赖业务财务模型)
管理层认可度中低(技术视角)高(直接关联损益)
调整频率随业务迭代调整季度/半年度重新校准随业务目标变化调整
风险可能忽略非关键路径可能固化历史低水平可能过于激进导致频繁告警
推荐组合策略:
  1. 新系统上线:以用户旅程驱动为主,快速建立初始 SLO。
  2. 运行 1 个季度后:引入历史数据驱动,校准 SLO 的合理性。
  3. 与业务对齐:使用业务目标驱动,将 SLO 转化为财务语言,获取管理层支持。
  4. 持续迭代:每季度回顾三种方法的结果,取交集或加权平均作为最终 SLO。