知识点深化 · SRE
SRE 与可靠性工程:SLA/SLO/SLI、错误预算、故障演练、告警策略
"系统到底有多可靠?"这话不能靠感觉说。SRE 把它变成数字:SLI 是你测到的指标,SLO 是你定的目标,SLA 是对用户的承诺。再用错误预算平衡"加功能"和"保稳定"。这一页把这套量化方法和故障演练、告警策略讲透。
① 小白第一课怎么学(4 步走,约 80 分钟)
先把 SLI/SLO/SLA 三个概念的层级关系搞清楚,这是 SRE 的地基。
1分清三个 S(15 分钟)
读②③:SLI=测出来、SLO=内部目标、SLA=对外承诺。
2理解错误预算(20 分钟)
读④:99.9% 可用 = 每月只允许宕 43 分钟。
3走一遍故障处理(30 分钟)
跟着⑤看告警→响应→回滚→复盘。
4排错+刷题(15 分钟)
读⑥告警/复盘坑,做⑦⑩。
本课小目标学完你要能:① 区分 SLI/SLO/SLA;② 算一个错误预算;③ 说清故障复盘 blameless 原则;④ 设计合理告警。
② 一图看懂:SRE 体系
读法:先测 SLI,再定 SLO;SLO 和 100% 的差就是错误预算;把 SLO 写紧就是 SLA;围绕它做告警和故障演练。
③ 本质直觉:用数字管可靠性
以前问"系统稳不稳",回答是"还行吧、挺稳的"。SRE 拒绝这种感觉,要求量化。
SLI(指标):你实际测到的数字。比如"过去 30 天,请求成功率 99.95%"、"P99 延迟 300ms"。这是事实。
SLO(目标):你定的内部目标,比如"请求成功率 ≥ 99.9%"。SLO 永远比 SLA 紧,留出缓冲。
SLA(承诺):写进合同对用户的承诺,比如"99.5% 可用,否则赔付"。比 SLO 松,是底线。
错误预算:SLO=99.9%,意味着每月允许宕机约 43 分钟。这就是"预算"。预算没花完=可以放心发新功能;预算快超了=冻结发布、专心稳。
为什么不能追 100% 可用做到 99.99% 的成本是 99.9% 的十倍以上,边际收益极低。错误预算就是承认"一定会出点小问题",在稳定和迭代之间找平衡。
④ 完整体系:错误预算、故障流程、告警策略
三个 S 的层级
| 概念 | 是什么 | 例子 | 对象 |
| SLI | 实测指标 | 成功率 99.95% | 事实数据 |
| SLO | 内部目标 | ≥99.9% | 团队自律 |
| SLA | 对外承诺 | ≥99.5%,否则赔付 | 合同用户 |
错误预算速算
| SLO | 每月允许宕机时间 |
| 99.9% | 约 43 分钟 |
| 99.95% | 约 22 分钟 |
| 99.99% | 约 4.3 分钟 |
| 99% | 约 7.2 小时 |
错误预算
错误预算 = 100% − SLO | 预算用完 → 冻结发布,先稳后快
故障处理流程
| 阶段 | 动作 |
| 1. 检测 | 告警触发,oncall 响应 |
| 2. 止血 | 优先恢复服务:回滚、降级、切流,先别查根因 |
| 3. 根因 | 服务恢复后再慢慢定位 |
| 4. 复盘 | 写事后总结(Postmortem),blameless 对事不对人 |
故障演练(Game Day/混沌工程)
主动制造故障(杀一个 Pod、断一条网络、打满流量),验证系统能否自愈、告警是否到位。别等真实事故才发现"预案没写、告警没配"。
告警策略
| 原则 | 说明 |
| 基于 SLI/SLO | 只对影响用户的指标告警,不拍脑袋 |
| 持续时间 | 加 for 窗口,防抖动 |
| 可操作 | 每条告警都要有明确处置动作,否则是噪音 |
| 分级 | 严重才打电话,普通发群 |
⑤ 用法场景与典型例题
例1(错误预算)SLO=99.9%,一个月(30 天)允许宕机多久?
1 分钟都不能浪费。
① 30 天 = 30×24×60 = 43200 分钟。
② 1−99.9% = 0.1% 不可用。
③ 43200 × 0.1% = 43.2 分钟。
答案:一个月只能宕约 43 分钟,两次大故障就超预算了。
例2(优先级)线上故障,是先查根因还是先回滚?
用户在用,先止血。
① 故障期间每分钟都在影响用户。
② 第一反应是回滚到上个稳定版本、降级非核心功能、切走流量。
③ 服务恢复后,再从容查根因、写复盘。
答案:先恢复服务,再查根因。别在事故现场调试代码。
例3(复盘)复盘会该追究是谁删错了库吗?
blameless 原则。
① 事故根因通常是"流程/系统没拦住",不是某个人的错。
② blameless(无罪复盘):聚焦"系统为什么允许一个人删库"(没二次确认、没备份、没权限控制)。
③ 产出改进项:加删除确认、自动备份、最小权限。
答案:对事不对人,否则下次没人敢上报问题。
SLA/SLO/SLI 大小关系记住:SLI(实际)最好 > SLO(内部目标)> SLA(对外承诺)。对外永远比对内松,留缓冲。
⑥ 高频错误诊断(4 条)
错误 1:告警轰炸,oncall 麻木把 CPU 高、磁盘满都设成 critical 电话,半夜被吵醒无数次真事故反而漏掉。只对影响 SLO 的告警升级,其余进群/工单。
错误 2:随便写个 99.99% SLA没算过每月只能宕 4 分钟就敢承诺,做不到要赔钱。SLA 要基于历史 SLI 数据反推。
错误 3:故障时现场查根因事故正在影响用户,却花半小时 debug。记住先止血(回滚/降级),根因事后复盘再查。
错误 4:复盘会变成追责大会一追责,下次大家就会隐瞒问题。blameless 复盘聚焦系统改进项,明确 owner 和 deadline。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 三个 S | 区分 SLI/SLO/SLA | 实测/目标/承诺 |
| 错误预算 | 算允许宕机时间 | 100%-SLO 乘总时间 |
| 故障流程 | 先回滚还是先查因 | 先止血 |
| 复盘 | blameless 原则 | 对事不对人 |
真题基础1. 我们实际测到"过去 30 天请求成功率 99.95%",这是?
真题中档2. SLO 设定为 99.9%,每月(30 天)允许的宕机时间约是?
真题中档3. 线上服务突然大面积报错,正确的第一反应是?
真题拔高4. 关于故障复盘,正确的做法是?
⑧ 必背命令/知识点卡
SLI:实测的可靠性数字 成功率/延迟
SLO:内部目标,比 SLA 紧 99.9%
SLA:对用户/合同承诺 最松
错误预算:100%−SLO,99.9%≈月宕43分 花完冻结发布
故障:先止血回滚,再查根因 别现场 debug
复盘:blameless 对事不对人 出改进项
告警:基于 SLO、加 for、可操作、分级 别轰炸
⑨ 应用输出:给一个 API 定 SLO 并搭故障应对
场景:一个内部订单 API,要定义可靠性目标并准备故障应对
① 定 SLI:测"请求成功率"和"P99 延迟"。
② 定 SLO:成功率 ≥ 99.9%、P99 ≤ 500ms。
③ 算预算:每月允许约 43 分钟不可用。
④ 配告警:5xx 错误率 > 1% 持续 5 分钟、P99 > 1s 持续 5 分钟 → 电话 oncall。
⑤ 准备止血:上线一键回滚命令、非核心接口降级开关。
⑥ 演练+复盘:每季度 Game Day 杀一个 Pod 看是否自愈;事故后写 blameless 复盘,列改进项。
口述可靠性思路"用 SLI 测、SLO 定目标,错误预算控制发布节奏;出事先回滚止血,再 blameless 复盘,告警只盯影响用户的指标。"
⑩ 分层练习 15 题(基础 5 + 中档 5 + 拔高 5)
▍基础 5 题
基础1SLI 是什么?
实际测到的可靠性指标(成功率、延迟)。
基础2SLO 和 SLA 哪个更严格?
SLO 更严格(内部目标),SLA 是对外承诺更松。
基础3错误预算快用完时该怎么办?
冻结新发布,优先稳稳定性。
基础4故障复盘的核心原则?
blameless 对事不对人。
基础5故障时第一优先级?
恢复服务(止血),再查根因。
▍中档 5 题
中档699.99% SLO 每月允许宕多久?
约 4.3 分钟。
中档7为什么不追求 100% 可用?
边际成本极高,99.99% 成本是 99.9% 的很多倍,不划算。
中档8告警为什么要加持续时间(for)?
防瞬时抖动误报,只有真异常持续才通知。
中档9故障演练(Game Day)的目的?
主动制造故障,验证自愈、告警和预案,别等真实事故才发现没准备。
中档10SLA 99.5% 和 SLO 99.9% 哪个对用户?
99.5% 是对用户承诺(SLA),99.9% 是内部目标(SLO),留缓冲。
▍拔高 5 题
拔高11错误预算"花完了"还想上线大功能怎么办?
说明稳定性已破 SLO,应先修复、降风险,或灰度小流量、强监控下谨慎上。
拔高12一次事故根因是"一个人误删库",blameless 复盘应改进什么?
改进系统:删除二次确认、软删除、自动备份、最小权限、审批流,而不是处罚人。
拔高13什么告警是"好告警"?
基于 SLO、持续异常、收到后有人知道该做什么动作、分级合理。否则是噪音。
拔高14SLA 写太高会怎样?
做不到要赔付/违约;应基于历史 SLI 数据和成本现实地定。
拔高15降级和熔断在故障中的作用?
非核心功能降级、对故障依赖熔断,保住核心路径,是快速止血手段。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① SLI 测、SLO 定、SLA 对外,对内永远比对外紧。
② 错误预算 100% 减 SLO,花完冻结发布。
③ 故障先止血回滚,复盘对事不对人,告警只盯用户。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③,分清三个 S | 能举例区分 |
| 第 2 天 | 背知识点卡 + 做基础 1-5 | 基础全对 |
| 第 3 天 | 算三个 SLO 对应的月宕机时间 | 算对 |
| 第 4 天 | 做中档 6-10,配一条 SLO 告警 | 会加 for |
| 第 5 天 | 做拔高 11-15 + 真题 4 题 | 懂 blameless |
| 第 6-7 天 | 口述故障四步流程,默写错误预算公式 | 不看资料全默对 |
← 返回 FDE 培养总览