大数据_SLA,SLO,SLI 名词解读

news2025/1/23 10:23:48

参考 : SLI、SLO和SLA,一文彻底搞懂!!!_木给哇啦丶的博客-CSDN博客

前言


SLO和SLA是大家常见的两个名词:服务等级目标和服务等级协议。

云计算时代,各大云服务提供商都发布有自己服务的 SLA 条款,比如 Amazon 的 EC2 和 S3 服务都有相应的 SLA 条款。这些大公司的SLA看上去如此的高大上,一般是怎么定义出来的呢?本文就尝试从技术角度解剖一下 SLA 的制定过程。

说 SLA 不能不提SLO,这个是众所周知的,但是还有一个概念知道的人就不多了,那就是 SLI(Service Level Indicator),定义一个可执行的 SLA,好的 SLO 和 SLI 是必不可少的。

再有就是 SLI/SLO/SLA 都是和服务联系在一起的,脱离了服务这三个概念就没有什么意义了。

术语清单

SLA = Service Level Agreement = 服务质量/水平协议(对外承诺)

SLO = Service Level Objective = 服务质量/水平目标(对内产品目标)

SLI = Services Level Indicator = 服务质量/水平指标(对内产品服务质量评价指标)

Service 什么是服务?


简单说就是一切提供给客户的有用功能都可以称为服务。

服务一般会由服务提供者提供,提供这个有用功能的组织被称为服务提供者,通常是人加上软件,软件的运行需要计算资源,为了能对外提供有用的功能软件可能会有对其他软件系统的依赖。

客户是使用服务提供者提供的服务的人或公司。

SLI


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

SLI的确定需要回答以下几个问题:

要测量的指标是什么?

测量时的系统状态?

如何汇总处理测量的指标?

测量指标能否准确描述服务质量?

测量指标的可靠度(trustworthy)?

1. 常见的测量指标有以下几个方面:


性能

  • 响应时间(latency)
  • 吞吐量(throughput)
  • 请求量(qps)
  • 实效性(freshness)
  • 可用性
  • 运行时间(uptime)
  • 故障时间/频率
  • 可靠性

质量

  • 准确性(accuracy)
  • 正确性(correctness)
  • 完整性(completeness)
  • 覆盖率(coverage)
  • 相关性(relevance)

内部指标

  • 队列长度(queue length)
  • 内存占用(RAM usage)

因素人

  • 响应时间(time to response)
  • 修复时间(time to fix)
  • 修复率(fraction fixed)

下面通过一个例子来说明一下:

hotmail 的 downtime SLI

错误率(error rate)计算的是服务返回给用户的error总数

如果错误率大于X%,就算是服务down了,开始计算downtime

如果错误率持续超过Y分钟,这个downtime就会被计算在内

间断性的小于Y分钟的downtime是不被计算在内的。

2. 测量时的系统状态,在什么情况下测量会严重影响测量的结果


测量异常(badly-formed)请求,还是失败(fail)请求还是超时请求(timeout)

测量时的系统负载(是否最大负载)

测量的发起位置,服务器端还是客户端

测量的时间窗口(仅工作日、还是一周7天、是否包括计划内的维护时间段)

3. 如何汇总处理测量的指标?


计算的时间区间是什么:是一个滚动时间窗口,还是简单的按照月份计算

使用平均值还是百分位值,比如:某服务X的ticket处理响应时间SLI的

测量指标:统计所有成功解决请求,从用户创建ticket到问题被解决的时间

怎么测量:用ticket自带的时间戳,统计所有用户创建的ticket

什么情况下的测量:只包括工作时间,不包含法定假日

用于SLI的数据指标:以一周为滑动窗口,95%分位的解决时间

4. 测量指标能否准确描述服务质量?


性能:时效性、是否有偏差

准确性:精度、覆盖率、数据稳定性

完整性:数据丢失、无效数据、异常(outlier)数据

5. 测量指标的可靠度


是否服务提供者和客户都认可

是否可被独立验证,比如三方机构

客户端还是服务器端测量,取样间隔

错误请求是如何计算的

SLO


SLO(服务等级目标)指定了服务所提供功能的一种期望状态。SLO里面应该包含什么呢?所有能够描述服务应该提供什么样功能的信息。

服务提供者用它来指定系统的预期状态;开发人员编写代码来实现;客户依赖于SLO进行商业判断。SLO里没有提到,如果目标达不到会怎么样。

SLO是用SLI来描述的,一般描述为:

比如以下SLO:

