4. 误差预算定义:SLO与SLI的关系、误差预算的计算公式与消耗机制
在制品供应链的可靠性工程中,误差预算(Error Budget)是连接SLO(服务等级目标)与SLI(服务等级指标)的量化桥梁。它定义了系统在给定时间窗口内允许发生故障或性能降级的总“额度”。理解误差预算的生成与消耗机制,是自动化编排可靠性台账的前提。
4.1 SLO与SLI的关系:从测量到承诺
SLI是系统实际表现的原始测量值,而SLO是团队对SLI设定的目标阈值。两者之间的关系可以概括为:
- SLI(服务等级指标):可量化的系统行为指标,如请求延迟P99、错误率、可用性百分比。
- SLO(服务等级目标):对SLI的承诺边界,例如“99.9%的请求延迟小于200ms”。
- 误差预算:SLO允许的“不达标”空间,即 1 - SLO。
核心关系:SLI是输入,SLO是契约,误差预算是可消耗的“可靠性货币”。
| 概念 | 定义 | 示例 |
|---|---|---|
| SLI | 实际观测到的指标值 | 过去30天可用性 = 99.95% |
| SLO | 目标承诺值 | 可用性 ≥ 99.99% |
| 误差预算 | 允许的故障时间/次数 | 每月允许宕机 ≤ 4.32分钟 |
4.2 误差预算的计算公式
误差预算的数学定义非常简洁,但实际计算时需要明确时间窗口和指标类型。通用公式如下:
# 通用误差预算公式
Error Budget = 1 - SLO_target
# 基于可用性SLO的月度预算(单位:秒)
Monthly Budget (seconds) = Total Seconds in Month × (1 - SLO)
# 示例:SLO = 99.9%,30天月份
Total Seconds = 30 × 24 × 3600 = 2,592,000
Error Budget = 2,592,000 × (1 - 0.999) = 2,592,000 × 0.001 = 2,592 秒 ≈ 43.2 分钟
实践要点:在Terraform台账中,误差预算通常以毫秒或秒为单位存储,便于与监控系统的SLI时间序列直接对齐。对于延迟类SLO(如P99 < 200ms),预算按请求计数而非时间计算。
4.3 误差预算的消耗机制
消耗机制定义了“何时、如何”从预算池中扣除额度。在制品供应链场景中,消耗通常与部署事件和故障事件绑定。
4.3.1 基于时间窗口的消耗模型
最常用的模型是滑动窗口消耗:
- 窗口长度:通常为30天(滚动),与SLO评估周期一致。
- 消耗粒度:每分钟或每小时计算一次SLI达标情况。
- 消耗规则:若该分钟SLI未达标,则扣除该分钟对应的预算份额。
| 消耗类型 | 触发条件 | 扣除单位 | 典型场景 |
|---|---|---|---|
| 故障消耗 | SLI低于SLO阈值 | 秒/分钟 | 服务宕机、高延迟 |
| 部署消耗 | 发布导致SLI短暂降级 | 按部署次数 | 金丝雀发布期间错误率上升 |
| 维护消耗 | 计划内停机 | 秒/分钟 | 数据库迁移、集群升级 |
4.4 误差预算在Terraform台账中的映射
在制品供应链的Terraform资源编排中,误差预算被建模为可计算资源。每个制品(Artifact)或服务组件对应一个误差预算台账条目,包含以下核心属性:
# Terraform 误差预算台账资源示例(伪代码)
resource "error_budget_account" "artifact_checkout" {
service_name = "checkout-service"
slo_target = 0.9999 # 99.99%
window_seconds = 2592000 # 30天
consumed_seconds = 0 # 当前消耗
last_reset_time = "2025-01-01T00:00:00Z"
# 消耗规则
consumption_rules {
fault_consumption_rate = 1.0 # 1秒故障消耗1秒预算
deploy_consumption_rate = 0.5 # 每次部署消耗0.5秒预算
}
}
关键注意:误差预算台账必须与监控系统(如Prometheus、Datadog)的SLI数据源保持实时同步。Terraform仅负责台账的声明式定义和初始状态,实际消耗更新应由外部自动化流水线(如CI/CD触发器)写入状态后端。
4.5 误差预算的恢复与重置
误差预算并非永久消耗,它遵循滑动窗口恢复机制:
- 自动恢复:随着时间窗口滑动,旧的故障事件移出窗口,预算自动恢复对应额度。
- 手动重置:仅在重大架构变更或SLO重新协商时,通过Terraform apply手动重置台账。
- 恢复速率:等于时间流逝速率(1秒/秒),但受限于窗口内未消耗的预算上限。
工程实践:在Terraform中,使用
time_sleep资源或外部触发器实现预算恢复的模拟测试。生产环境中,预算恢复由监控系统的滚动窗口自动计算,Terraform只读取最终状态。