如何配置 SLO

news2024/12/29 16:27:39

前言

无论是对外提供 IaaS PaaS SaaS 的云公司,还是提供信息技术服务的乙方公司,亦或是金融 制造等各行各业的数据中心、运维部门,我们的一个非常重要的合同承诺或考核评估指标就是:SLA(即:Service-Level Agreement 服务等级协议)。

而真正落地实现 SLA 的精确测量,最广为人知的就是 Google 的 SRE 理论。

Google SRE SLO & SLA

在 Google,会明确区分 SLO 和服务等级协议 (SLA)。SLA 通常涉及向服务用户承诺,即服务可用性 SLO 应在特定时间段内达到特定级别。如果不这样做,就会导致某种惩罚。这可能是客户为该期间支付的服务订阅费的部分退款,或者免费添加的额外订阅时间。SLO 不达标会伤害到服务团队,因此他们将努力留在 SLO 内。如果您要向客户收取费用,则可能需要 SLA。

SLA 中的可用性 SLO 通常比内部可用性 SLO 更宽松。这可以用可用性数字表示:例如,一个月内可用性 SLO 为 99.9%,内部可用性 SLO 为 99.95%。或者,SLA 可能仅指定构成内部 SLO 的指标的子集。

如果 SLA 中的 SLO 与内部 SLO 不同(几乎总是如此),则监控必须显式测量 SLO 达标情况。您希望能够查看系统在 SLA 日程期间的可用性,并快速查看它是否似乎有脱离 SLO 的危险。

您还需要对合规性进行精确测量,通常来自 Metrics、Tracing、Logging 分析。由于我们对付费客户有一组额外的义务(如 SLA 中所述),因此我们需要将从他们那里收到的查询与其他查询分开进行度量。这是建立 SLA 的另一个好处 — 这是确定流量优先级的明确方法。

定义 SLA 的可用性 SLO 时,请注意将哪些查询视为合法查询。例如,如果客户因为发布了其移动客户端的错误版本而超出配额,则可以考虑从 SLA 中排除所有"超出配额"的响应代码。

SLI

SLI 是经过仔细定义的测量指标,它根据不同系统特点确定要测量什么。

常见的 SLI 有:

  • 性能
    • 响应时间 (latency)
    • 吞吐量 (throughput)
    • 请求量 (qps)
    • 实效性 (freshness)
  • 可用性
    • 运行时间 (uptime)
    • 故障时间/频率
    • 可靠性
  • 质量
    • 准确性 (accuracy)
    • 正确性 (correctness)
    • 完整性 (completeness)
    • 覆盖率 (coverage)
    • 相关性 (relevance)
  • 内部指标
    • 队列长度 (queue length)
    • 内存占用 (RAM usage)
  • 因素人
    • 响应时间 (time to response)
    • 修复时间 (time to fix)
    • 修复率 (fraction fixed)

SLO

SLO(服务等级目标)指定了服务所提供功能的一种期望状态,服务提供者用它来指定系统的预期状态。SLO 里不会提到,如果目标达不到会怎么样。

SLO 是用 SLI 来描述的,一般描述为: 比如以下SLO:

  • 每分钟平均 qps > 100 k/s
  • 99% 访问延迟 < 500ms
  • 99% 每分钟带宽 > 200MB/s

设置 SLO 时的目标依赖于系统的不同状态(conditions),根据不同状态设置不同的SLO:

总 SLO = service1.SLO1 weight1 + service2.SLO2 weight2 + …

为什么要有 SLO,设置 SLO 的好处是什么呢?

  • 对于客户而言,是可预期的服务质量,可以简化客户端的系统设计
  • 对于服务提供者而言
    • 可预期的服务质量
    • 更好的取舍成本/收益
    • 更好的风险控制(当资源受限的时候)
    • 故障时更快的反应,采取正确措施

SLA

 SLA = SLO + 后果

小结

  • SLI:服务等级指标,经过仔细定义的测量指标
  • SLO:服务等级目标,总 SLO = service1.SLO1 weight1 + service2.SLO2 weight2 + …
  • SLA: 服务等级协议,SLA = SLO + 后果

如何配置 SLO

公有云常见 SLO

常见于通过 处理请求的服务或 API 提供的服务(如:对象存储 或 API 网关)

  • 错误率 (error rate) 计算的是服务返回给用户的 error 总数
  • 如果错误率大于X%(如 0.5%),就算是服务 down了,开始计算 downtime
  • 如果错误率持续超过 Y (如 5)分钟,这个downtime就会被计算在内
  • 间断性的小于 Y 分钟的downtime是不被计算在内的。

前端 Web 或 APP

前端用户体验 Apdex 目标

