运维与 SRE — 用错误预算换发布速度

一句话:SRE 不是「把系统守到不出事」,而是把稳定性换算成一个可花费的预算——预算够,就大胆发;预算花光,就停下来还债。

🎯 这 20% 能解决哪些问题

你遇到的困惑本质原因马上能改的动作
开发和运维互相甩锅没有共同的稳定性目标给每个核心服务定一个 SLO,双方共同认账
「系统稳不稳」全靠感觉没有 SLI 数据,只有主观判断先选 1 个可用性 + 1 个延迟指标,连续测两周
出故障时没人敢决策没有值班授权与升级链明确「谁在什么条件下可以直接回滚/降级」
备份做了,从没恢复过备份不等于可恢复每季度做一次真实恢复演练并记录耗时
复盘写完就忘行动项没有负责人和截止时间每个行动项必须写成「谁 + 何时 + 验收标准」
服务器越加越多,账单失控没有容量水位与成本归属按服务打标签,每月看单位请求成本

一、三个词先分清

概念定义例子谁关心
SLI(指标)实际测量到的服务质量近 30 天成功请求占比 99.95%工程
SLO(目标)对 SLI 的内部目标可用性 ≥ 99.9% / 月工程 + 业务
SLA(协议)对外承诺,违约赔偿可用性 < 99.5% 赔付商务 + 法务

核心规律:SLO 必须比 SLA 更严格,留出缓冲;对外只承诺能赔得起、能量出来的数。

1.1 错误预算怎么算

月度错误预算 = (1 - SLO) × 总请求数
99.9% 的 30 天 → 允许 43 分 12 秒完全不可用(或等比例的失败请求)
预算消耗该做什么
< 50%正常发布,可适度冒险
50%–100%谨慎发布,只上必要变更
已耗尽冻结功能发布,只做稳定性改进
连续两月耗尽降低发布频率,重排优先级

二、SLI 怎么选:四个够用

类型指标定义采集方式常见错误
可用性成功响应数 ÷ 总请求数网关/服务端指标用 5xx 统计却漏掉超时
延迟P95/P99 在阈值内的请求占比直方图指标用平均值,掩盖长尾
正确性业务成功(如下单成功)÷ 尝试业务埋点只看 HTTP 200,不看业务失败
新鲜度数据延迟(同步/报表)队列积压、同步时间只监控进程存活

选指标的一句话:选用户能感知的、能自动采集的、团队能影响的,最多 3–4 个。


三、容量与弹性:看水位,不看感觉

水位含义动作
< 50%富余可缩容或接更多流量
50%–70%健康保持
70%–80%预警提前扩容,排查增长来源
> 80%危险立即扩容 + 限流保护
> 90%崩溃边缘降级非核心功能

扩容三种手段:

  1. 垂直:加 CPU/内存——最快,但有上限,重启有风险。
  2. 水平:加实例——无状态服务首选,需先确认无本地状态。
  3. 削峰:队列缓冲 + 限流——最省钱,但用户会等。

核心规律:弹性伸缩只对无状态服务有效;有状态服务(数据库)靠读写分离、分片和预留容量。


四、应急响应:四段法,时间盒管理

flowchart LR
    A["止血<br/>5 分钟内"] --> B["定位<br/>30 分钟内"]
    B --> C["修复<br/>按影响定"]
    C --> D["复盘<br/>48 小时内"]
    D -->|"改进项"| A
阶段目标具体动作禁止
止血先让用户可用回滚、切流量、降级、限流、关开关一边止血一边查根因
定位找到变化点看最近变更、看四个黄金信号、看依赖无目的重启
修复消除根因小步修复,修完立刻验证指标顺手重构
复盘防再犯时间线 + 5Why + 行动项追责个人

止血优先级口诀:回滚 > 降级 > 限流 > 扩容 > 修代码。能在 5 分钟内回滚的,绝不在线上调试。


五、值班与升级:让决策不需要开会

级别响应时限谁权限
L1 值班5 分钟响应当班工程师回滚、重启、扩缩容、关开关
L2 负责人15 分钟介入服务 owner降级范围、数据修复
L3 决策30 分钟介入技术负责人对外公告、停服、赔付

值班规则:

  • 一人一周,交接必须写清:未闭环告警、临时变更、风险点。
  • 告警必须能叫醒人,否则不叫告警,叫噪音。
  • 同一类问题连续两周半夜叫人 → 必须排期自动化或修根因(否则人会离职)。

六、备份与恢复:备份不算数,恢复才算

指标含义设定方法
RPO能容忍丢多少数据按业务定:订单 0,日志可 1 小时
RTO能容忍停多久核心 30 分钟,内部系统 4 小时
保留策略留多久、几份、放哪里3-2-1:3 份、2 种介质、1 份异地

恢复演练清单:

  1. 从备份还原到独立环境(不覆盖生产)。
  2. 记录实际耗时,与 RTO 对比。
  3. 校验数据完整性(行数、关键业务对账)。
  4. 把演练脚本化,避免依赖某个人的记忆。

七、变更管理:事故的第一大来源

变更类型管控要求
常规发布走 CI/CD,有回滚方案
数据库变更单独窗口、提前备份、双人复核
配置修改走配置中心留痕,禁止直接改服务器
紧急变更允许先做后补,但 24 小时内补记录
冻结期大促/节假日只允许修复类变更

核心规律:80% 的线上故障来自变更。把变更变得可追溯、可回滚,比事后加强监控更有效。


八、例行巡检:每周 20 分钟

检查项判据不达标动作
错误预算余额消耗曲线是否异常加速冻结发布,排查
容量水位是否有节点 >70%扩容或清理
慢查询 Top10是否有新进入者加索引或改 SQL
队列积压积压是否持续增长扩消费者或限流生产
备份成功率是否 100%当天修复
证书/域名/额度30 天内到期立即续期
告警噪声无效告警占比重写或删除告警规则

🎓 实战场景(TIL)

  • 场景:SLO 定 99.99%,一个月就把全年错误预算烧完。本质:指标定的是理想值,不是用户可接受值。要点:先按历史表现定可达目标(如 99.9%),用错误预算控制发布节奏,而不是追零故障。
  • 场景:告警一屏都是红,没人看。本质:只报异常不分级,多数无法行动。要点:每条告警附「处置动作」;分为叫醒人(烧预算)与工单(待观察)两档,消不掉的告警就降级为看板。
  • 场景:备份任务天天成功,恢复时才发现备份集不可用。本质:只监控备份作业状态,从不验证可恢复性。要点:定期做恢复演练(抽一个备份拉到临时环境跑一致性检查),把恢复时长与数据丢失量写进展报。
  • 场景:故障时只有原作者能重启服务。本质:处置知识在人脑里,没成手册。要点:每次故障收尾产出一页 runbook(现象→判定→处置→回滚),下一次只按手册执行也能完成。

📋 一页速查

我要做照着做
定稳定性目标1 个可用性 + 1 个延迟 SLI;SLO 比 SLA 严一档
看还能不能发错误预算 >50% 正常发;耗尽则只做稳定性
判断扩容CPU/内存 >70% 预警,>80% 立即扩,>90% 降级
故障先做什么5 分钟内止血:回滚 > 降级 > 限流 > 扩容
定 RPO/RTO订单类 RPO=0;核心 RTO ≤30 分钟;每季度演练
管变更全部走流水线留痕;数据库变更双人复核 + 备份
做复盘48 小时内出时间线 + 5Why + 行动项(人/时间/验收)
巡检频率每周一次,7 项固定检查,20 分钟完成

🔗 相关链接