每分钟平均qps > 100k/s

99% 访问延迟 < 500ms

99% 每分钟带宽 > 200MB/s

设置SLO时的几个最佳实践:

指定计算的时间窗口

使用一致的时间窗口(XX小时滚动窗口、季度滚动窗口)

要有一个免责条款,比如:95%的时间要能够达到SLO

如果Service是第一次设置SLO,可以遵循以下原则

测量系统当前状态

设置预期(expectations),而不是保证(guarantees)

初期的SLO不适合作为服务质量的强化工具

改进SLO

设置更低的响应时间、更改的吞吐量等

保持一定的安全缓冲

内部用的SLO要高于对外宣称的SLO

不要超额完成

定期的downtime来使SLO不超额完成

设置SLO时的目标依赖于系统的不同状态(conditions),根据不同状态设置不同的SLO:总SLO = service1.SLO1 weight1 service2.SLO2 weight2 …

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

对于客户而言,是可预期的服务质量,可以简化客户端的系统设计

对于服务提供者而言

可预期的服务质量

更好的取舍成本/收益

更好的风险控制(当资源受限的时候)

故障时更快的反应,采取正确措施

SLO设好了,怎么保证能够达到目标呢?

需要一个控制系统来:

监控/测量SLIs

对比检测到的SLIs值是否达到目标

如果需要,修正目标或者修正系统以满足目标需要

实施目标的修改或者系统的修改

该控制系统需要重复的执行以上动作,以形成一个标准的反馈环路,不断的衡量和改进SLO/服务本身。

我们讨论了目标以及目标是怎么测量的,还讨论了控制机制来达到设置的目标,但是如果因为某些原因,设置的目标达不到该怎么办呢?

也许是因为大量的新增负载;也许是因为底层依赖不能达到标称的SLO而影响上次服务的SLO。这就需要SLA出场了。

SLA 


SLA是一个涉及2方的合约,双方必须都要同意并遵守这个合约。当需要对外提供服务时,SLA是非常重要的一个服务质量信号,需要产品和法务部门的同时介入。

SLA用一个简单的公式来描述就是: SLA = SLO 后果

SLO不能满足的一系列动作,可以是部分不能达到

比如:达到响应时间SLO 未达到可用性SLO

对动作的具体实施

需要一个通用的货币来奖励/惩罚,比如:钱

SLA是一个很好的工具,可以用来帮助合理配置资源。一个有明确SLA的服务最理想的运行状态是:增加额外资源来改进系统所带来的收益小于把该资源投给其他服务所带来的收益。

一个简单的例子就是某服务可用性从99.9%提高到99.99%所需要的资源和带来的收益之比,是决定该服务是否应该提供4个9的重要依据。

案例:

首先,SLI 和 SLO 是 SRE 工程实践里非常核心的概念,但是在同时提到这些概念的时候,经常容易混淆。

说明一下,下图假设所讨论的 SLA 个数为 1,使用了软件工程中 ER 图的表达方式,但也有所变化。

术语清单

SLA = Service Level Agreement = 服务质量/水平协议(对外承诺)

SLO = Service Level Objective = 服务质量/水平目标(对内产品目标)

SLI = Services Level Indicator = 服务质量/水平指标(对内产品服务质量评价指标)

人(用从上到下,从左到右的顺序)

客户 - 每 1 个客户在使用产品服务时,都显性或隐性的基于某 1 个 SLA,SLA 和客户之间是一种 1 对 1 的文档关系,这份协议文档就显性或者隐性的存在于系统中。客户使用 1 种,或者 n 种连接方式访问产品服务的 1 个或者 n 个应用系统。

销售 - SLA 本身是所销售产品服务的一部分,它规定了承诺给客户的产品功用和质量。基于 SLA,客户可以选择用付费或者免费的方式使用产品。1 个/份 SLA 的销售工作可以由 1 到 n 位销售完成。销售和客户都幻想着几乎完美的 SLA,这样代表企业利益的销售,以及产品的客户就都可以达到双赢的局面,皆大欢喜。

产品 - 通过与销售的间接互动,或者直接的客户调研,产品经理能够确定应用系统所应该具有的功能和发展方向。

