应将工程时间用于最重要服务的最重要功能
服务水平目标(SLO)
基本概念
SLO: Service Level Objective
定义 指服务可靠性的目标水平,指定了服务所提供功能的一种期望状态。
意义
- 由于 SLO 是做出以数据为依据的可靠性决策的关键,因此它们是SRE实践的核心。
- 服务提供者用它来指定系统的预期状态;
- 开发人员编写代码来实现;
- 客户依赖于 SLO 进行商业判断。
示例
- 每分钟慢查询数量 < 10
- 99% 访问延迟 < 100ms
- 99% 每分QPS > 10k/s
SLO 几个最佳实践
- 明确指定计算的时间窗口
- 使用一致的时间窗口(例如:5min滚动窗口、15min滚动窗口、1h滚动窗口、24h级滚动窗口)
- 需要有免责条款(例如:95%的慢查询要达到SLO、95%的访问延迟要达到SLO)
遵循原则
- 测量系统当前状态
- 设置预期(expectations),而不是保证(guarantees)
- 初期的 SLO 不适合作为服务质量的强化工具
- 改进 SLO
- 设置更低的响应时间、更改的吞吐量等
- 保持一定的安全缓冲
- 内部用的 SLO 要高于对外宣称的 SLO
- 不要超额完成
- 定期的 downtime 来使 SLO 不超额完成
设置SLO时的目标依赖于系统的不同状态(conditions),根据不同状态设置不同的SLO,
1 | 总SLO = service1.SLO1 * weight1 + service2.SLO2 * weight2 + … |
SLO 的收益是什么?
- 对于客户而言
- 是可预期的服务质量,可以简化客户端的系统设计
- 对于服务提供者而言
- 可预期的服务质量
- 更好的取舍成本/收益
- 更好的风险控制(当资源受限的时候)
- 故障时更快的反应,采取正确措施
SLO 有哪些特性
- SLO 是用 SLI 来描述的;
- 指定了服务所提供功能的一种期望状态;
- SLO 是一种工具,可帮助您确定要优先处理的工程工作;
- SLO 为服务的客户设置了目标可靠性级别。
如何保证能够达到目标呢?
需要一个管理控制系统
- 监控/测量 SLIs
- 对比检测到的 SLIs 值是否达到目标
- 如果需要,修证目标或者修正系统以满足目标需要
- 实施目标的修改或者系统的修改
该控制系统需要重复的执行以上动作,以形成一个标准的反馈环路,不断的衡量和改进 SLO 以及服务本身。