SLO、RTO、RPO 到底在量什么:一条故障时间轴串起可靠性指标全家

读 LLM serving 论文撞见 SLO attainment,翻云合同撞见 99.9%,过容灾评审被问 RTO/RPO——三套黑话其实是同一条故障时间轴上的三族刻度。本篇按权威出处(Google SRE 书第 4 章、SRE Workbook 第 5 章、NIST SP 800-34 Rev.1、AWS 容灾白皮书)把指标全家理成三层:承诺层(SLI→SLO→SLA→错误预算→燃烧率,几个 9 换算表亲手验算)、事故层(MTTD/MTTA/MTTR/MTBF/MTTF,含 MTTR 四义歧义警告)、灾难层(RPO 往回量数据、RTO 往前量停机、MTD=RTO+WRT,AWS 四档 DR 策略即公开价目表);再给三族的咬合关系:可用性=MTBF/(MTBF+MTTR) 把事故层折算成承诺层,错误预算是承诺层发给事故层的月度零花钱,BIA 从业务侧倒推 MTD/RTO。LLM 工程挂靠:DistServe 的 goodput 把 SLO 从事后验收变成调度器输入(TTFT/TPOT 双 SLO),训练 checkpoint 间隔就是训练作业的 RPO。元规律「指标即定价」:可靠性指标不是测量工具是谈判工具——SLO 每加一个 9 预算缩十倍,RTO/RPO 每压一个数量级架构贵一档,所有刻度都是业务给不可靠性开出的价格标签。

读 LLM serving 论文会撞见 “SLO attainment 90%“,翻云厂商合同会撞见 “99.9% 可用性承诺”,过容灾评审会被问”你们的 RTO、RPO 定了多少”。三套场景、三套黑话,很容易当成三个孤立知识点去背。把权威出处(Google SRE 书、NIST SP 800-34、AWS 容灾白皮书)对着读完之后,我的结论是:它们是钉在同一条故障时间轴上的三族刻度——SLI/SLO/SLA 量”平时允许坏多少”,MTTx 家族量”坏一次多快修好”,RPO/RTO/MTD 量”大灾之后丢多少数据、停多久业务”。而且三族有一个共同本质:它们都不是测量工具,是定价工具——把”多可靠才算够”这个花钱问题,翻译成能写进合同、能触发告警、能决定架构预算的数字。

先立骨架:一次故障的时间轴

把一次故障从头到尾摊开,几乎所有可靠性指标都能在这条轴上找到自己的位置:

flowchart LR
    S["最后一次<br>数据快照"] -->|"RPO 量这段<br>往回:丢多少数据"| F["故障发生"]
    F -->|"MTTD<br>多久被发现"| D["监控告警"]
    D -->|"MTTA<br>多久有人接手"| A["开始处置"]
    A -->|"修复中"| R["系统恢复"]
    R -->|"WRT<br>校验与补数"| W["业务完全追平"]
    F -.->|"RTO 量这段:停多久"| R
    F -.->|"MTD 上限:业务最多忍多久"| W

图上没出现的 SLI/SLO/SLA 和 MTBF 在哪?它们不量”单次故障”,量的是很多次故障在时间上的累积效果——所以挂在轴外,作为统计层罩着整条轴。

按”坏的程度”分,三族指标各管一个 regime:

管什么场景核心问题权威出处
承诺层(SLI/SLO/SLA/错误预算)日常运行的质量波动平时允许坏多少?Google SRE 书第 4 章
事故层(MTTD/MTTA/MTTR/MTBF)单次故障的响应这次坏了,多快发现、多快修好?事故管理实践(Atlassian 指标手册等)
灾难层(RPO/RTO/WRT/MTD)机房级、站点级灾难大灾之后,数据丢多少、业务停多久?NIST SP 800-34 Rev.1

下面逐族拆。

第一族:承诺层——SLI、SLO、SLA 与错误预算

这一族的源头文本是 Google SRE 书第 4 章《Service Level Objectives》,四个概念是一条递进链:先选尺子(SLI),再定刻度(SLO),然后签合同(SLA),最后把没用完的容错额度变成零花钱(错误预算)。

SLI(Service Level Indicator,服务质量指标):一个精心定义的量化测量值,回答”用什么尺子量服务质量”。典型形态是比率:好事件数 / 总事件数——比如”响应时间低于 300ms 的请求占比”。注意分位数陷阱:平均延迟会把长尾平均掉,所以生产实践普遍用 p99 这类分位数当 SLI,原因我在网关解剖篇里借 The Tail at Scale 讲过——尾部才是用户体验的决定项。

