如何与产品、运维一起制定合理的 SLO?请给出电商下单接口的 SLO 示例

解读

面试官想验证三件事:

  1. 你是否理解 SLO 与 SLA、SLI 的区别,以及它在性能保障体系中的位置;
  2. 你是否能把“技术语言”翻译成“业务语言”,让产品听得懂、运维做得到;
  3. 你是否能把抽象目标拆成可量化、可观测、可灰度验证的指标,并给出电商核心链路的落地实例。

回答时要体现“共创”过程:产品提体验诉求 → 运维给资源与历史数据 → 测试给基准与风险评估 → 三方一起拍板,而不是测试单方面“写指标”。

知识点

  1. SLO(Service Level Objective)是内部驱动质量改进的量化目标,SLA 是对外承诺,SLI 是实际观测值;SLO 必须 ≤ SLA。
  2. 制定流程:业务场景拆解 → 关键路径识别 → 指标选取(SLI)→ 基线采集 → 容忍阈值(SLO)→ 验证与灰度 → 定期复盘。
  3. 电商下单接口的关键维度:可用性、响应时间、成功率、并发承载、资源成本。
  4. 国内主流可观测栈:Prometheus + Grafana + Loki/ELK + Alertmanager,SLO 常通过 Grafana SLO 插件或自写 Recording Rule 落地。
  5. 合规与容灾:需考虑大促峰值、机房级故障、支付渠道抖动,SLO 要区分“日常基线”与“大促降级”两档,避免一次大促把全年错误预算烧光。
  6. 错误预算(Error Budget)= 1 − SLO,用于平衡“快速迭代”与“稳定性”,预算用完即触发“封网”或“限流降级”。

答案

制定步骤(可直接在面试中按顺序陈述):

步骤 1:业务共创
产品侧输出用户故事:“95% 的用户从点击‘提交订单’到看到‘支付页’不超过 2 秒,否则可能流失。”
运维侧给出历史数据:近 3 个月日常 P99 延迟 1.4 s,大促峰值 P99 2.8 s,CPU 水位 70%,错误率 0.3%。
测试侧给出竞品基准:友商同场景 P99 1.8 s,错误率 0.2%。

步骤 2:选取 SLI
电商下单接口核心 SLI 四项:

  • 可用性 = 健康探测成功次数 / 总探测次数
  • 响应时间 = 网关日志中“下单接口”耗时
  • 成功率 = 返回码 200 且业务状态为“创单成功” / 总请求
  • 限流降级触发率 = 被限流或降级请求 / 总请求(辅助指标,不计入 SLO,但用于错误预算校正)

步骤 3:设定 SLO(双档制)
日常基线:

  • 可用性 ≥ 99.9%
  • 成功率 ≥ 99.8%
  • P99 响应时间 ≤ 1.5 s
  • P95 响应时间 ≤ 800 ms

大促降级(提前 2 周公告):

  • 可用性 ≥ 99.5%
  • 成功率 ≥ 99.5%
  • P99 响应时间 ≤ 2.2 s
  • P95 响应时间 ≤ 1.2 s

错误预算:日常 0.1%,大促 0.5%,由运维在 Grafana 做 Burndown 图,每周复盘。

步骤 4:可观测与告警
Prometheus 侧写 Recording Rule:
sliding_7d_availability = increase(order_create_2xx_total[7d]) / increase(order_create_total[7d])
告警规则:当 5 分钟滑动可用性 < SLO 阈值或 7 天错误预算消耗 > 50% 时,飞书机器人@值班测试与运维。

步骤 5:验证与签字
在预发环境跑 1.5 倍峰值容量 8 小时,验证 SLO 达成;产品与运维在 Confluence 电子签字,正式生效。

步骤 6:定期复盘
每月故障 Review 会,若错误预算消耗过快,则冻结非紧急发布,启动性能优化专项(如缓存预热、SQL 索引、JVM 调优)。

电商下单接口 SLO 示例一句话总结:
“日常可用性 99.9%、成功率 99.8%、P99 1.5 s;大促可用性 99.5%、成功率 99.5%、P99 2.2 s,错误预算烧完即封网。”

拓展思考

  1. 如何说服产品接受“大促降级”而不是“全年一个标准”?
    用数据说话:给出去年大促因强守 99.9% 导致扩容成本增加 120 万元,且仍出现 2 次限流舆情;将成本与舆情风险量化后,产品自然愿意签“降级”。
  2. 如果接口依赖第三方支付,支付渠道抖动导致成功率下跌,是否算违反 SLO?
    需在 SLO 定义里增加“免责条款”:非本系统导致的 4xx/5xx 不计入分母,但必须在网关层打标“external_fail”,否则测试背锅。
  3. 错误预算与敏捷迭代冲突怎么办?
    引入“灰度预算”:小流量实验版本先消耗 10% 预算,若 24 h 内无异常再全量;让迭代与稳定性双赢。
  4. 国内监管要求交易数据多活容灾,RPO ≤ 1 min,是否应写进 SLO?
    建议把“数据一致性”设为内部 SLO,不对外 SLA,但纳入错误预算,避免合规风险被忽视。