在云计算时代,越来越多企业的服务迁移到云上,各大云服务厂商有自己服务发布的SLA,SLA是服务提供商与客户之间定义的正式承诺。
我们使用云服务提供商为我们提供的 APP 或者网站,如果出现购物无法下单、看视频打不开类似的问题,会严重影响用户体验。如果故障持续的时间比较久,那将会流失一大批用户,给业务带来损失。
那么,如何衡量给客户提供的服务质量呢?进而如何衡量系统的稳定性呢?毋庸置疑,需要统一的语言 SLA。
服务等级协议(英语:service-level agreement,缩写SLA),是服务提供商与客户之间定义的正式承诺。SLA的概念,对互联网公司来说就是服务可用性的一个保证。
SLA包括两个要素,一个是 SLI,一个是 SLO。
通常 SLO 通过一串 9 来度量
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秒的停机时间。
SLA 以面向人员的维度区分,可以划分为以下 2 个维度。
在进行性能压测设计阶段,有一个重要的环节是确定“性能压测通过标准”。缺少了这个标准,意味着压测可能是没完没了的。谁都不知道什么时候该结束,结果是影响性能压测效果,浪费人力财力。所以需要通过“性能压测通过标准”中一系列量化下来的指标来确定,压测结果是否符合预期,可以停止了。这个"标准"的来源,可能是来自业务方的期望、研发组对系统的性能期望等等,最终整理汇总下来的我们称为压测中的 SLA。这个 SLA与产品对外的 SLA 有紧密联系,但是又存在区别。联系就是,系统对外的 SLA 是压测中的 SLA 的重要来源,而区别就是,压测中的 SLA 可能会涵盖更多更细的指标,而对外的 SLA 并不关心这么多细节。
在压测中,看似一个简单的业务请求,实则后端是复杂的系统架构,比如统一接入层/容器层/存储层,即使容器层,也涉及到了很多不同应用/不同服务,面对纷繁复杂的架构,如何快速判断压测结果是否满足了业务需求?如何快速判断是否达到了系统的水位不能再往上施压了呢?
一声号令,开始压测!
好了,A开发看A系统,B开发看B系统,C开发看网络层,D测试看压测结果等。
大家手忙脚乱,这个时候,有人在群里一声喊,我的系统扛不住了,停止吧(当然还有一种风险,是不是这位同学的误判呢)。
好的,这个时候压测停止。
当然这种还是比较好的情况,而有些压测场景,就只有一个测试同学,他怎么分工呢?
一会看看压测结果,一会看看A系统,一会看看B系统,忙得不亦乐乎。
这样压测能否达到效果,当然能。但是这样的状态是最好的一种状态吗?当然不是