当前位置: 首页 > news >正文

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

目录

  • 1、系统可用性:别只盯着“几个 9”
    • 一、可用性的两种计算方式
    • 二、时间维度:从“宕机时长”出发
    • 三、请求维度:从“成功率”出发
    • 四、几个 9,怎么定?
    • 五、回顾
  • 2、SLI 与 SLO,稳定性的第一步
    • 一、SLI 和 SLO 是什么?
    • 二、如何选择合适的 SLI?
    • 三、如何设定合理的 SLO?
    • 四、SLO vs SLA
    • 五、回顾

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 面向外部

http://www.dtcms.com/a/346265.html

相关文章:

  • nginx-限速-限制并发连接数-限制请求数
  • 洛谷 P3811 【模板】模意义下的乘法逆元-普及/提高-
  • html基本元素
  • 嵌入式第三十五天(网络编程(UDP))
  • 特大桥施工绳断 7 人亡:索力实时监测预警机制亟待完善
  • STM32F1 EXTI介绍及应用
  • tiktok滑块反爬分析verifyV2
  • Linux设备模型技术路线图
  • B树,B+树,B*树
  • Codeforces Round 1043 (Div. 3)
  • set_case_analysis应用举例
  • 技术里常说 没有银弹
  • 纳米软件自动化测试平台ATECLOUD产品手册之一——系统介绍
  • 声网如何让AI理解画面、情绪和你说的话
  • 【资源分享】(影视相关)
  • Claude Code 三类.md文件
  • Java 18 新特性及具体应用
  • WMS选型攻略:钱该省在哪?部署怎么定?
  • openEuler系统安装Ascend Docker Runtime的方法
  • open webui源码分析7—过滤器
  • 劳务工队:建筑工程的基石力量,行业生态的多元拼图
  • RKLLM 模型转换从0开始
  • 测试工程师面试题 + 简短答案
  • Scala面试题及详细答案100道(1-10)-- 基础语法与数据类型
  • 如何理解AP服务发现协议中“如果某项服务需要被配置为可通过多个不同的网络接口进行访问,则应为每个网络接口使用一个独立的客户端服务实例”?
  • 异步开发相关概念
  • BurpSuite 1.4.07.jar 怎么使用?详细安装和抓包教程(附安装包下载)
  • 12.从零开始写LINUX内核--控制台初始化
  • 商密保卫战:保密性认定的司法迷局与破局之道
  • 记录一下面试题:找字符串中第一次出现1次的字符