SRE中的SLA/SLO/SLI
SLA通俗理解
SLA 表征服务方与客户间的服务等级协议,定义服务方需保证的服务质量以及不达标情况下的服务补偿,在SRE领域,SLA 细分为 SLI、SLO 与 SLA:
- SLI,服务质量指标,服务的某项质量的一个具体的量化指标,如时延、吞吐量、错误率等。
- SLO,服务质量目标,服务的某项 SLI 的具体目标值,或者目标范围,如 99% 访问延迟 < 500ms。
- SLA,服务质量协议,描述在服务不达 SLO 情况下的后果,可简单理解为 “SLA = SLO + 后果(惩罚)”。
由于SLA是交付给客户的协议,因此 SLA 中的 SLO 是需要可直观被用户感知的,直接影响用户体验的,这是 SLA 隐含的应有之义。

因此,计算 SLA 主要在于定义服务不同维度的 SLI,根据不同 SLI 设计合理 SLO,并经时间段采集、计算汇总得出每个 SLO 不达标时间,进而计算服务所有 SLO 总的不可用时间,利用总时间与所有 SLO 不可用时间差值与比值,得出服务最终的 SLO。
SLO 计算模型
对于大多数服务而言,表述服务可用性最直接的方式可能就是服务可用时间。在这种体系下,常说的99.9%,99.99%,99.999%的可用性都是时间维度的统计,可以理解为:在规定的条件和规定的时间内,完成规定任务的概率。基于时间的可用性有如下表述形式:
可用性 = 系统正常运行时间 / 统计周期内的总时间
同时为了避免选择过大的时间窗口会平滑可用性计算,无法准确表现某个时间段服务的状态,因此将时间窗口缩小到秒级,定义在每个小时间片内的成功率要求,如果达标则认为该时间片可用,那么可用性又可以有如下表述形式:
可用性 = 系统达标时间 / 统计周期内的总时间
时间窗口越小越精确,这其实是一个积分运算,窗口越小越能准确表现总体趋势,但也需权衡数据分析性能与准确性,常用时间窗口1min
看一个示例:

