SRE系列(二) | 从可用性到 SLI/SLO

目录

1、系统可用性:别只盯着"几个 9"

在上一讲里我们聊到,SRE 是一套体系化工程,核心目标就是两个:提升 MTBF,降低 MTTR。说得直白一点,就是尽量减少故障发生,同时让系统出问题时能更快恢复。

那问题来了------我们到底用什么来衡量"系统稳定性"?业界最常见的答案就是:可用性(Availability)

你肯定听过所谓的 "三个 9" (99.9%)"四个 9" (99.99%) 这些说法。听起来很炫,但要真正用好"可用性"这个指标,很多团队其实理解得并不一致。今天我们就花一节课,把"系统可用性"聊透。


一、可用性的两种计算方式

目前业界有两种主流计算方式:

  1. 时间维度

    Availability = \\frac{Uptime}{Uptime + Downtime}

    也就是系统运行的正常时间 / 总时间。

  2. 请求维度

    Availability = \\frac{Successful , Request}{Total , Request}

    也就是成功请求数 / 总请求数。

这两个公式都很简单,但背后的含义却不一样。


二、时间维度:从"宕机时长"出发

这是最常见的方式。比如说,一年 365 天,如果系统有 3.65 天不可用,那就是 99% 可用性

下表是常见的"几个 9"和对应的故障时间:

可以看到,从 99% 到 99.999%,差距非常大。比如 99.9%(三个 9) ,一年可以停机 8.76 小时;而 99.999%(五个 9) ,一年只能容忍 5 分钟 故障。

不过,时间维度的缺点也很明显:它只关注"大故障",但对那些频繁的小异常几乎无感。

想象一下,一个系统每天短暂抖动几秒钟,虽然总 Downtime 不多,但对用户体验来说其实很糟糕。这就是时间维度不够精细的地方。


三、请求维度:从"成功率"出发

为了更精细化,很多团队会用请求维度来算可用性。

举个例子:某系统一天有 100,000 次请求,如果失败 5001 次,成功率就是 94.999%,低于 95% 的阈值,那就算系统不可用。

这种方式的优点是更贴近用户感受:哪怕只有几秒钟的异常,如果影响了请求成功率,也会被记录下来。

所以总结一句话:

  • 时间维度关注"宕机时长";
  • 请求维度关注"用户体验"。

四、几个 9,怎么定?

那么,到底要定多少个 9 才算"合格"?

其实没有统一答案,要看三个因素:

  1. 成本

    可用性越高,成本越高。要上"双活""多活",资源和运维投入都会翻倍。不是所有公司都能承担。

  2. 业务容忍度

    核心业务(支付、交易)容不得闪失,至少要"三个 9"甚至"四个 9"。

    非核心业务(评论、评分)则可以容忍低一些。

  3. 系统现状

    不要一口气定得太高。比如现在只有 98%,那先冲到 99%,再逐步提升。目标太高反而打击团队信心。


五、回顾

  1. 两种可用性计算方式:时间维度、请求维度;SRE 更偏好请求维度,因为它覆盖了更多"不稳定"的情况。
  2. 几个 9 不是越多越好,要结合成本、业务重要性和系统现状来设定。
  3. 记住一句话:故障一定意味着不稳定,但不稳定不一定意味着故障

把"系统可用性"这个指标聊清楚了,它是理解 SLI(服务等级指标)SLO(服务等级目标) 的基础。

在 SRE 的实践中,我们不只是看系统有没有大故障,而是要更全面地衡量运行状态,把"不稳定"也纳入考虑范围。下一讲,我们就会正式进入
SLI/SLO 的世界。

2、SLI 与 SLO,稳定性的第一步

聊了"几个 9",但光有"几个 9"还不够,因为没有明确的指标和目标,我们就无法衡量和改进系统的稳定性。这就是为什么 SRE 强调 SLI 和 SLO。

上面复盘了系统可用性的两种计算方式:

  • 时间维度:从宕机时长出发;
  • 请求维度:从成功请求占比出发

并且我们说过,在 SRE 实践中,更推荐使用 请求维度,因为它更贴近用户体验。

