1. 如何为在线数据库定义 SLI/SLO(可用性、延迟、数据持久性),并与业务错误预算挂钩?
如何为在线数据库定义 SLI/SLO(可用性、延迟、数据持久性),并与业务错误预算挂钩?
- SLI/SLO 的定义方法(可用性、延迟、持久性)
- 错误预算(error budget)机制
- SLO 与业务目标的联动
SLI 是量化指标,SLO 是目标值。数据库常见 SLI:可用性(探活成功/总探测)、延迟(p50/p99 查询延迟)、数据持久性(无数据丢失时间/总时间)、正确性(对账一致率)。SLO 据此设定目标,如可用性 99.95%、p99 延迟 < 100ms、持久性 99.999%。错误预算 = 1 - SLO,即允许的失败额度(如 99.95% 可用性对应每年约 4.4 小时不可用额度)。运维要点:一是明确定义 SLI 与口径(探活、读延迟、写延迟);二是设定 SLO 并计算错误预算;三是错误预算耗尽时触发"冻结新功能/只做稳定化"的守则;四是把错误预算与业务 KPI 挂钩(如高可用性支撑业务 SLA),向业务解释 SLO 含义;五是定期复盘错误预算消耗。SLO 要基于业务目标设定,避免拍脑袋。
核心是"用 SLI 量化、SLO 定目标、错误预算管理风险"。错误预算把"允许失败"变成可度量的资源,消耗完就冻结变更,使 SLO 与业务目标联动而非口号。
# SLI 探活+延迟 采集脚本(示例)
# 探测可用性
if mysqladmin ping >/dev/null 2>&1; then echo "availability 1"; else echo "availability 0"; fi
# 延迟采样
mysql -e "SELECT 1" -N 2>/dev/null | awk '{print "latency_ms", $1}'