SLO(Service Level Objective,服务质量目标):给 SLI 定的目标值或目标区间,比如”30 天窗口内 99.9% 的请求成功”。这是内部工程目标,不对外承诺。

SLA(Service Level Agreement,服务质量协议):含违约后果的对外合同——达不到就赔钱、赔代金券。SRE 书特意划清界限:SLA 是商务产物,工程团队真正对齐的是 SLO,且 SLO 应该比 SLA 更严,中间留出安全垫。

错误预算(Error Budget)1 − SLO 就是你被允许的失败额度。99.9% 的 SLO 意味着 0.1% 的预算。它的精妙之处在于把”可靠性 vs 迭代速度”的争吵变成了记账:预算还有余,就放心发版、做实验;预算烧穿了,就冻结发布专心还债。

几个 9 到底是多少时间(亲手算的)

口头说”三个 9""四个 9”很飘,换算成停机时长才有体感。下表是我用一行 Python 算的(按 365.25 天/年、30 天/月):

可用性每年最多停每月(30 天)最多停
99%(两个 9)87.7 小时432 分钟(7.2 小时)
99.9%(三个 9)8.8 小时43.2 分钟
99.99%(四个 9)52.6 分钟4.3 分钟
99.999%(五个 9)5.3 分钟26 秒

看清一个残酷事实:每加一个 9,允许的停机时间缩十倍。三个 9 时一次事故还能从容处理(预算 43 分钟);四个 9 时人工响应已经来不及了(4.3 分钟里要完成发现、接手、修复),必须靠自动化止损;五个 9 基本宣告”任何依赖人的恢复流程都超预算”。

燃烧率:错误预算的实时监控

预算是月度总账,告警需要实时信号。SRE Workbook 第 5 章《Alerting on SLOs》给的工具是燃烧率(burn rate):当前消耗预算的速度是”匀速烧完刚好用尽”的几倍。

拿 99.9%/30 天举例(数字我验算过):燃烧率 14.4× 意味着 50 小时就会烧穿整月预算;持续 1 小时正好消耗月预算的 2%——这正是 Google 推荐的第一档告警线”1 小时烧掉 2%“。生产上最成熟的形态是多窗口多燃烧率告警:快窗口(1h,14.4×)抓突发,慢窗口(6h,6×)抓阴燃,再各配一个短窗口(5m/30m)保证故障结束后告警快速复位、压掉毛刺误报。

第二族:事故层——MTTx 全家

承诺层看统计,事故层看单次。这一族全是”平均时间”(Mean Time To/Between X),沿着时间轴依次是:

指标全称量哪一段反映什么
MTTDMean Time To Detect故障发生 → 被发现监控覆盖质量(通常由系统自动完成)
MTTAMean Time To Acknowledge告警触发 → 有人开始处理值班响应机制、告警疲劳程度
MTTRMean Time To Repair/Recover/…故障发生(或接手)→ 恢复修复能力、预案完备度
MTBFMean Time Between Failures上次故障 → 下次故障系统本身的可靠性(可修复系统)
MTTFMean Time To Failure投入使用 → 报废性失效不可修复部件的寿命(硬盘、硬件)

记忆口诀:MTTx 越小越好,MTBF/MTTF 越大越好。

一个必须知道的坑:MTTR 的 R 有四种解读——Repair(修复)、Recovery(恢复)、Respond(响应)、Resolve(彻底解决),四者起止点不同,数值可以差好几倍。跨团队对比 MTTR 之前先对齐定义,否则就是鸡同鸭讲。这不是我的洞察,是事故管理实践里反复强调的公开警告

MTBF 与 MTTF 的分界在”修不修得好”:服务器进程崩了重启接着跑,用 MTBF;硬盘坏了只能换新,用 MTTF。软件系统基本都用 MTBF。

第三族:灾难层——RPO、RTO、WRT、MTD

前两族假设”系统还在,只是坏了”。灾难层假设站点没了——机房断电、区域故障、数据被误删。这族的权威出处是 NIST SP 800-34 Rev.1《联邦信息系统应急规划指南》,四个指标构成一个嵌套结构:

RPO(Recovery Point Objective,恢复点目标):从故障点往回量——恢复后数据能退到哪个时间点,中间那段就是永久丢失。RPO 由备份/复制频率决定:每天备份一次,RPO 就是 24 小时;同步复制,RPO 趋近于零。它量的是数据,单位虽然是时间,本质是”丢多少活”。

RTO(Recovery Time Objective,恢复时间目标):从故障点往前量——系统资源恢复可用之前,最多允许停多久。RTO 由恢复手段决定:冷备重建要天级,热备切换是分钟级。它量的是服务

