又到一年的11.11大促日,最近很多团队邮件上下游确认SLA,你是不是还没搞明白服务质量SLA、SLO等概念?本文通过理论知识以及基于SLO告警治理的实践经验分享。详细介绍如何设置SLO、有效的告警泛滥治理、以及如何根据SLO的指标来优化服务性能和可靠性。
问题(1)
问题(2)
问题(3)
比如我在XXX云购买了100台云主机,在10:00-10:05这5分钟内,有10台机器出现故障,导致API的对外可用率只有90%(在这5分钟内,总请求数为1万,失败的请求数为1000)。如果一个月30天,每天发生一次这样的5分钟,那么这可用率到底是多少呢?
带着以上的这些问题,研究了服务质量的指标:SLI(服务水平指标)、SLO(服务水平目标)和SLA(服务等级协议)。如果你也对上面的问题感兴趣,并且想找到答案,欢迎阅读本文,以下是我的研究成果,供大家参考,如果有不对的地方,还请大家指正。
常见的SLI包括:
1.可用率(成功响应的请求比例)
2.请求延迟的99%(TP99请求处理耗时)
3.吞吐量(每秒请求量)
4.持久性(数据能够保存的完整时间,常用于数据存储系统)
2)服务质量目标SLO(Service Level Objective)
定义:服务的某个SLI的目标值或者目标范围。
SLO的定义是SLI《目标值,或者 范围下限《SLI《范围上限。
设置服务水平目标(SLO)的好处主要体现在以下几个方面:
1.对于客户端而言,SLO提供了一种可预期的服务质量,这使得客户端的系统设计可以更加简单和稳定。客户可以根据SLO来规划和调整自己的业务流程,减少不确定性带来的影响。
2.对于服务提供者而言,SLO带来的好处包括:
可预期的服务质量:SLO可以帮助服务提供者明确服务质量的标准和目标,从而更好地管理和优化服务。
更好的成本/收益取舍:通过设定合理的SLO,服务提供者可以在资源投入和服务质量之间找到一个平衡点,实现更有效的资源利用和成本控制。
更好的风险控制:当资源受限或出现故障时,SLO可以帮助服务提供者更好地控制风险,避免服务质量下降对业务造成的影响。
故障时更快的反应和采取正确措施:SLO可以作为一个参考标准,帮助服务提供者在故障发生时更快地发现问题并采取正确的措施,减少故障恢复时间。
3)服务质量协议SLA(Service Level Agreement)
定义:指服务和用户之间的一个明确的,或者不明确的协议。描述了在达到或者没有达到SLO之后的后果。这些后果可以是财务的(赔偿)或者其他的。
区别SLO和SLA的一个简单方法是问:“如果SLO没有达到时,有什么后果?”,如果没有定义明确的后果。那么我们肯定是在讨论一个SLO,而不是SLA。
Google搜索服务是没有公开SLA的一个典型服务。
详见第三章节
二、SLO实践案例
我们可以SLO实践案例来指导我们的稳定性建设。
分级规则
1、根据业务影响,应用分为0-3级
2、应用里面的接口再次细分0/1级,因为很多历史原因,很多0/1级系统内部N个接口,但M个接口是非核心的。或者2级应用里面有N个0级接口。关注核心接口的健壮性(是否可用率治理完成,是否可降级,是否配置合理的限流值)
分级用途
•基于服务等级,要求核心服务遵守对应标准(比如代码评审,上线发布,变更流程,大促管控)。
•报警基于服务等级来做分级
•不同等级稳定性要求SLO不一样,如具备熔断降级能力等。
注意事项
1、全链路应用定级不统一:比如整个链路既有0级应用,也有1级别应用,还会存在很多3级应用
解决方案:推动下游更新应用等级
如下图,通过工具扫描0/1级依赖的下游等级应用是3级,
2、接口定级不统一:比如某个历史接口,A部门从自身角度出发认为接口不重要,但上游,上游强依赖,有时候出现线上故障后才知道该接口的重要性
解决方案:需要链路追踪,从用户视角(用户购物、物流一线操作业务)看影响,但这个有时候挺难的,尤其是历史接口,链路太长
3、接口可用率不准确:比如内部异常被catch吃掉了,没有反应到接口最外层,比如服务故障了半个小时,但ump可用率还是100%
解决方案:进行代码可用率治理,让API可用率是真实的。
选择能代表业务核心功能的API,按上面的业务分级模型对这些API定级,一般只度量L0、L1等级的业务和其接口。那么应该定义哪些指标?为什么定义这些指标?这些指标是服务最重要吗?
比如UMP打点监控指标有:
这些监控指标我们都需要作为SLI吗?答案肯定不是。只有理解用户对系统的真实需求才能真正决定哪些指标是否有用。指标太多会影响重要的指标,指标太少又会导致重要的行为被忽略。一般来说,3-5个具有代表性的指标对系统健康度的评估和关注足够了。
根据常见的服务SLI分为如下几类
我们应该从用户最关心的方面入手,而不是目前可以监控度量什么着手(当然目前UMP监控度量的维度已经很多,部分指标可作为SLI)。制定适当的SLO的第一步是讨论SLO应该是什么以及应该涵盖什么。SLO为服务的客户设置了目标可靠性级别。
为了更清晰的定义,SLO应该具体支持他们是如何被度量的,以及其有效条件。例如:99%(在1分钟时间范围内的请求汇总)的JSF-API调用会在200ms内完成(包括全部后端服务器)
选择目标SLO策略建议
1.不要追求完美:不要以当前的运行状态为基础选择目标,而应该从全局触发,刚开始可以制定一个宽松的目标(前提满足用户),逐步收紧。比如目前API的TP99是8ms,对外SLO的TP99是10ms,如果后期接口内部逻辑改造,需求变更等导致API的tp99是20ms,则不满足SLO。
2.留出一定的安全区:对内使用更高的SLO,对外使用稍低的SLO。这样可以留出一些空间来响应需求等。缓冲区buffer可以保护我们不会对用户产生直接影响。
您第一次尝试SLI和SLO不一定正确。最重要的目标是进行适当的测量并建立反馈环路,以便您进行改进。随着SLA的变更,系统架构不断的迭代演变(比如之前SLA的TP99是1000ms,你采用mysql架构存储数据,后面变成面向20ms,这时候的mysql架构就不适合了,需要演变为比如redis缓存等形式)
研发需要和业务产品同事综合考虑,目前内部通过邮件达成协议。外部云厂商则通过合同达成协议(保护未达到SLO的补偿条款)
对本章节内容不感兴趣的,可跳过
2)京东云主机服务等级协议(SLA)
3)阿里云服务器 ECS服务等级协议
4)AWS&Google云产品服务协议
四、API 网关服务等级协议
下面分别介绍不同厂商的API网关服务的可用率定义
2)阿里云API 网关服务等级协议(SLA)
3)亚马逊云API网关服务SLA
五、基于SLO告警治理实践
SLO是可靠性决策的关键因素。应用每天都有无数的报警通知,如CPU、内存、磁盘、可用率、MAX,tp99,tp999等,产生了大量噪音。但哪些报警会影响到可用性,需要SRE和研发关注呢?这就是SLO的核心价值之一了。
告警设定的目标:根据SLO对重要的事件做出可操作性的告警。
告警设定的依据:基于服务质量指标(SLI)和错误预算,对每一个消耗大量错误预算的事件发出重大事件的告警通知。
参考上面设定的SLO配置的报警信息如下:
•通过UMP实现3个黄金监控指标(可用率、调用量、TP99)
在配置报警机制时,我们可以综合考虑可用率、TP99以及调用量等因素来进行评估。通过这些指标的综合评估,可以帮助我们更全面地了解系统运行情况,从而及时发现潜在的问题并采取相应的措施。
建议在进行报警配置时,可先采取较为严格的策略,即先紧后松,逐步调整到最佳状态。这样可以确保在最开始阶段就能够及时发现问题,避免出现重大故障。但随着系统的逐渐稳定,我们也可以根据实际情况适当放宽报警阈值,以提高系统的可用性和效率。
需要注意的是,在进行报警配置时,我们需要结合具体的业务场景和系统特点来进行调整和优化。不同的系统可能存在不同的风险点和瓶颈,因此我们需要根据实际情况来制定相应的报警策略,以保证系统的稳定性和可靠性。
比如SLO:分钟级TP99是200ms,但你日常TP99在80ms,根据日常接口的行为,电话critical报警一定得配置<=200ms,warning可配100ms或者150ms等不断调整到最佳状态
critical告警方式:咚咚、邮件、即时消息(京ME)、语音 可用率:(分钟级)可用率 < 99.95% 连续 3 次超过阈值则报警,且在 3 分钟内报一次警。性能:(分钟级)TP99 >= 200.0ms 连续 3 次超过阈值则报警,且在 3 分钟内只报一次警。
warning告警方式:咚咚、邮件、即时消息 可用率:(分钟级)可用率 < 99.99% 连续 3 次超过阈值则报警,且在 30 分钟内报一次警。性能:(分钟级)TP99 >= 100.ms 连续 3 次超过阈值则报警,且在 30 分钟内只报一次警。调用次数:当方法调用次数在 1 分钟的总和,连续 3 次大于 2000000 则报警,且在 3 分钟内只报一次警
需要根据MQ延迟(数据从生产到消费需要多少时间)配置对应告警和应急预案
相关文献
2、国家标准全文公开系统《信息技术 云计算 云服务级别协议基本要求》
3、京东云服务协议:
https://docs.jdcloud.com/cn/product-service-agreement/cloud-hosting-service-terms
4、AWS:什么是 SLA(服务等级协议)
https://aws.amazon.com/cn/what-is/service-level-agreement/
5、GoogleCloud:
ComputeEngineServiceLevelAgreement(SLA) https://cloud.google.com/compute/sla
6、阿里巴巴服务等级协议:
https://help.aliyun.com/document_detail/56773.html
7、华为云服务等级协议:
https://www.huaweicloud.com/declaration/sla.html
8、腾讯云服务等级协议:
https://cloud.tencent.com/document/product/301/103169
Amazon_API_Gateway_SLA:https://d1.awsstatic.com/legal/amazon-api-gateway-sla/Amazon_API_Gateway_SLA_2022-05-05-ZH_CN.pdf
京东云API网关服务等级协议(SLA):https://docs.jdcloud.com/cn/product-service-agreement/api-gateway-level-agreements-sla
阿里云API网关服务等级协议(SLA):https://terms.alicdn.com/legal-agreement/terms/b_end_product_protocol/20230914095615293/20230914095615293.html
扫一扫,加入技术交流群