SRE - SRE 和产品共同制定了每个 SLA 相关应用系统的 SLO,SLO 定量的定义了每 1 个应用系统所应该具备的服务质量,1 个应用系统的 SLO 被该产品服务的 SLO 文档定义,在该文档中 SLO 被映射到 1 个或者 n 个 SLI,每个 SLI 都需要用监控工具持续采集数据,通常它们的数值单位各不相同。所有 SLO 都是用百分比数值形式表达的,例如:99.99% 的成功率,90% 的请求延迟 < 400 毫秒等。SRE 和产品经理/专家还应该共同关注运行应用系统的基础设施层,确保基础设施的可用性和容量足以满足目标数量的用户访问,而且还要考虑和设计底层资源的容灾和跨区多活等复杂场景。

开发/运维 - 重要但暂不做讨论。

事(用从下往上的顺序)

IaaS 云服务 - 也可以是其它类型的可以供应用系统运行的环境。这里存在着 1 到 n 种子服务。它和上层的 n 个应用系统通常是 n 对 n 的关系。

应用系统 - 1 个到 n 个应用系统构成了 1 个产品服务(内含SLA),在和客户的互动中实现着产品服务的业务价值。

文档 - 以网页或者纸张的形式向用户描述了某个应用服务所提供的服务内容和质量信息。向用户提供这个文档并不是强制、显性和必须的。

结束语

结合你的实际工作场景,想象并描绘一下 SLA 、SLO 和 SLI 在你周围的人事物中关系网。在SRE 的工作实践中,定义 SLO,并梳理 SLI,将量化以后的目标和说明文档化,并让各个干系人认同并签署,是一项基础的起步工作。
 

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

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

相关文章

应用层读取wfp防火墙阻断记录

前言 之前的文档中&#xff0c;描写了如何对WFP防火墙进行操作[链接在此]&#xff0c;这篇文档中&#xff0c;描述如何获取WFP防火墙进行阻断的操作记录。 需要注意的坑点 使用FWPM_NET_EVENT_TYPE获取防火墙日志时&#xff0c;需要注意&#xff0c;只有丢弃和内核丢弃&…

指定CUDA版本失败的解决方案

新电脑安装的WIN11系统&#xff0c;因为CUDA只有11和12目前能装到WIN11上&#xff0c;所以就装了一个CUDA 11.7。但是编译PBRT失败&#xff0c;所以无奈之下又装了CUDA 12。 但是因为我有的代码需要CUDA 11里的函数&#xff0c;这些函数在CUDA12里被彻底删除了&#xff0c;但是…

CentOS7的journalctl日志查看方法

多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) CentOS7的journalctl日志查看方法 MySQL8.xx一主两从复制安装与配置 1、概述 日志管理工…

下单接口调优实战,性能提高10倍

目录 概述 用到的工具和环境 工具 环境 找瓶颈 总结 概述 最近公司的下单接口有些慢&#xff0c;老板担心无法支撑双11&#xff0c;想让我优化一把&#xff0c;但是前提是不允许大改&#xff0c;因为下单接口太复杂了&#xff0c;如果改动太大&#xff0c;怕有风险。另外…

【Django】Task1安装python环境及运行项目

【Django】Task1安装python环境及运行项目 写在最前 8月份Datawhale组队学习&#xff0c;在这个群除我佬的时代&#xff0c;写一下blog记录学习过程。 参考资源&#xff1a; 学习项目github&#xff1a;https://github.com/Joe-2002/sweettalk-django4.2 队长博客&#xff1a…

使用K8s的一些经验和体会

Java应用程序的奇怪案例 ​在微服务和容器化方面&#xff0c;工程师倾向于避免使用 Java&#xff0c;这主要是由于 Java 臭名昭著的内存管理。但是&#xff0c;现在情况发生了改变&#xff0c;过去几年来 Java 的容器兼容性得到了改善。毕竟&#xff0c;大量的系统&#xff08…

RocketMQ部署 Linux方式和Docker方式

一、Linux部署 准备一台Linux机器&#xff0c;部署单master rocketmq节点 系统ip角色模式CENTOS10.4.7.126Nameserver,brokerMaster 1. 配置JDK rocketmq运行需要依赖jdk&#xff0c;安装步骤略。 2. 下载和配置 从官网下载安装包 https://rocketmq.apache.org/zh/downlo…

三.net core 自动化发布到docker (创建一个dotnet工程发布)

创建Jenkins-create a job 输入名称&#xff08;建议不要带“”这类的字符&#xff09;&#xff0c;选择自由风格的类型&#xff08;红框标注的&#xff09;&#xff0c;点击确定 用于测试,下面选项基本没有选择-配置代码地址 选择执行shell #!/bin/bash # 获取短版本号 GITHA…

