SLI指南针:保真度和粒度
原文地址:https://blog.alexewerlof.com/p/sli-compass 由 SRETALK 翻译,优秀的内容值得传播!
SLI 是可靠性工程中的一个基本概念。如果运用得当,它能从消费者的角度,依据业务目标对服务水平进行量化。
然而,不同的 SLI 具有不同的信噪比和投资回报率(ROI)。本文介绍了 SLI 指南针,这是一种二维思维模型,可帮助您:
- 快速评估现有服务等级指标(SLI)的信噪比
- 根据成本和复杂性评估服务等级指标
- 为以合理的投资回报率提高现有服务级别指标的质量设定方向
目标是帮助资深工程师、技术和工程负责人根据产品成熟度、预算、时间安排和使用模式选择合适的服务等级指标(SLI)。
SLI 分类
多年来,我在自己的公司和外部客户中,与数十个团队一起研究过数百种架构。以我的经验来看,最常见的服务等级指标(SLI)有:
- 可用性: 服务对消费者来说是否可用,能否用于他们的任务?除了像队列这样的异步服务(在这些场景下其他指标更有意义),这是目前最常见的服务等级指标(SLI)。
- 延迟: 与服务进行交互需要多长时间?这对于面向用户的服务,或者像前端、API、数据库、内容分发网络(CDN)、队列工作负载处理等有时效性要求的服务来说非常常见。
- 成功率: 消费者成功完成任务的频率如何?这在诸如REST API、用户旅程甚至队列工作负载(例如死信队列)等事务性服务中很常见。
- 效率: 服务是否通过合理的权衡进行运营,从而具有商业意义?例如:我们是否为免费用户请求使用了过多的GPU?缓存是否得到利用?排队的任务是否正在处理?等等。
还有其他一些小众指标,如正确性、时效性、相关性等。所有服务等级指标(SLI)都可以映射到二维坐标轴上:
- 保真度:服务等级指标(SLI)与消费者体验的契合程度如何?
- 粒度: 单个数据点中聚合了多少变量和参数?
我们可以将这两个维度结合起来,得到一个强大但熟悉的象限模型。
正如我们将看到的,像可用性或延迟这样的单一类别服务等级指标(SLI),可以归入这四个象限中的任何一个。
两个维度
1.保真度:服务等级指标(SLI)与消费者体验的契合程度如何?
服务级别指标(SLI)保真度是指数据或遥测数据的生成方式,以及它对消费者服务体验的准确反映程度。
- 合成指标(原文是 Synthetic metrics,或者翻译为模拟指标?探测指标?) 使用人工、虚假或模拟负载。一个常见的例子是使用工具每分钟对一个端点执行ping操作,以收集有关延迟或可用性的数据。此检查可确保端点响应正常。
- 有机指标(原文是 Organic metrics,或者翻译为真实指标?自然指标?) 从实际使用服务的消费者那里收集数据。例如,我们可以从向外公开服务的API网关收集可用性和延迟数据。这是衡量服务水平更精确的方法。
有机指标更符合实际情况。它们能直接反映生产中的实际情况。
然而,它们可能更难衡量。对于高流量服务,它们会产生大量数据。这就需要更强大且成本更高的监测基础设施。
对于流量较低的服务,可能没有足够的自然负载使服务等级指标(SLI)公式正常工作。这是因为SLI状态(也称为服务等级状态 SLS)是基于百分比的。
例如,如果一项服务每月收到50个请求,期望其成功率达到99% 是不合理的,因为在该时间段内出现一次故障就会将服务水平状态(SLS)降至98%。在这种情况下,一种解决方案是使用合成指标。
合成负载有可能使产品指标出现偏差。例如,如果产品在衡量月活跃用户数(MAU),那么必须有一种方法来区分虚假用户(合成用户)和真实用户。否则,错误的数据可能会导致错误的决策。
2. 粒度:服务等级指标(SLI)数据点聚合了多少个变量?
让我们看看服务级别指标(SLIs)的第二个维度:它们的粒度,即指为量化服务水平而测试的参数或变量的数量。
- 简单指标:仅衡量一件事。例如,一个简单指标可能会检查某个端点是否返回 200 HTTP 状态码(用于衡量可用性),或者单个 API 调用的延迟是否低于某个阈值。这能告知你某一组件的基本健康状况。它可作为整体服务健康状况的基本 代表。但它无法说明该服务对于消费者完成整个任务是否真正有用。
- 复杂指标:衡量多个因素。这能更全面地描述 消费者旅程 或复杂系统行为。一个高精度指标可以追踪关键用户购买流程中所有步骤的成功率和延迟情况。这能确保这些步骤按预期运行。
复杂的服务等级指标(SLIs)聚合了多个变量。例如,我们不是去ping主页(简单操作),而是运行一个 Playwright 脚本,该脚本会模拟用户浏览路径,以识别任何中断的步骤。
复杂的服务等级指标(SLI)维护成本可能更高。
它们可能还会在标记事件时引入延迟,因为它们必须等待获取所有变量的数据。这是因为它们需要更多的数据处理和汇总。
然而,复杂的服务等级指标(SLI)能提供更高质量的信号,因为它们能更准确地反映用户体验。
另一方面,由于聚合的原因,对复杂的服务等级指标(SLI)进行推理可能会更加困难:如果出现故障,究竟是什么出了问题呢?
为了回答这个问题,我们需要存储更多数据,这增加了复杂服务等级指标(SLI)的成本。
对于复杂的服务等级指标(SLI),有一点需要注意的是不同变量的归属问题。大多数指标都是对多个变量进行汇总。
理想情况下,你希望每个数据点仅汇总一个团队可控制范围内的变量。因为当指标显示服务质量下降或中断时,很容易推断出谁负责该服务,以及应该向谁发送警报以进行修复。
整合起来
综上所述,我们得到了这个二维指南针:
示例
可用性是最常见的服务等级指标。我们如何衡量API服务器的可用性?
- 简单且合成: 每分钟ping一次健康检查端点,并计算在一个时间段内ping成功的百分比。
- 简单且有机: 统计在一个 时间段 内,API 端点能够处理有效请求(即带有有效认证头的请求)的分钟数。
- 复杂与合成: 使用合成监测来测试关键用户流程(例如购买流程)是否正常运行,并计算成功执行百分比
- 复杂与有机: 使用RUM(真实用户监测)数据来识别任何中断的用户旅程,并计算成功的用户会话
让我们针对延迟进行这个练习,延迟是第二常见的服务等级指标(SLI):
- 简单与合成: 测量对预先指定的端点(即 www.example.com/api/health)的周期性 GET 请求的响应时间,并在一个 时间段 内计算 第99百分位数。
- 简单且有机: 计算在API网关处测得的所有来自真实用户的成功API请求的 P99百分位数 延迟。
- 复杂与合成: 定期模拟完整的用户交易流程(例如登录、搜索、添加到购物车、结账),并测量端到端的响应时间。
- 复杂与有机:分析真实用户监测(RUM)数据,以跟踪关键用户旅程的整页加载时间,包括所有资源获取和渲染。
信噪比
好的服务等级指标(SLI)值得有人随时待命关注,因为它们能高精度地指示服务降级或中断。即使贵司没有 On-call 团队,这仍然是评估 SLI 的一个好思路:
- 出现事故时,这个服务等级指标(SLI)能帮助我们收到通知吗?(在此语境中,事故是指任何威胁到业务目标的故障)
- 此服务等级指标(SLI)中的每个异常情况都表明发生了事件吗?(无误报或漏报)
服务等级指标(SLI)是可靠的所有权实施的基础:
- 服务等级指标(SLI)从消费者的角度衡量服务水平
- SLO 有助于:利益相关者对服务所有者设定期望;服务所有者向服务消费者传达他们的承诺
- 警报:将预期或承诺与责任和问责联系起来
糟糕的服务等级指标(SLIs)会导致职责缺失!
近期文章