2. SLO 与预算基础:SLO 定义、SLI 与 SLA 的关系、错误预算概念、预算消耗机制

2.1 核心概念速览

在开始复核 RBAC 系统的 SLO 预算之前,必须统一对以下四个基础术语的理解。它们构成了整个可靠性工程的度量基石。

术语 英文全称 一句话定义 面向对象
SLI Service Level Indicator 服务质量的原始度量指标(如:请求延迟 P99、错误率) 技术团队
SLO Service Level Objective SLI 的目标阈值(如:P99 延迟 ≤ 200ms,99.9% 的请求) 技术团队 + 产品
SLA Service Level Agreement 对客户的法律承诺(如:月度可用性 ≥ 99.9%,否则赔偿) 法务 + 客户
错误预算 Error Budget SLO 允许的最大不可用额度(1 - SLO) SRE 团队
关键原则:SLA 必须比 SLO 更宽松(SLA ≤ SLO)。内部 SLO 是防守线,外部 SLA 是底线。错误预算则是 SRE 团队进行风险决策的“货币”。

2.2 SLI 与 SLA 的关系:从度量到承诺

SLI 是原始数据,SLO 是内部目标,SLA 是外部契约。三者构成一个从技术到商业的传递链。

SLI → SLO → SLA 传递链 SLI 原始指标 延迟 / 错误率 / 吞吐 定义阈值 SLO 内部目标 P99 ≤ 200ms / 99.9% 对外承诺 SLA 法律契约 月度 99.9% / 赔偿条款 ⚠️ 常见误区 • SLA 必须比 SLO 宽松:内部 SLO = 99.95%,外部 SLA = 99.9% • 不要将 SLI 直接作为 SLA 指标,SLI 可能包含内部调试数据

2.3 错误预算概念

错误预算 = 1 - SLO。它量化了服务在 SLO 范围内允许“犯错”的总时间或总请求量。

计算示例:若 SLO 为 99.9%(月度),则月度错误预算 = 30 天 × 24 小时 × 60 分钟 × (1 - 0.999) ≈ 43.2 分钟。这 43.2 分钟是团队可以用于发布、升级、实验的“风险额度”。

错误预算的三大核心作用:

  • 风险量化:将不可靠性转化为可管理的数字,避免主观判断。
  • 发布决策:预算充足 → 可以加速发布;预算耗尽 → 冻结变更,专注稳定性。
  • 团队对齐:让开发、运维、产品在同一个数字框架下讨论风险。

2.4 预算消耗机制

错误预算的消耗不是线性的,而是基于 SLI 的实际表现。以下是一个典型的消耗与恢复模型。

错误预算消耗与恢复周期 T0 T1(故障) T2(恢复) T3(重置) 预算 100% 故障开始 预算快速消耗 预算恢复 周期重置 消耗速率 = 实际错误率 - SLO 允许错误率。故障期间消耗速率远高于正常期。

2.5 预算消耗的数学表达

对于 RBAC 系统,我们通常使用滑动窗口计算错误预算消耗。以下是一个基于请求量的简化模型:

# 错误预算消耗计算(伪代码)
slo_target = 0.999  # 99.9%
window_seconds = 30 * 24 * 3600  # 30天滑动窗口
total_requests = get_total_requests(window_seconds)
bad_requests = get_bad_requests(window_seconds)  # 违反 SLI 的请求

# 当前可用性
current_availability = 1 - (bad_requests / total_requests)

# 错误预算剩余
error_budget_remaining = 1 - (bad_requests / (total_requests * (1 - slo_target)))

# 消耗百分比
consumption_percent = (1 - error_budget_remaining) * 100

print(f"当前可用性: {current_availability:.4%}")
print(f"错误预算剩余: {error_budget_remaining:.2%}")
print(f"已消耗预算: {consumption_percent:.1f}%")

2.6 预算消耗的典型场景

场景 消耗速率 典型原因 SRE 响应
正常运营 缓慢线性消耗 偶发延迟抖动、少量超时 无需干预
部分故障 快速消耗 数据库慢查询、网络分区 启动应急响应
完全故障 瞬间耗尽 服务宕机、权限系统崩溃 立即回滚 / 切换
预算恢复 负消耗(恢复) 故障修复后,窗口滑动移出坏记录 复盘 + 改进
RBAC 系统特别提醒:权限变更、策略同步、令牌验证等关键路径的 SLI 必须单独监控。一次错误的权限下发可能导致大量 403/401 错误,瞬间消耗错误预算,且难以通过常规健康检查发现。

2.7 预算消耗的决策阈值

在实际 SRE 运营中,我们通常设置三个预算水位线来触发不同级别的响应:

  • 绿色区(预算 > 50%):正常运营,允许常规发布和变更。
  • 黄色区(20% ≤ 预算 ≤ 50%):谨慎模式,变更需要审批,禁止高风险操作。
  • 红色区(预算 < 20%):冻结模式,仅允许紧急修复,全员聚焦稳定性。