WRT(Work Recovery Time,工作恢复时间):系统起来了不等于业务能跑——还要校验数据一致性、补录故障期间积压的工作、确认下游没有脏数据。这段收尾时间就是 WRT。

MTD(Maximum Tolerable Downtime,最大可容忍中断):业务侧的硬上限——这个业务功能最多能消失多久而不造成不可接受的后果。NIST 明确它来自 BIA(业务影响分析),是业务决策不是技术决策。三者的约束关系(CISSP 体系里的经典公式):

RTO+WRTMTDRTO + WRT \le MTD

方向值得注意:MTD 从业务往技术倒推。先由业务定”最多忍 4 小时”,再倒推出 RTO 只能给 3 小时、WRT 留 1 小时,最后由 RTO 决定买哪档容灾架构——而不是反过来由技术能力定业务承诺。

RTO/RPO 的价目表:AWS 四档容灾策略

RTO/RPO 不是许愿——每压低一个数量级,架构成本上一个台阶。AWS 容灾白皮书的四档策略就是一张公开价目表:

档位做法RPO 量级RTO 量级成本
Backup & Restore定期备份到异地,灾后重建小时级≤ 24 小时最低
Pilot Light核心数据持续复制,其余资源灾时才拉起分钟级小时级
Warm Standby异地跑一套缩容版全功能环境,灾时扩容秒级分钟级
Multi-site Active/Active多站点同时服务流量趋近零趋近零最高

读法不是”选最好的”,是拿着 BIA 给的 MTD 找最便宜的够用档。非核心的内部工具用第一档就够;支付链路才值得上第四档。

三族怎么咬合:两个公式、一条预算线

三族不是并列的三张卡片,它们互相换算:

齿轮一:事故层折算成承诺层。经典可靠性工程公式(稳态可用性):

Availability=MTBFMTBF+MTTRAvailability = \frac{MTBF}{MTBF + MTTR}

几个 9 不是独立指标,是”坏得多不多”ד修得快不快”的商。验算:MTBF 1000 小时、MTTR 2 小时 → 1000/1002 = 99.80%。这个公式还揭示了提升路径的二选一:要么少坏(工程质量),要么快修(运维能力)——四个 9 之后,快修那条路必须交给自动化。

齿轮二:错误预算是承诺层发给事故层的月度零花钱。99.9%/30 天 = 43.2 分钟预算,一次事故的 MTTD + MTTA + 修复时间直接从里面扣。倒过来读:如果你的 MTTD 就要 20 分钟,三个 9 的 SLO 每月只够两次事故——监控投资和 SLO 承诺是同一笔账。

齿轮三:灾难层由业务定价、技术找零。BIA 定 MTD → 倒推 RTO/WRT → RTO 决定容灾档位 → 档位决定预算。SRE 书对 SLO 说过同样的话:选目标”不是纯技术活动”。三族指标的立法权都在业务手里,技术只有执行权。

LLM 工程视角:这套刻度正在被搬进推理系统

这套语言不是传统运维专属,它正在 LLM serving 里被原样复用、甚至升级:

SLO 从事后验收变成调度器输入。DistServe(arXiv 2401.09670)给 LLM 推理定义了双 SLO:TTFT(首 token 延迟)管 prefill、TPOT(每 token 间隔)管 decode,并把 goodput 定义为”满足 SLO 前提下每 GPU 能扛的最大请求率”——吞吐不再裸算,先过 SLO 这道门。论文报告 P/D 分离后可多服务 4.48× 请求或收紧 10.2× 的 SLO(来源数字,未亲手复现)。这比传统用法激进:传统 SRE 里 SLO 是月末对账的尺子,DistServe 里 SLO 进了调度循环,变成每个请求的实时约束。我在 Agent 云预测篇里拆过它的 P/D 分离,这次换 SLO 视角再看:P/D 分离本质上是”一个系统里有两个 SLO,就该拆成两个资源池”。

训练侧早就有 RPO/RTO,只是不叫这个名。这是我的映射(观点):checkpoint 间隔就是训练作业的 RPO——训练崩了,最近一个 checkpoint 之后的算力全部作废;从 checkpoint 加载恢复的时间就是 RTO。千卡训练里”多久存一次 checkpoint”的权衡(存太频繁拖慢训练、太稀疏崩一次丢几小时 GPU 时)和”备份频率 vs 存储成本”是同构问题。

Agent 云缺的正是这一族指标的对应物。我在 Agent 云预测篇里押过一个低置信度预测:eval 会成为 Agent 云的类型系统。用本篇的语言重述:传统云的验收语言是 SLO(比率 + 延迟就能说清”好”),Agent 的”好”是语义正确性——没法用好事件/总事件的比率 SLI 表达。评测-路由篇讲的正是这个空位上正在生长的东西。

