SLI、SLO和SLA

SLI(Services Level Indicator)服务水平指示器

Service Level Indicator 服务水平指示器,简称SLI,是反映服务质量/水平的指标(对内产品服务质量评价指标),对于业务来说是最重要的指标。比如,对于网站来说,一个常见的SLI是请求得到正常响应的百分比。常见的测量指标:

1、性能

  • 响应时间(latency)

  • 吞吐量(throughput)

  • 请求量(qps)

  • 实效性(freshness)

2、可用性

  • 运行时间(uptime)

  • 故障时间/频率

  • 可靠性

3、质量

  • 准确性(accuracy)

  • 正确性(correctness)

  • 完整性(completeness)

  • 覆盖率(coverage)

  • 相关性(relevance)

4、内部指标

  • 队列长度(queue length)

  • 内存占用(RAM usage)

SLO(Service Level Objective) 服务水平目标

Service Level Object 服务水平目标(对内产品目标),是围绕SLI构建的目标。通常是一个百分比,并与一个时间范围挂钩。比如,月度、季度、年度等。通常用一连串9来度量。如果脱离了时间的度量,SLO的意义就不大了。

90%(1个9的正常运行时间):这意味着10%的停机时间,也就是说在过去的30天里停机了3天。
99%(2个9的正常运行时间):意味着在过去30天中有1%,或者说7.2小时的停机时间。
99.9%(3个9的正常运行时间):意味着0.1%,或者说43.2分钟的停机时间。
99.95%(3.5个9的正常运行时间):意味着0.05%,或者说21.6分钟的停机时间。
99.99%(4个9的正常运行时间):意味着0.01%,或者说4.32分钟的停机时间。
99.999%(5个9的正常运行时间):意味着0.001%,或者说26秒的停机时间。

服务提供者用它来指定系统的预期状态;开发人员编写代码来实现;客户依赖于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设好了,怎么保证能够达到目标呢?需要一个控制系统来:

  • 监控/测量SLIs

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

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

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

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

我们讨论了目标以及目标是怎么测量的,还讨论了控制机制来达到设置的目标,但是如果因为某些原因,设置的目标达不到该怎么办呢?也许是因为大量的新增负载;也许是因为底层依赖不能达到标称的SLO而影响上次服务的SLO。这就需要SLA出场了。

SLA(Service Level Agreement )服务水平协议

Service Level Agreement 服务水平协议,服务质量/水平协议(对外承诺),是企业围绕SLO发布的协议。它要求在不满足SLO时向客户补偿的协议。

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

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

SLO不能满足的一系列动作,可以是部分不能达到
比如:达到响应时间SLO+未达到可用性SLO

对动作的具体实施
需要一个通用的货币来奖励/惩罚,比如:钱

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

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

实例
假如有一个网站https://163.com,我对这个网站的监控指标是请求正常响应数,从2021年1月1号上线到2021年3月20号,请求数据如下:
1月,总请求数500,错误响应20;
2月,总请求数600,错误响应10;并因为故障宕机10分钟;
3月1号-3月20号,总请求数400,错误响应15;

那么计算出来的SLI、SLO,SLA是多少呢?
SLI:1 -(20+10+15)/ (500+600+400) = 97%
SLO:1 - ( 10 / 79天 * 24 * 60 )= 99.991%

SLO:假如是给第三方做的网站,并签订了SLA:“若SLO达不到99.999%,根据相关指标确定补偿金额”,那么根据上面的这个SLO和签订的SLA,可以算出补偿的金额。

参考文章:
SLI、SLO和SLA,一文彻底搞懂!!!
什么是SLI、SLO、SLA

