LabHub
学习 学习路径 课程

CNPE — 云原生平台工程师

错误预算只有0.1次请求,还能部署吗?

在 LabHub 中继续学习

一句话总结

错误预算不是面板装饰,而是用经过验证的观测和商定策略决定是否变更的输入。数据缺失时,仅因错误数为 0 就批准部署,不是安全判断,而是没有证据的判断。

流程图: 一句话总结 · 为什么需要它 · 工作原理 · 请求型预算的四个数字

为什么需要它

假设平台目标为 30 天发放可用性 99.9%、快速成功率 99%。当前窗口有 10000 次有效尝试、9995 次可用成功、9850 次快速成功。可用性 99.95% 达标,快速成功 98.5% 却不足。只看可用性就上线新功能,可能让已有延迟体验更糟。

这些数字用于学习策略判断,并非所有平台的正确目标。过松或用户无法感知的极端目标都会扭曲成本与优先级,必须先说明要保护哪种用户体验。

工作原理

请求型预算的四个数字

同一窗口中 N 为有效尝试,G 为好事件,T 为目标。允许失败量是 N × (1 − T),实际失败为 N − G,剩余预算是允许量减实际量,消耗比是实际量除以允许量。练习把 sli、consumed 显示到六位小数,但边界比较时不把允许失败量先舍入为整数。

N=10000、T=0.999 时允许失败 10 次。失败 5 次,剩余 5、消耗一半;失败 10 次,剩余正好 0;失败 20 次,剩余 -10、消耗比 2。把负数截成 0 会丢失超额量。

N=100 时允许量为 0.1。这不是存在 0.1 次事件,而是比例目标的算术量;一次失败就消耗十倍。若先把 0.1 舍入成 0,分母和策略解释都会错误。必须同时说明小样本敏感性和代表性窗口。

预算耗尽与变更策略需协商

Google SRE 错误预算策略示例展示如何把预算状态与变更优先级、责任和例外连接。本练习策略:剩余预算不高于 0 时 freeze 普通功能变更,有剩余则 ship。freeze 不等于禁止所有工作,事故恢复和紧急安全修复需另行判断、评审。函数只返回练习结论,不调用真实部署系统。

观测有缺口或有效尝试为 0 时返回 investigate,并把成功率、预算留为 null,明确没有计算依据。还需调查窗口是否真无请求、采集器是否停止、路由是否改变。covered 只是观测范围证据的摘要标志,代码写 true 并不能证明真实完整性。

不混用不同窗口

steady、slow、gap 是独立的 30 天虚拟窗口,不是连续三天。每个窗口内要匹配分子分母,不能用昨天分母除今天失败,也不能把 30 天预算和 5 分钟失败直接称为同一消耗率。短窗口 burn rate 告警需要单独定义时间段和比例。

合并可用性与延迟结论时,优先级依次为 investigate、freeze、ship,避免一项缺证据却因另一项良好而获批。这是练习契约,真实策略还可考虑服务重要度、依赖和变更风险。

现场表现

steady 的 available=9995/10000、fast=9950/10000 且覆盖完整,两项预算都有剩余。slow 可用性相同,但 fast=9850,因此 freeze。gap 即使收集数字显示 100%,covered=False,也应 investigate。除状态字符串外,还要保存各 SLI、允许量、剩余量、消耗比,供他人复算。

这也是岗位能力的一部分。2026-09-11 查看过的 Supabase SRE 职位把用户体验 SLI/SLO、错误预算策略与运营准备评审连接起来。本练习只覆盖其中小型计算与验证循环,不代表满足全部岗位要求。

下一步

后续练习先确保 HTTP 失败不会从分母遗漏,再用真实请求验证,随后实现汇总、预算、报告和反例。最后用五种错误实现检查案例:正确实现必须通过,只拒绝错误实现。