2. 核心概念:定义数据库SLO与SLI

在数据库可靠性工程中,SLO(Service Level Objective,服务等级目标)与SLI(Service Level Indicator,服务等级指标)是量化可靠性的基石。没有明确的SLO,变更窗口和Error Budget就失去了衡量基准。本节以可用性、延迟、吞吐量三个核心维度为例,讲解如何为数据库定义可观测、可度量的SLO/SLI。

2.1 SLI:可量化的服务等级指标

SLI是数据库实际运行状态的直接测量值。它回答“数据库现在表现如何”。选择正确的SLI是定义SLO的前提。

维度 SLI定义 典型测量方式
可用性 数据库成功响应合法请求的时间比例 (总时间 - 不可用时间)/ 总时间;或成功请求数 / 总请求数
延迟 数据库处理请求所花费的时间 通常以百分位(p50、p99、p999)衡量,而非平均值
吞吐量 数据库在单位时间内成功处理的请求数 每秒查询数(QPS)、每秒事务数(TPS)
SLI选择原则:优先选择用户视角的指标。例如,对于数据库,p99延迟比平均延迟更能反映真实用户体验;对于可用性,应排除计划内维护窗口,只计算用户实际感知的不可用时间。

2.2 SLO:服务等级目标

SLO是SLI的目标阈值。它回答“数据库应该表现多好”。SLO必须是一个明确的、可达成的时间窗口内的目标值。

  • 可用性SLO示例:“在30天滚动窗口内,数据库可用性不低于99.99%”。
  • 延迟SLO示例:“在1小时窗口内,p99延迟不超过100ms”。
  • 吞吐量SLO示例:“在5分钟窗口内,数据库QPS不低于10,000”。
常见陷阱:不要定义“永远100%可用”或“零延迟”的SLO。这既不现实,也无法为变更窗口提供任何Error Budget。SLO应留有合理的误差空间,通常为99.9%至99.999%之间。

2.3 从SLI到SLO:Error Budget的诞生

Error Budget = 1 - SLO。它定义了在给定时间窗口内,系统允许失效的总时间或总次数。Error Budget是连接SLO与变更窗口的桥梁。

SLI → SLO → Error Budget 关系图 SLI(实际测量) p99延迟 = 85ms SLO(目标阈值) p99延迟 ≤ 100ms Error Budget 允许失效 = 1 - SLO Error Budget 计算示例(30天窗口) • SLO = 99.99% → Error Budget = 0.01% • 30天总秒数 = 2,592,000秒 • 允许不可用时间 = 2,592,000 × 0.01% ≈ 259秒(约4.3分钟)

2.4 多维度SLO组合策略

生产环境中的数据库通常需要同时满足多个SLO。单一维度的SLO无法全面反映系统健康度。

  • 复合SLO:“可用性≥99.99% 且 p99延迟≤100ms”。只有两个条件同时满足,才算符合SLO。
  • 分层SLO:为不同重要性的请求定义不同SLO。例如,核心交易请求SLO为99.999%,而报表查询SLO为99.9%。
  • 窗口对齐:所有SLO应使用相同的评估窗口(如30天滚动窗口),以便统一计算Error Budget。
最佳实践:在定义数据库SLO时,建议从可用性和延迟两个维度开始。可用性SLO控制变更窗口的“能否变更”,延迟SLO控制变更的“影响程度”。吞吐量SLO通常作为容量规划的参考,而非变更窗口的直接约束。

2.5 数据库SLO/SLI定义清单

以下清单可作为团队定义数据库SLO时的检查项:

  1. 确定关键用户旅程:识别数据库支撑的核心业务请求类型。
  2. 选择SLI指标:为每个关键旅程选择可用性、延迟或吞吐量指标。
  3. 设定SLO阈值:基于历史数据和业务容忍度,设定合理的SLO目标。
  4. 定义评估窗口:明确SLO的统计窗口(如30天、7天、1小时)。
  5. 计算Error Budget:根据SLO计算允许的失效时间或次数。
  6. 建立监控告警:确保SLI可被持续采集,并在接近SLO边界时触发告警。
数据库SLO/SLI定义流程 1. 识别关键请求 2. 选择SLI指标 3. 设定SLO阈值 4. 计算Error Budget 持续迭代:根据实际运行数据调整SLO
快速上手建议:如果团队首次定义数据库SLO,建议从“可用性≥99.95%”和“p99延迟≤200ms”两个SLO开始。这两个指标覆盖了数据库最核心的可靠性维度,且Error Budget计算简单,便于后续与变更窗口策略联动。