SLI、SLO和SLA相关推荐

  1. 001_深度剖析什么是 SLI、SLO和SLA?

    前言 SLO和SLA是大家常见的两个名词:服务等级目标和服务等级协议. 云计算时代,各大云服务提供商都发布有自己服务的SLA条款,比如Amazon的EC2和S3服务都有相应的SLA条款.这些大公司的S ...

  2. 深度剖析什么是 SLI、SLO和SLA?

    前言 SLO和SLA是大家常见的两个名词:服务等级目标和服务等级协议. 云计算时代,各大云服务提供商都发布有自己服务的SLA条款,比如Amazon的EC2和S3服务都有相应的SLA条款.这些大公司的S ...

  3. SLI、SLO和SLA,一文彻底搞懂!!!

    前言 SLO和SLA是大家常见的两个名词:服务等级目标和服务等级协议. 云计算时代,各大云服务提供商都发布有自己服务的 SLA 条款,比如 Amazon 的 EC2 和 S3 服务都有相应的 SLA ...

  4. SRE之SLI/SLO设定

    微信公众号:运维开发故事,作者:夏老师 1什么是SLI/SLO SLI,全名Service Level Indicator,是服务等级指标的简称,它是衡定系统稳定性的指标. SLO,全名Sevice ...

  5. 通过Prometheus来做SLI/SLO监控展示

    微信公众号:运维开发故事,作者:乔克 什么是SLI/SLO SLI,全名Service Level Indicator,是服务等级指标的简称,它是衡定系统稳定性的指标. SLO,全名Sevice Le ...

  6. 37 | 什么是SLI、SLO、SLA

    1 SLI Service Level Indicator 服务水平指示器,服务水平,简称SLI.对于业务来说是最重要的指标.比如,对于网站来说,一个常见的SLI是请求得到正常响应的百分比. 只要遵从 ...

  7. SRE中 的SLO,SLI等知识 归纳

    SLA = Service Level Agreement = 服务质量/水平协议 SLO = Service Level Objective = 服务质量/水平目标 SLI = Services L ...

  8. 在大规模 Kubernetes 集群上实现高 SLO 的方法

    作者 | 蚂蚁金服技术专家 姚菁华:蚂蚁金服高级开发工程师 范康 导读:随着 Kubernetes 集群规模和复杂性的增加,集群越来越难以保证高效率.低延迟的交付 pod.本文将分享蚂蚁金服在设计 S ...

  9. 写代码也要讲规矩——SLA

    软件的复杂性带来的问题 工作一年多了,在涉及到跨部门合作的时候往往就是最痛苦的时候,其实道理很简单,刚开始,我们的组织和产品如左图,一切都比较简单,为了业务的发展,通过人工快速吃到技术和产品的红利,很 ...

最新文章

  1. 【 C 】const 学习笔记
  2. linux机器启动pg数据库命令,Linux下创建Postgresql数据库的方法步骤
  3. js中期BOM及this指向
  4. C语言 socket listen()函数(socket()函数创建的socket(套接字描述符)默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求)
  5. 计算机小白学UI,小白学UI设计有什么技巧?看完这些你就明白了
  6. c++中实现delphi的按类名生成类对象
  7. CUDA ERROR: device-side assert triggered at解决
  8. Java 打 jar 包时,MANIFEST.MF 文件详解
  9. Bash shell脚本练习(一)
  10. 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结
  11. MySoft.Data入门篇:编写业务逻辑
  12. (转)一个百倍股的坠落:那个曾经满大街的ESPRIT是如何衰败的
  13. ARM嵌入式最小系统
  14. 上海互联网整体沉沦:盛大巨人全没落 8年没出一个马云
  15. 全文检索语句中的AND和OR的用法
  16. 图片格式导致的报错:Attribute Error: ‘NoneType‘ object has no attribute ‘astype‘ 解决方案
  17. python 结合百度识图识别文字
  18. HTTP基本使用方法
  19. 统信UOS安装安卓手机软件 APK软件包
  20. 洛谷P2403 [SDOI2010]所驼门王的宝藏

热门文章

  1. java 数组是连续存储吗_数组在Java中储存在()中_学小易找答案
  2. 定时清理服务器日志文件
  3. 股票6题(Aced)
  4. 安装及配置 Mac 上的 Rime 输入法——鼠鬚管 (Squirrel)(也适用于小狼豪)
  5. 解锁三星bl锁有几种方法_如何判断三星 Galaxy S7 (G9308)手机bootloader是否解锁_免费解锁BL的3个方法...
  6. python国际象棋ai程序_用 Python 编写一个国际象棋 AI 程序
  7. 一个app从设想到上线运营的完整过程
  8. android button 字母自动变大写的解决
  9. ARM通用中断控制器GIC之中断处理状态机 Interrupt handling state machine
  10. 如何只用三步就能快速写一个网页