如果有前端 js 探针监控,或拨测监控,那么可以用前端用户体验 Apdex 作为 SLO。

Apdex 定义了一个性能标准,将应用程序用户分为三个组:

  • 满意、
  • 可容忍(一般)
  • 沮丧(不满意)。

例如,作为前端应用程序的 SLO,您可以指定希望 90% 的用户 Apdex 都是 满意

如,My WebApp Apdex 公式如下:

100% * (apps.web.actionCount.category:filter(eq(Apdex category,SATISFIED)):splitBy("My WebApp")) / (apps.web.actionCount.category:splitBy("My WebApp"))

前端 APP 无崩溃(Crash)用户率目标

衡量手机 App (iOS 和 Android) 的可用性和可靠性的最重要指标之一是 无崩溃用户率。指的是没有崩溃的情况下打开并使用移动 APP 的用户百分比。

因此,公式示例如下:

apps.other.crashFreeUsersRate.os:splitBy("My mobile app")

拨测可用性目标

拨测可用性 SLO 表示拨测处于可用状态下的时间百分比,或者,成功拨测占执行的总测试数的百分比。

因此,公式示例为:

(synthetic.browser.availability.location.total:splitBy("My WebApp"))

后端应用 或 Service

基本的 SLO - 调用成功率目标

成功率 = 成功的请求调用次数 / 总的请求调用次数

如:My service 的 成功率:

100% * (service.requestCount.successCount:splitBy("My service"))/(service.requestCount.totalCount:splitBy("My service"))

那么,如果 My service 的关键 API 或请求需要计量,就可能是下面的公式:

(100%)*(service.keyRequest.successCount:splitBy(type("SERVICE_API") AND entityId("POST /login")))/(service.keyRequest.totalCount:splitBy(type("SERVICE_API") AND entityId("POST /login")))

ℹ️ 提示:

成功的请求最简单的一种方式是:http 状态码为 2xx 或 3xx 的请求即视为成功。

还有一种,请求执行过程中没有抛出错误(日志或异常)的请求视为成功。

服务性能目标

重点在于性能

服务性能 SLO 表示 「fast」 服务调用占服务调用总数的百分比,其中 「fast」使用自定义条件定义。例如:

  • fast:0 - 3s 内完成服务调用()
  • normal:3 - 5s 内完成服务调用
  • slow:5s 以上完成服务调用或超时

ℹ️ 提示:

当然,上边的 3s 也不应该是拍脑袋想的,而应该是例如基于过去一个月系统正常运行时 99% 百分位数的响应时间。

公式示例为:

(service:fastRequests:splitBy("My WebApp")) / (service:totalRequests:splitBy("My WebApp"))

后端数据库

数据库可用性或读可用性目标

错误率:是在给定的一小时间隔内,DB 的失败 SQL 执行次数除以总 SQL 执行次数。

读错误率:是在给定的一小时间隔内,DB 的失败查询 SQL 执行次数除以总 SQL 执行次数。

公式示例为:

可用性 % = 100% - Average DB Error Rate

或:

读可用性 % = 100% - Average DB Read Error Rate

吞吐量目标

  • 吞吐量失败的请求:是指请求尚未超过给定 DB 吞吐量,却被 DB 吞吐量限制,导致错误码

  • 吞吐量错误率:是在给定的一小时间隔内,给定 DB 的吞吐量失败请求总数除以总请求数。

那么,公式示例为:

吞吐量目标% = 100% -平均吞吐量错误率

一致性目标

SLI 为:

一致性违规率:是指在给定的 DB 中,在给定的一小时间隔内,对所选的一致性级别(按总请求数划分)执行一致性保证时无法发送的成功请求。

延迟目标

  • P99 延迟:计算出的一段时间内的测试 SQL (如select 1 from dual) 执行时间的 99% 百分位响应时间。
  • 延迟时间和:是指在应用程序提交的 SQL 成功请求导致 P99 延迟大于或等于 10ms 的一个小时间隔的总数。

那么,示例公式为:

延迟目标% = 100% - 总的延迟时间和的次数 / (DB 总使用时间/1H)

如:过去 1 个月,总的延迟时间和的次数为 50 次,分母为:30 * 24 / 1 = 720

那么:延迟目标% = 100% - 50 / 720 ≈ 93%

MQ 类

消息成功率目标

就是成功的消息除以 MQ 接收的总消息。

公式示例为:

(100)*((mq.rabbitmq.queue.requests.successful:splitBy("payment"))/mq.rabbitmq.queue.requests.incoming:splitBy("payment")))

Host 类

UPTIME 目标

例如,每小时正常运行时间百分比 = 100% - 单个 Host 实例处于不可用状态的总时间(没有超过多长时间才算不可用一说)百分比