SLO1 = 1 - T2/(T1+T2+T3+T4)
SLO2 = 1 - T3/(T1+T2+T3+T4)
根据每个指标的 SLO 结果聚合出服务的总体 SLO:
SLO = 1 - (T2+T3)/(T1+T2+T3+T4)
开放服务 SLA 建设
问题定义
- 如何定义开放服务的 SLI、SLO,是否能基本表征服务质量?
- 采集对应 SLO 所需元数据并计算
- SLO 不达标时,快速定位原因,并驱动服务质量提升
服务SLI
衡量服务有多个维度:性能(响应时间)、可用性(成功率)、自定义业务指标(任务队列排队数)等,每个维度又有多个指标,针对开放服务需挑选直接与用户使用相关的指标、下游对服务的依赖能力等。
服务重点关注性能和可用性,结合集团内部其他衡量案例,采用 可用率(失败率)和响应时间作为SLI。
可用率
可用率不是成功率,有很多请求失败是客户端传参失效、登录态超时导致,HttpCode 以 4xx 标识。可用率可用公式
available = count(2XX) / (count(2XX) + count(5XX) - count(noise))
额外说明:
计入开放服务 SLO 的特殊情况:
- 网关等待服务响应超时(10s)会返回给客户端 503,这是 网关层做的安全管控,可理解为:服务性能问题、网络故障、服务故障等,这部分会记入开放服务 SLO
- 开放接口转发规则配置出错导致503,后期网关可在开放接口发布流程上做强管控尽可能避免此类问题发生
- 请求body过大(超过521KB)的拦截、大响应(超过2M)拦截
计入网关 SLO 的特殊情况:
- 网关认证中心错误,如超时、服务不可用
不计入 SLO 的特殊情况:
- 网关与服务长连接超时问题导致返回503,网关调用HTTP服务失败,这种情况一般是业务的HTTP长连接空闲配置与网关不一致导致, 网关为60秒空闲自动关闭连接,如果业务方服务的空闲时间小于60秒就会导致这个问题,原理参考:https://segmentfault.com/a/1190000021704869
- 限流(理论上是网关的保护逻辑,不应计算在可用率内),包括主动限流 + 被动限流,每个开放接口默认500QPS,超过即限流;提供业务侧主动限流,定向防刷
因此需消除已上噪音才能相对准确反应开放服务可用率。
响应时间
响应时间很大程度上代表服务性能,但由于不同服务不同接口的业务特点,如果强制划定所有接口 RT 需小于一定值则有失公允,因此基于分位数计算历史一个月服务的总体数据,eg: TP<90> < 275ms,近一个月百分之90的请求的 RT 在 275ms内,利用该值放缩至每个小时间片,时间片内每个接口 rt < 275 则符合要求,否则不满足。随着服务的分位数 TP<90> 的不断迭代,进而影响每个小时间片内的达标率,促使服务性能优化。
响应时间采用如下策略:
- 服务大盘使用历史 TP<90> 分位数作为标杆值,计算 SLO
- 重点接口使用约定指标,限定计算
最后
基于服务每个月的 SLA,可总体了解服务的性能及稳定性。同时基于不满足 SLO 的时间片,通过 sls 关联分析以及网关日志回溯,找到影响指标的接口,每周生成报表推送给对应服务负责人进行整改。
开放服务 SLO 每周产出开放服务报表,把服务可靠性从经验模型向量化模型转移,对用户对服务方有明朗的价值。提供对应质量数据,同时针对一些指标的不足在保证最优 ROI 下去解决导致质量下降的根因,进而优化服务。
附件:
草拟网关服务的 SLA:
网关服务等级协议
本服务等级协议(Service Level Agreement,简称 “SLA”)规定了网关向客户提供的 API 网关的服务可用性等级指标及赔偿方案。
20xx年xx月xx日起生效。
1. 定义
服务周期:服务可用性按服务周期统计,一个服务周期为一个自然月,如客户使用不满一个月则以当月使用累计使用时间作为一个服务周期。
有效请求:网关接收到的所有请求,视为有效请求。
失败请求:由于网关原因造成的 API 调用失败,则视为失败请求但不包括以下情况的调用失败:
(1)因用户配置问题导致的 API 调用失败;
(2)客户的应用程序受到黑客攻击或者主动流量攻击而导致被网关限制的请求。
(3)因用户登录态失效导致的 API 调用失败;
当出现网关故障无法通过获得失败请求数时,将通过计算前7个自然日用户每分钟请求数的平均值,用该平均值乘以故障时间,从而计算出该情况下的失败请求数。
每15秒错误率:以15秒为单位按照如下方式计算错误率:
每15秒错误率=每15秒失败请求数/每15秒有效总请求数x100%
月度服务费用:客户在一个自然月中就API网关服务所支付的服务费用总额。以代金券结算不计入月服务费用。
2. 服务可用性
2.1 服务可用性计算方式
网关的服务可用性按服务周期统计,通过计算服务周期内每15秒错误率的平均值,从而计算得出服务可用性,即:
服务可用性=(1-服务周期内Σ每15秒错误率/服务周期内15秒总个数)x1
(注:服务周期内15秒总个数=4 x 60 x 24 x 该服务周期的天数)
2.2 服务可以用性承诺
对于网关,承诺一个服务周期内的服务可用性见下表:
|
服务类型 |
服务可用性 |
|
网关代理服务 |
不低于99.90% |
如网关未达到上述可用性承诺,客户可以根据本协议第3条约定获得赔偿。赔偿范围不包括以下原因所导致的服务不可用:
(1)预先通知用户后进行系统维护所引起的,包括割接、维修、升级和模拟故障演练;
(2)用户的应用程序或数据信息受到黑客攻击而引起的;
(3)用户维护不当或保密不当致使数据、口令、密码等丢失或泄漏所引起的;
(4)不可抗力以及意外事件引起的;
3. 赔偿方案
暂无
SRE中的SLA/SLO/SLI的更多相关文章
- 性能压测中的SLA,你知道吗?
本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...
- 001_深度剖析什么是 SLI、SLO和SLA?
前言 SLO和SLA是大家常见的两个名词:服务等级目标和服务等级协议. 云计算时代,各大云服务提供商都发布有自己服务的SLA条款,比如Amazon的EC2和S3服务都有相应的SLA条款.这些大公司的S ...
- 。SLI,Service Level Indicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性。而 SLO,Service Level Objective,服务等级目标,指的就是我们设定的稳定性目标,比如“几个 9”这样的目标。
.SLI,Service Level Indicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性.而 SLO,Service Level Objective,服务等级目标,指的就是我 ...
- DevOps运动的缘起 将DevOps想象为一种编程语言里面的一个接口,而SRE类实现了这个接口
SRE vs DevOps:是敌是友? - DockOne.io http://www.dockone.io/article/5935 RE vs DevOps:是敌是友? [编者的话]网站可靠 ...
- 如何配置 SLO
前言 无论是对外提供 IaaS PaaS SaaS 的云公司,还是提供信息技术服务的乙方公司,亦或是金融 制造等各行各业的数据中心.运维部门,我们的一个非常重要的合同承诺或考核评估指标就是:SLA(即 ...
- 读SRE Google运维解密有感(一)
前言 这几天打算利用碎片时间读了一下"SRE Google运维解密"这本书,目前读了前几章,感觉收获颇多,结合自己的工作经历和书中的要点,写一些感悟和思考 SRE 有关SRE我就不 ...
- SLA(服务等级协议)
SLA:Service-Level Agreement的缩写,意思是服务等级协议.是关于网络服务供应商和客户间的一份合同,其中定义了服务类型.服务质量和客户付款等术语. 定义SLA:Service-L ...
- SQL Server中的事务日志管理(7/9):处理日志过度增长
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- LoadRunner 11 中Analysis分析
原文:http://www.cnblogs.com/Chilam007/p/6445165.html analysis简介 分析器就是对测试结果数据进行分析的组件,它是LR三大组件之一,保存着大量用来 ...
- LoadRunner服务水平协议SLA
服务水平协议 (或称 SLA)是以插入的事务为设置对象来为负载测试场景定义的具体目标. Analysis 将这些目标与 LoadRunner在运行过程中收集和存储的性能相关数据进行比较,然后确定目标的 ...
随机推荐
- 关于数据传递 json
关于这几种语言的json 操作 Lua local cjson2 = require "cjson" local lua_object = { ["name"] ...
- [Leetcode 701]二叉搜索树BST中插入元素
题目 BST二叉搜索树中插入元素 二叉搜索树:左边<root<右边 https://leetcode.com/problems/insert-into-a-binary-search-tr ...
- C语言 (数据结构)在顺序表中用二分查找和冒泡排序算法
main.c: #include <stdio.h> #include <stdlib.h> #include "SequenceList.h" int m ...
- windows服务器部署mysql
一.Mysql安装教程就不上传了,百度很多的很详细的. 二.配置环境变量:我的电脑右键=>属性=>高级系统设置=>环境变量=>系统变量下找到Path,选中编辑, 变量值后面添加 ...
- Json对象转换模块(自编代码JsonObject.cs)
namespace 信息采集系统.Common { /// <summary> /// Json类型对象,用于其它Json对象继承 /// </summary> /// < ...
- 复制文本到粘贴板 (vue3)(兼容ios)
// 点击复制到剪贴板 const copyToClipboard = (content)=> { if (window.clipboardData) { window.clipboardDat ...
- [Mac技巧] 你真的会使用Mac的“聚焦搜索”吗?
Mac的"聚焦搜索"是对Mac整个磁盘的全局搜索,搜索起来极其便捷,但也常被使用者忽略使用. 以下列出比较常用的几个场景供使用者参考 场景一:文件在哪儿,要立即查看? 1.打开&q ...
- linux使用iperf3测试带宽
1. https://www.alibabacloud.com/help/zh/express-connect/latest/test-the-performance-of-an-express-co ...
- 关于proTable设置列固定,始终没有固定的效果的原因
使用proTable设置操作列固定 const columns: ProColumns<IssueItem>[] = [ { title: '操作', valueType: 'option ...
- 看图就会-react条件渲染的5种方式