跳到主要内容

Site Reliability Engineering - Week 2

· 阅读需 6 分钟

https://www.coursera.org/learn/site-reliability-engineering-slos

References​

https://sre.google/

SLI 指标设计​

不好的设计:直接使用系统监视图表(比如 CPU 使用率、内存使用率等),或者使用内部状态监视图表等。

理由是数据噪声大,而且通常和用户体验不呈直接影响的关系。

好的 SLI 指标应具有以下几个特点:

  1. Has predictable relationship with user happiness
    • 与用户幸福感具有可预测的关系
  2. Shows service is working as users expect it to
    • 能展现服务是按照用户期望的方式在运行
  3. Express as: good events / valid events
    • 可以表达为 良好请求 除以 合法请求
  4. Aggregated over a long time horizon
    • 在较长的时间窗口内聚合 SLI,以消除数据中的噪声

常用的 SLI​

两个常见场景如下:

Request / Response​

请求 & 反馈场景。比如 HTTP, RPC 等。

Availability

可用性。该 SLI 应设计为所有合法请求中成功的比例。

Latency

延迟。该 SLI 应设计为合法请求中响应速度快于阈值的比例。

Quality

服务质量。该 SLI 应设计为所有合法请求中保持服务质量的比例。

Data Processing​

数据批量处理场景。

Freshness

新鲜度。该 SLI 应设计为所有合法数据中生成时间快于阈值的比例。

通常需要时间戳来进行 SLI 指标计算。

Correctness

正确度。该 SLI 应设计为所有合法数据中正确的比例。

需要注意,不能用处理数据的逻辑来判断数据是否正确。

一种方法是可以使用 golden 输入输出对来对整体数据的正确程度进行估计。

Coverage

覆盖程度。该 SLI 应设计为所有合法数据中成功被处理的比例。

类似于上一节中的可用性 SLI。

Throughput

吞吐量。该 SLI 应设计为一段时间内处理速度快于阈值的时间占比。

复杂场景下的建议​

尽量减少 SLI 指标数,推荐 1~3 个。

太多 SLI 并不能使得每个指标都那么直观地表现系统的可靠程度。并且大量 SLI 会增加它们之间发生冲突的可能。

这并不意味着其他非 SLI 指标的监控图表也要同样被精简,它们可以帮助你来分析 SLI 低的原因。

同一种 SLI 在多种场景下的聚合​

直接将分子之和除以分母之和可能在大部分情况下适用,但也存在一些问题,比如当某一种场景流量较小时,该场景的 SLI 可能会被平滑掉。

可以使用更复杂一些的聚合策略,比如考虑流量相关的加权。

SLI 在多种场景下的阈值定义​

以请求的 latency 举例,典型的场景划分可以是:

  • 被第三方依赖的请求:因为不知道第三方的调用方式,所以我们不一定要为他们负责,所以只要确保能用即可,比如 10s
  • 后台请求:较松的时间阈值,比如 5s
    • 比如非人类用户(bot)等发出的请求
  • 写请求:较紧的时间阈值,比如 1.5s
    • 用户点提交按钮对反馈时间是比较宽容的
  • 交互请求:最紧,比如 400ms

设置合理的 SLO​

Achieveable SLOs​

用户期望与过去的表现密切相关。

如果你已有许多历史数据,则可以通过挖掘历史数据来设置 SLO。这种 SLO 被称之为可达到的 SLO。这种设置方式需要有一个假设,即假设用户对当前和过去的表现感到满意。

Aspirational SLOs​

没有历史数据怎么办?如果当前服务的表现并不好或者非常好,怎么设置 SLO?

根据业务需求指定的 SLO 被称之为理想 SLO。可以在服务上限之初,由产品团队来指定,之后可以动态调整。

持续优化​

首次设定 SLO 时,您需要观察、搜罗用户感受,并与您制定的 SLO 指标对比。

记得要定时查看 SLO 是否还合适,建议每年查看一次。