不可用的定义可以是:

  • 该 Host 实例没有网络连接
  • 该 Host 实例 无法执行读写 IO,且 IO 在队列中挂起。即 IO hang。

K8S 类

K8S 类是一类综合系统,需要考虑如下目标

  • API Server 成功率目标
  • 计算目标
  • 存储目标
  • 网络目标

存储类

可用性(Availability)目标

大致也是类似上边的可用性目标。

数据持久性(Durability)目标

这个通常非常高,比如:99.999999999%

可以简单粗暴认为:只要有数据丢失的情况,就是没达到目标。

典型案例就是腾讯的那次。

网络类

可用性目标

以 NAT 网关为例:

单实例服务不可用分钟数: 当某一分钟内,NAT 网关实例出方向所有数据包都被 NAT 网关丢弃时,则视为该分钟内该 NAT 网关实例服务不可用。在一个服务周期内 NAT 网关实例不可用分钟数之和即服务不可用分钟数。

总结

可以根据不同的层次、组件设定不同的 SLO。

SLO 的监测是需要监控工具的支持。

常用的 SLO 包括:

  • 可用性(Availability)目标
  • 成功率(Success Rate)目标
  • 延迟 (Latency) 目标
  • 运行时间 (Uptime) 目标
  • 数据持久性(Durability)目标

EOF

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯算法训练:FBI树(c++实现+图文详解)

文章目录FBI树C代码示例FBI树 题目要求 我们可以把由“0”和“1”组成的字符串分为三类&#xff1a;全“0”串称为B串&#xff0c;全“1”串称为I串&#xff0c;既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树&#xff0c;它的结点类型也包括F结点&#xff0c;B结点和I…

某公司高管疾呼:底层程序员离职率太高,有人入职不到半年就走!建议把恶意离职加入征信,让年轻人对公司有起码的尊重!...

许多人入职后才发现公司有各种难以忍受的问题&#xff0c;入职时间很短就被迫离职&#xff0c;这本是无可奈何的事&#xff0c;但一位公司高管却对此非常愤怒&#xff0c;指出“目前基层程序员离职率太高&#xff0c;有人入职不到半年就走了”&#xff0c;还建议把恶意离职加入…

MVC开发模式

1、JSP演变历史 1、早期只有servlet&#xff0c;只能使用response输出标签数据&#xff0c;非常麻烦 2、后来又有了jsp&#xff0c;简化了Servlet的开发&#xff0c;但如果过度使用jsp&#xff0c;在jsp中即写大量的Java代码&#xff0c;又有HTML&#xff0c;会造成难以维护&am…

【红黑树】

红黑树红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树的查找红黑树与AVL树的比较红黑树的概念 红黑树是一种二叉搜索树&#xff0c;但在每个结点上增加了一个存储位用于表示结点的颜色&#xff0c;这个颜色可以是红色的&#xff0c;也可以是黑色的&a…

主存储器扩展技术(计组)

用已有的存储器芯片构造一个需要的存储空间。 位扩展–扩展字长 构成内存的存储器芯片的字长小于内存单元要求的字长时–需要进行位扩展。实例&#xff1a; 位扩展的连线特点&#xff1a; 将每片的地址线、控制线并联&#xff0c;数据线分别引出。 效果&#xff1a; 存…

JavaSE笔记——函数式编程(流)

文章目录前言一、从外部迭代到内部迭代二、实现机制三、常用的流操作1.collect(toList())2.map3.filter4.flatMap5.max和min6.reduce四、多次调用流操作五、高阶函数总结前言 流是一系列与特定存储机制无关的元素——实际上&#xff0c;流并没有 “存储” 之说。利用流&#x…

如何用python打造新年氛围组?【内含html源码赠送】

嗨害大家好鸭&#xff01;我是小熊猫~ 离正式过新年还有24天~ 这次给大家整一个花活~ 就是每时每秒都提醒离新年还有多久 我这里还有一些中国结的python代码&#xff0c; 大家可以文末名片自行领取鸭~ 倒计时 效果展示 有什么python相关报错解答自己不会的、或者源码资料/…

操作系统——计算机系统概述

操作系统——计算机系统概述一、操作系统的概念1、定义2、功能和目标二 、操作系统特征1、并发性2、共享性3、虚拟性4、异步性三、操作系统的发展1、手工操作阶段2、批处理阶段——单道批处理系统2、批处理阶段——多道批处理系统3、实时操作系统四、运行机制和体系结构1、运行…

EnvironmentAware 接口的使用