那问题来了:如果要用请求维度来衡量稳定性,就需要回答两个问题:

  1. 我们到底监控哪些指标?
  2. 这些指标要达到什么目标,才算"稳定"?

这两个问题的答案,就是今天的主角:SLI 和 SLO


一、SLI 和 SLO 是什么?

  • SLI(Service Level Indicator,服务等级指标)

    我们用来衡量系统稳定性的指标。

  • SLO(Service Level Objective,服务等级目标)

    给这些指标设定的目标值,比如"成功率 ≥ 99.95%"。

👉 举个例子:

在电商系统的购物车服务(trade_cart)中:

  • "状态码非 5xx 的比例" 就是 SLI
  • "大于等于 99.95%" 就是 SLO

一句话:SLO 是 SLI 要达到的目标。


二、如何选择合适的 SLI?

监控指标成百上千,哪些能做 SLI?我们要抓住两个原则:

  1. 能否直接反映主体的稳定性?

    如果主体是应用层,就优先选择应用层的指标,而不是 CPU 使用率这种系统层指标。

  2. 是否与用户体验强相关?

    成功率、延迟、错误率,这些用户能感知的指标优先。


快速选择方法:Google 的 VALET

Google 提供了一个非常实用的方法 ------ VALET

  • V (Volume 容量):QPS/TPS、吞吐能力
  • A (Availability 可用性):请求成功率、任务成功率
  • L (Latency 时延):响应速度,例如"95% 请求 ≤ 200ms"
  • E (Error 错误率):错误码比例、业务异常
  • T (Tickets 人工介入):人工干预次数

👉 VALET 是 SLI 选择的"快速备忘单",覆盖了最关键的五个角度。


三、如何设定合理的 SLO?

有了指标,还得设定目标。常见有两种方式:

  1. 单一条件
    比如:

    复制代码
    Successful = (状态码非 5xx) & (时延 <= 80ms)
    Availability = Successful / Total

缺点是过于死板。

  1. 组合条件(推荐)
  • SLO1:99.95% 请求状态码成功率
  • SLO2:90% 请求时延 ≤ 80ms
  • SLO3:99% 请求时延 ≤ 200ms

只有全部满足,系统才算达标。

👉 这种方式更灵活,也能避免平均值掩盖极端情况。


四、SLO vs SLA

这里要特别区分一下:

  • SLO:工程目标,团队内部用来约束和改进。
  • SLA(Service Level Agreement):商业承诺,对客户的合同保障,违约要赔偿。

所以:SLO 更细,SLA 更宽松。


五、回顾

  1. SLI 是指标,SLO 是目标
  2. SLI 要能直接反映主体稳定性,并和用户体验挂钩
  3. Google VALET 是快速识别 SLI 的方法论
  4. 设定 SLO 时推荐组合条件,而不是单一条件
  5. SLO 面向内部,SLA 面向外部

相关推荐
雅菲奥朗3 小时前
雅菲奥朗SRE知识墙分享(一):『SRE对智能运维领域所产生的深远影响』
运维·ai·sre
鸡鸭扣2 个月前
25年春招:米哈游运维开发一面总结
运维·面试·求职招聘·运维开发·面经·sre·米哈游
蜘蛛侠不会飞6 个月前
init的service 启动顺序
framework·安卓源码·service·init·稳定性
Amd7949 个月前
Nuxt.js 应用中的 error 事件钩子
前端·nuxt.js·web应用·稳定性·用户体验·错误处理·钩子
utmhikari10 个月前
【架构艺术】服务架构稳定性的基础保障
微服务·架构·稳定性·后端开发·问题排查
utmhikari1 年前
【架构艺术】大规模业务逻辑迁移实践
重构·架构·数据迁移·稳定性·后端开发
蜘蛛侠不会飞1 年前
【安卓13 源码】RescueParty救援机制
framework·安卓源码·稳定性·救援模式·recoverry
SRETalk1 年前
SRE 排障利器,接口请求超时试试 httpstat
sre·httpstat
码龙12341 年前
Android ANR简介
android·稳定性·anr