会一点stm32,只后是做嵌入式Linux还是转JAVA?

选择嵌入式Linux还是转向JAVA&#xff0c;取决于你的兴趣、职业规划和就业市场的需求。以下是一些考虑因素&#xff1a;兴趣和擅长&#xff1a;首先&#xff0c;你应该考虑自己对嵌入式Linux和JAVA的兴趣和擅长程度。如果你对嵌入式系统、硬件交互和底层编程更感兴趣&#xff0…

echart 3d立体颜色渐变柱状图

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 根据业务需求将不同的法律法规&#xff0c;展示不同的3d立体渐变柱状图。 2.先看下效果图 3. 确定三面的颜色&#xff0c;这里我是自定义的颜色 // 右面生成颜色const rightColorArr ref(["#79D…

【图像融合】融合算法综述(持续更新)

按时间顺序&#xff0c;综述近5年的融合算法。重点分析了最近两年的work&#xff0c;欢迎留言探讨 文章目录 前言1.SSR-Laplacian Image Fusion&#xff08;2017&#xff09;2、FusionGAN&#xff08;2019&#xff09;3、MBNet&#xff08;2020&#xff09;4、DIDFuse&#xff…

【闪击Linux系列P10】操作系统管理的算珠——进程の详解

​ 前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁&#xff0c;从操作系统层面向大家介绍进程&#xff1a; 主要内容含&#xff1a; 欢迎订阅 YY滴Linux专栏&#xff01;更多干货持续更新&#xff0…

AIGC绘画:基于Stable Diffusion进行AI绘图

文章目录 AIGC深度学习模型绘画系统stable diffusion简介stable diffusion应用现状在线网站云端部署本地部署Stable Diffusion AIGC深度学习模型绘画系统 stable diffusion简介 Stable Diffusion是2022年发布的深度学习文本到图像生成模型&#xff0c;它主要用于根据文本的描述…

MySQL — 索引

文章目录 索引索引结构 — B树与B树B树B树 聚簇索引与非聚簇索引聚簇索引非聚簇索引优缺点 覆盖索引与回表联合索引索引覆盖最左前缀匹配 索引 索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的&#xff0c;索引可以大大提…

图像去雨-雨线清除-图像处理-(计算机作业附代码)

背景 多年来&#xff0c;图像去雨已经被广泛研究&#xff0c;使用传统方法和基于学习的方法。然而&#xff0c;传统方法如高斯混合模型和字典学习方法耗时&#xff0c;并且无法很好地处理受到严重雨滴影响的图像块。 算法 通过考虑雨滴条状特性和角度分布&#xff0c;这个问…

2023+HuggingGPT: Solving AI Tasks with ChatGPT and itsFriends in Hugging Face

摘要&#xff1a; 语言是llm(例如ChatGPT)连接众多AI模型(例如hugs Face)的接口&#xff0c;用于解决复杂的AI任务。在这个概念中&#xff0c;llms作为一个控制器&#xff0c;管理和组织专家模型的合作。LLM首先根据用户请求规划任务列表&#xff0c;然后为每个任务分配专家模…

3D- vista:预训练的3D视觉和文本对齐Transformer

论文&#xff1a;https://arxiv.org/abs/2308.04352 代码: GitHub - 3d-vista/3D-VisTA: Official implementation of ICCV 2023 paper "3D-VisTA: Pre-trained Transformer for 3D Vision and Text Alignment" 摘要 三维视觉语言基础(3D- vl)是一个新兴领域&…

JDBC封装与设计模式

什么是 DAO &#xff1f; Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用&#xff0c;将数据在实体类和数据库记录之间进行转换。 ----------------------------------------------------- DAO模式的组成部分 …

【动画】p60动画蓝图、播放蒙太奇、打包

p60动画蓝图、播放蒙太奇、打包 p60动画蓝图、播放蒙太奇、打包添加动画动画蓝图使模型使用动画蓝图奔跑跳舞蒙太奇 移动打断蒙太奇打包退出游戏 p60动画蓝图、播放蒙太奇、打包 添加动画 右键内容浏览器-》动画-》混合空间1D-》选择新的角色的骨骼 如下图在资产详情修改参数…

【TypeScript】基础类型

安装 Node.js 环境 https://nodejs.org/en 终端中可以查到版本号即安装成功。 然后&#xff0c;终端执行npm i typescript -g安装 TypeScript 。 查到版本号即安装成功。 字符串类型 let str:string "Hello"; console.log(str);终端中先执行tsc --init&#xf…