文章目录1、EnvironmentAware 接口作用2、实际应用3、代码演示1&#xff09;基本配置准备2&#xff09;增加属性配置文件 application.properties3&#xff09;增加配置类实现 EnvironmentAware 接口4、编写 main 方法的类 SpringTest.java5、运行 main 方法查看结果1、Environ…

Java之线程状态

目录一、简介二、线程状态1、新建状态&#xff08;New&#xff09;2、运行状态&#xff08;Runnable&#xff09;3、阻塞状态&#xff08;Blocked/Waiting/TimeWaiting&#xff09;&#xff08;1&#xff09;被阻塞状态&#xff08;Blocked&#xff09;&#xff08;2&#xff0…

新新新~Revit插件【建模助手】7大模块介绍

年底了&#xff0c;大家是不是都在喝茶、聊天、等跨年&#xff1b;而我&#xff0c;建模助手&#xff0c;则在——总结、规划、PPT。 不盘不知道&#xff0c;一盘可吓了我一大跳&#xff01;没想到咱们在过去一年居然建设了这么多丰功伟绩&#xff1a; 说点标志性的&#xff…

到底什么是电子管(真空管)?

1883年&#xff0c;著名发明家托马斯爱迪生&#xff08;Thomas Edison&#xff09;在一次实验中&#xff0c;观察到一种奇怪现象。当时&#xff0c;他正在进行灯丝&#xff08;碳丝&#xff09;的寿命测试。在灯丝旁边&#xff0c;他放置了一根铜丝&#xff0c;但铜丝并没有接在…

WebRTC系列-视频VideoBroadcaster与视频流

文章目录 1. VideoBroadcaster 添加sink2. VideoBroadcaster 视频数据分发OnFrame方法在前面的文章视频的采集流程中,视频数据采集完成后到编码器之前,如果需要渲染处理那里需要两路视频,WebRTC是实现了一个视频分发器VideoBroadcaster;用来分发采集的视频帧; 这篇文章主要…

Nginx网页配置工具nginxWebUI

今天应该是我们公司 2022 年最后一天上班了&#xff0c;给自己做个简单的年度总结吧&#xff1a; 1月&#xff1a;做核酸 2月&#xff1a;做核酸 3月&#xff1a;做核酸&#xff0c;半个月左右居家办公 4月&#xff1a;做核酸&#xff0c;静态管理 5月&#xff1a;做核酸&…

贪吃蛇基础·框架版(简单)开头有原码

更新不易&#xff0c;麻烦多多点赞&#xff0c;欢迎你的提问&#xff0c;感谢你的转发&#xff0c; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我…

XStream < 1.4.20 栈缓冲区溢出漏洞

漏洞描述 XStream 是一个轻量级的、简单易用的开源Java类库&#xff0c;它主要用于将对象序列化成XML&#xff08;JSON&#xff09;或反序列化为对象。 在1.4.20之前的版本中存在栈缓冲区溢出漏洞&#xff0c;从而导致通过操纵已处理的输入流来造成拒绝服务。 在使用集合和映…

一文掌握FastDeploy Serving服务化部署(打造线上证件照制作系统,含完整代码)

目录一、概述1.1 服务化部署1.2 FastDeploy简介二、搭建线上证件照制作系统2.1 准备环境2.1.1 安装Docker2.1.2 安装NVIDIA Container Toolkit2.1.3 获取FastDeploy Serving镜像2.2 部署模型2.2.1 准备模型仓库2.2.2 编写配置文件config.pbtxt2.2.3 服务启动2.3.4 测试访问2.3 …

盒子模型、CSS 中选择器优先级以及权重计算、px、em 和 rem 的区别

CSS 的盒模型&#xff1f; 盒子模型&#xff08;Box Modle&#xff09;可以用来对元素进行布局&#xff0c;包括内边距&#xff0c;边框&#xff0c;外边距&#xff0c;和实际 内容这几个部分 盒子模型分为两种 第一种是 W3C 标准的盒子模型&#xff08;标准盒模型&#xff09;…

微软 Outlook 如何修改邮件列表中的字体或字号

因为电脑的操作系统是默认英文的&#xff0c;默认的字体实在是太难看了。 解决方案 我们是可以对字体进行修改的。 例如修改成下面的方案。 选择视图 首先&#xff0c;先选定顶部的视图。 然后在当前的视图下&#xff0c;选择视图设置。 随后在弹出的窗口中&#xff0c;选择…

一劳永逸解决latex 80%bug

Latex编辑器也用过很多了&#xff0c;这种问题出现&#xff0c;一般就是}没对应啥的&#xff0c;但是这次检查了半天&#xff0c;就是找不到问题。 最后有一个快捷的解决方案&#xff0c;就是overleafhttps://www.overleaf.com/project/6347bab20a4c120392547ff3 写文章五六年…