1 什么是SLA

SLA是Service-Level Agreement的缩写,也就是服务等级协议,指的是系统服务提供者(Provider)对客户(Customer)的一个服务承诺,也可以理解为服务提供者和客户之间签订的协议或者合约,是具有法律效力的,不能随便承诺。同时SLA也是衡量一个系统是否健康的常见方法。
这里可以看下阿里云服务器的服务等级协议:云服务器(ECS)服务等级协议(SLA)。

2 SLA常见衡量指标

SLA本身是一种承诺,所以指标也是多种多样的,常见的四个SLA指标:可用性、准确性、系统容量和延迟。

2.1可用性

可用性计算公式:可用性=可用时长/(可用时长+不可用时长);下面以看一组数据,对可用性有一些直观认识
● 可用性为99.9%,全年(365天)不可用累计时长为526分钟
● 可用性为99.99%,全年(365天)不可用累计时长为52.6分钟
● 可用性为99.999%,全年(365天)不可用累计时长为5.26分钟
我们看下阿里云的ECS服务可用性:
(1)对于单实例维度, 阿里云承诺一个服务周期内ECS的服务可用性不低于99.975%;
(2)对于单地域多可用区维度,阿里云承诺一个服务周期内ECS的服务可用性不低于99.995%
可用性不确定性因素比较多,比如硬件故障,软件故障,自然灾害等等这些因素都会影响系统可用性。对于许多系统而言,四个 9 的可用性(99.99% Availability,或每年约 50多分钟的系统中断时间)即可以被认为是高可用性(High availability)。

2.2 准确性

准确性指的是我们所设计系统服务中,是否允许某些数据不准确或者是丢失的。如果允许这样的错误发生,用户可以接受的概率是多少?该怎么衡量,不同系统或平可能会不同的指标去定义准确性。很多时候会以错误率(Error Rate)来定义这一项SLA。
错误率=系统内部产生错误的有效数量/期间有效的请求数量,这里系统内部产生错误比如空指针、超时异常等非业务错误。
例如Google Cloud Platform 的 SLA 中,有着这样的准确性定义:每个月系统的错误率超过 5% 的时间要少于 0.1%,以每分钟为单位来计算。而亚马逊 AWS 云计算平台有着稍微不一样的准确性定义:以每 5 分钟为单位,错误率不会超过 0.1%。
通常我们可以采用性能测试或者查看系统日志两种方法来评估。

2.3 系统容量

定义:在数据处理中,系统容量通常指的是系统能够支持的预期负载的数量是多少,一般会以每秒的请求数为单位来表示。常见有某系统可用处理 QPS (Queries Per Second)或者RPS(Requests Per Second)是多少或者TPS(Transaction Per Second)是多少。
例如 Twitter 发布的一项数据,Twitter 系统可以响应 30 万的 QPS 来读取 Twitter Timelines。这里 Twitter 系统给出的就是他们对于系统容量(Capacity)的 SLA。

如何给出自己系统定义出准确的容量呢?系统交付的时候做性能测试,摸清系统水位,配置好系统限流。

2.4 延迟

定义:延迟指的是系统在收到用户请求响应这个请求的之间的时间间隔。在定义延迟SLA时候,常常看到系统的SLA会有p95或者p99这样的延迟声明,这里的p指的的是percentile。例如一个系统p95的延迟是1秒的话,那就表示在100请求里面有95个请求的响应时间会少于1秒,剩下的5个请求大于1秒。
延迟这项对系统来说还是非常重要的,试想一下你打开一个网页或者app,几秒钟打不开,你肯定会选择离开,同时会抱怨这个产品的用户体验非常差。
降低系统延迟手段也多种多样,要具体问题具体分析,比如可以用户引入缓存、优化数据库索引、数据库拆分、多线程并行执行等

1