当前位置: 首页 > 科技观察

SRE的SLI-SLO设置详解

时间:2023-03-12 20:26:32 科技观察

1。什么是SLI/SLOSLI?SLO,全称ServiceLevelObjective,是ServiceLevelObjective的缩写,是我们设定的稳定性目标。一句话:SLI就是我们要监控的指标,SLO就是这个指标对应的目标。如何选择SLI在系统中,常见的指标有很多,比如:系统层面:CPU使用率、内存使用率、磁盘使用率等应用服务器层面:端口存活状态、JVM状态等应用运行层面:状态码、延迟、QPS、TPS、连接数等PASS级别:mysql、redis、kafka、mq、分布式文件存储等组件的QPS、TPS、延迟等。指标那么多,我们应该如何选择呢?只要遵循两个原则:选择一个可以识别一个主题是否稳定的指标。如果它不是主体本身的指标,或者不能识别主体的稳定性,则必须排除。优先考虑与用户体验强相关或用户能够清晰感知的指标。我们可以直接套用Google的方法:VALET。VALET是Volume、Availability、Latency、Error和Ticket5个词的首字母。这5个词就是我们为SLI指标选择的5个维度。容量(流量)常被称为QPS、TPS等,下图是性能测试的拐点模型。从图中可以发现,当并发数处于轻压力区时,响应时间稳定,吞吐量与并发数呈线性关系。但是,当并发用户数处于重压区时,系统资源利用率达到极限,吞吐量开始下降,响应时间也会略有增加。此时,如果增加系统压力,系统将进入拐点区,处于过载状态,吞吐量下降,响应时间显着增加。因此,我们在评估系统性能时,通常需要进行压力测试。目的是找到系统的“拐点”,从而知道系统的承载能力,同时也找到系统的瓶颈,不断优化系统性能。可用性可用性是一个抽象的概念,你需要知道如何衡量它,相关的概念有:MTBF和MTTR。MTBF(MeanTimeBetweenFailure)意为平均故障间隔,表示两次故障之间的间隔时间,即系统正常运行的平均时间。时间越长,系统稳定性越高。MTTR(MeanTimeToRepair)是指平均故障恢复时间,也可以理解为平均故障时间。该值越小,故障对用户的影响越小。可用性与MTBF和MTTR的值密切相关。我们可以用下面的公式来表达它们之间的关系:Availability=MTBF/(MTBF+MTTR)Latency是指响应是否足够快,会直接影响用户的访问体验指标。但是这也会对系统资源产生影响。区分成功和失败的请求在这里很重要。一个复杂的高并发系统通常由很多系统模块组成,也依赖很多组件和服务,比如缓存组件、队列服务等。他们之间的调用最怕的是延迟而不是失败,因为HTTP500错误通常是瞬间发生的,可以通过重试来解决。如果调用某个模块或服务有比较大的延迟,调用者会阻塞在这个调用上,已经占用的资源不会被释放。当有大量这样的阻塞请求时,调用方会因资源耗尽而挂断。考虑HTTP500回复的延迟可能会产生误导性的结果。因此,监控错误恢复的延迟很重要。Error的错误率是多少?除了5xx,我们这里也可以包括4xx,因为我们的服务可用性是好的,但是从业务和体验的角度来说,4xx太多了,用户是无法接受的。有时也有隐含的失败。比如http200recovery包含错误的内容,或者策略导致的失败。比如我们要求超过一秒的请求返回失败,超过一秒的请求都是失败的请求。当协议内部的错误代码不能表达所有的故障情况时,可以利用内部协议等其他信息来跟踪某些特定的故障情况。Ticket是否需要人工干预?如果一项工作或任务需要人工干预,那么它一定是低效的或有问题的。举一个常见的场景,数据任务运行失败,但无法自动恢复。这时候需要人工干预才能恢复;或者如果超时,也需要人工干预,中断任务,重启,开始运行。Tickets的SLO可以想象成它的中文意思:门票。一个周期内,票数是固定的,比如每月20张票,每次人工干预,消耗一张票。如果耗尽,需要人工干预,则不达标。好了,说完VALET,SLI指标怎么选,一下子就知道了。可以说这是一个我们可以直接复用的工具。SLO计算我们可以将多个SLO的百分比相乘得到最终的SLO值。SLO1:99.95%状态码成功率SLO2:90%Latency<=80msSLO3:99%Latency<=200ms直接用公式表示:Availability=SLO1&SLO2&SLO32。案例:本案例出自《SRE工作手册》英文版第三章。以下是TheHomeDepot(THD)如何使用VALET在其SRE转换中定义SLO:HomeDepot创建了另一个VALET应用程序来存储和报告SLO数据。由于SLO最好用作趋势工具,因此该服务每天、每周和每月跟踪SLO。请注意,MySLO是一个趋势分析工具,可用于错误预算,但不直接连接到监控系统。相反,HomeDepot仍然拥有各种不同的监控平台,每个平台都有自己的警报。这些监控系统每天汇总其SLO并发布到VALET服务以进行趋势分析。此设置的缺点是监控系统中设置的警报阈值未与SLO集成。但是,监控系统可以根据需要灵活改变。TPSReporting是第一个集成VALET服务的系统,目前家得宝的VALET已经集成了其各种原生应用平台(超过一半的服务注册了VALET)。VALET仪表板上面显示的VALET仪表板用于可视化和报告此数据,并且相对简单。它允许用户:注册新服务。这通常意味着将一项服务分配给一个或多个可能收集了VALET数据的URL。为五个VALET类别中的任何一个类别设置SLO目标。在每个VALET类别下添加新的指标类型。例如,一项服务可以跟踪P99的延迟,而另一项服务可以跟踪P90(或两者)的延迟。后端处理系统可以跟踪每日交易量(一天内创建的采购订单),而客户服务前端可以跟踪每秒的峰值交易量。VALET仪表板使用户能够同时报告许多服务的SLO,并以多种方式对数据进行切片和切块。例如,团队可以查看过去一周未达到其SLO的所有服务的统计信息。希望查看服务性能的团队可以看到所有服务的延迟以及它们所依赖的服务。VALETDashboard将数据存储在一个简单的CloudSQL数据库中,开发人员使用流行的BI工具来构建报告。这些报告成为开发人员新的最佳实践的基础:定期(通常每周或每月)对其服务的SLO审查。基于这些审查,开发人员可以创建操作项以将服务返回到其SLO,或者他们可以决定需要调整不切实际的SLO。将VALET应用于批处理应用程序在围绕SLO开发可靠的报告时,家得宝还发现它可以用于批处理应用程序,只需对VALET进行微调,如下所示:容量:处理的记录量可用性:在内完成工作的频率一定的时间(百分比)延迟:作业运行所花费的时间错误:无法处理的记录工单:操作员必须手动修复数据并重新处理作业和SLO设置标准示例的次数,内容很直观,需要仔细研究以上内容。请尽量按照上述格式为您负责的系统制定SLO。本文转载自微信公众号《运维开发故事》,可通过以下二维码关注。转载本文请联系运维开发故事公众号。