还有哪些:全家福总表

把本篇出现的和几个常见的近亲一次列全:

指标回答的问题单位/形态谁来定
SLI用什么尺子量质量比率、分位数延迟工程承诺层
SLO尺子上目标刻在哪目标值(99.9%)工程+产品谈判承诺层
SLA违约赔什么合同条款商务承诺层
错误预算还能坏多少1 − SLO 的余额由 SLO 派生承诺层
燃烧率预算烧多快倍数(14.4×)由 SLO 派生承诺层
MTTD / MTTA / MTTR发现/接手/修好要多久平均时长工程事故层
MTBF / MTTF多久坏一次 / 能活多久平均时长测量所得事故层
RPO丢多少数据时间(往回量)业务(BIA)→备份频率灾难层
RTO服务停多久时间(往前量)业务(BIA)→恢复架构灾难层
WRT / MTD业务追平还要多久 / 业务最多忍多久时间业务(BIA)灾难层
持久性 Durability数据会不会永久丢失年度不丢概率(对象存储常宣传 11 个 9,厂商口径,未单独核实)存储设计灾难层近亲
GoodputSLO 内能扛多少请求请求率工程(LLM serving)承诺层×容量

区分三个容易混的词:可用性(availability,现在能不能用)、可靠性(reliability,多久坏一次,对应 MTBF)、持久性(durability,数据会不会没)。一个服务可以可用性五个 9 但持久性糟糕(响应快但会丢数据),也可以反过来。

元规律:可靠性指标 = 给不可靠性标价

收束成一条能带走的规律:每个可靠性指标都是业务给”不可靠”开出的价格标签,指标每收紧一个数量级,架构成本上一个台阶。

证据摆在三族里:SLO 每加一个 9,停机预算缩十倍,人工响应到四个 9 就出局,只能加钱买自动化;RTO/RPO 每压一个数量级,AWS 价目表就往下翻一档更贵的架构;MTD 干脆由 BIA 从业务损失倒推——立法权从头到尾在业务手里。所以这些指标的正确用法从来不是”测出来多少”,而是”谈出来多少,然后用最便宜的架构刚好达标”。过度达标不是美德,是把钱烧在没人要求的 9 上。

这条规律和门禁篇的”不可逆边界”接得上:RPO 量的恰好是不可逆损失的窗口——备份点之后的数据没有 undo。门禁篇说不可逆性跃迁处要设门,本篇补上另一半:不可逆窗口的宽度,是可以用钱买窄的,RPO 就是那个标价。

诚实的提醒

分清本篇数字的三档证据:

  • 亲手算过:几个 9 换算表、43.2 分钟月度预算、14.4× 燃烧率 1 小时 = 2% 预算、50 小时烧穿、MTBF 1000h/MTTR 2h → 99.80%,全部用一次性 Python 脚本验算。
  • 核实过的来源:SLI/SLO/SLA/错误预算定义(Google SRE 书第 4 章)、MWMBR 告警参数(SRE Workbook 第 5 章)、MTD/RTO/RPO 定义(NIST SP 800-34 Rev.1 原文 PDF)、AWS 四档策略的 RPO/RTO 量级(AWS 白皮书)、DistServe 的 4.48×/10.2×(arXiv 2401.09670)——有出处但未亲手复现。
  • 我的观点/映射:checkpoint 间隔 = 训练的 RPO;“eval 是 Agent 云的 SLO 空位”——是类比推演不是共识。

最低成本的亲手验证实验(5 分钟):

WINDOW = 30*24*60                 # 30 天 = 43200 个分钟窗口
SLO = 0.999
budget = WINDOW * (1 - SLO)       # 错误预算:43.2 分钟
bad = 30                          # 注入一次 30 分钟全挂故障
print(f"月度可用性 {1 - bad/WINDOW:.4%}")   # 99.9306% —— 还没破三个 9
print(f"预算余额 {budget - bad:.1f} 分钟")   # 13.2 分钟 —— 但本月只剩这些了
print(f"故障期间燃烧率 {1.0/(1-SLO):.0f}x")  # 1000x —— 任何告警档位都会秒触发

跑完你会获得三个体感:一次 30 分钟的事故并不破月度 SLO,但会吃掉 70% 预算;全挂时燃烧率是 1000×,快窗口告警几分钟内就该响;剩余 13.2 分钟意味着本月再来一次同级事故就违约。进阶版:把它扩成双窗口(1h+5m)AND 逻辑的 MWMBR 模拟器,亲眼看看短窗口如何在故障结束后把告警快速复位——那是 SRE Workbook 第 5 章的核心机制,30 行内能写完。

参考来源

工程实践

论文