1.1 什么是可用性

1.1.1 SLA与可用性

当我们谈到高可用(High Availability,HA)时,都会聊到可用性。那么,什么是可用性?如何来定义可用性呢?我们知道,任何东西都有不可用的时候,比如,再好的汽车(兰博基尼、法拉利、特斯拉等)都会有抛锚或者刹车失灵的时候;身体特别健康的人,也难免会感冒生病;即使是地球,也会有毁灭消失的一天;更何况是服务器/线上应用,除非把服务器搬到火星去,搬离太阳系。可见,我们没办法做到东西的100%可用性,只能做到高可用(<100%),越高的可用性,付出的代价越高。要防止汽车爆胎,车上可放置备胎,要防止多个车轮同时发生爆胎,需要准备多个备胎;要保证人一直保持健康,需要加强锻炼,养成良好的生活习惯,还要定期体检等。记住一句话:高可用必定带来高成本、高付出。

我们如何来量化服务/系统的高可用呢?“高”字不具体,甚至有些模糊。所以,就有了SLA(Service-Level Agreement,服务级别协议,也称服务等级协议、服务水平协议)的概念。SLA是服务提供商与客户之间定义的正式承诺。服务提供商与受服务用户之间具体达成了承诺的服务指标——质量、可用性、责任。SLA常见的组成部分是以合同约定向客户提供的服务,感兴趣的读者可以自行学习。

概念总是抽象的,我们举一个具体的例子来说明。相信很多人都购买过云产品(阿里云、腾讯云、华为云等),比如阿里云的ECS服务器,在ECS服务器相关的文档中,可以找到云服务器服务等级协议等内容,这是阿里云服务提供商与客户定义的正式承诺,具体如图1-1所示。

图1-1 阿里云服务等级协议

那么,SLA该如何计算呢?

● 通俗的定义:SLA =可用时长/(可用时长+不可用时长)。

● 不通俗的定义:SLA =f(MTBF,MTTR)。

这里我们又引入了两个概念:MTBF(Mean Time Between Failures,平均故障间隔)和MTTR(Mean Time To Repair or Mean Time To Recovery,平均修复时间)。

● MTBF:平均故障间隔,通俗一点就是一个东西多长时间坏一次。

● MTTR:平均修复时间,意思是一旦东西坏了,需要多长时间去修复或者恢复它。

可见,提高SLA只有两个方法:一是提高系统的可用时长,二是降低系统的不可用时长。或者说,提高MTBF,降低MTTR。

SLA又可以分为年SLA、季度SLA、月SLA及周SLA等,说实话,年SLA除了客户赔款外,本身没有太大的实际意义,在项目中我们更加看中季度SLA、月SLA甚至周SLA。图1-2是分别计算不同的SLA在不同的时间周期所允许的宕机时间。

图1-2 SLA计算表格

比如3个9,即99.9%,按照年统计,一年只能有0.01%的时间出现故障,即3.65天;按照月统计,一个月有30×24 = 720小时,一个月只能有0.01%的时间出现故障,即7.20小时。

读者可能会问,系统的SLA阈值设置为多少合适呢?

我们可以回过头来看看阿里云定义的SLA协议,具体如图1-3所示。

图1-3 阿里云ECS赔偿方案

从图1-3中可以看出,如果服务可用性低于99.975%,阿里云就要向客户提供具体的代金劵金额赔偿,可见系统的SLA要达到4个9是非常难的。因此,系统的SLA阈值设置为4个9是一个比较合理的值。