购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 什么是可用性

1.1.1 SLA与可用性

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

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

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

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

那么,SLA该如何计算呢?

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

可见,提高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是一个比较合理的值。

1.1.2 影响高可用的因素

上一小节主要讲解了可用性以及如何去度量可用性,本小节主要讲解影响高可用的因素是什么,或者说是什么原因导致系统可用性差。导致系统不可用的因素有很多,如表1-1所示。

表1-1 非高可用因素

可以简单地将原因分为两种:外在因素和内在因素。

外在因素即系统以外的因素,比如机房发生火灾、光缆被挖断、地球毁灭等。

内在因素即系统本身的原因,包括系统依赖的资源(数据库、缓存、硬件资源等),比如服务器硬件故障、系统本身故障/Bug、系统依赖的中间件存在问题、数据库/缓存等宕机、发布新应用等,这里以具体实例进行分析。

由此可见,要保证系统完全高可用几乎是不可能的,只能尽力为之。

1.1.3 高可用策略

高可用策略实在太多,随随便便都可以说出几个:冗余备份、限流/熔断/降级、监控等。为了让读者更好地理解这些策略,将高可用策略按照时间维度分为3个阶段:事故前、事故中、事故后(不是很准确,主要是希望把高可用策略串起来),具体如图1-4所示。

图1-4 高可用策略划分

在系统出现异常之前,需要未雨绸缪,例如:

该提前准备的事项都准备了,系统也该上线了,流量慢慢进来,系统有条不紊地运行着。只要上线之前做好充足的测试(功能测试、性能测试、压力测试等),正常情况下,系统是不会出现什么大问题的。我们讲的高可用策略都是针对系统在突发情况下的一些应对措施,对应的策略有:

最后是事后阶段,具体包括:

最后需要注意的是,系统可用性越高,投入成本越大。所以,高可用是费钱的。

1.1.4 高可用和高可靠

可靠性和可用性这两者之间有一定的区别和联系,定义如下:

可靠性、可用性相关的指标如下:

在《分布式系统原理与范型》(第2版)一书中提到的以下例子比较准确地解释了两者的区别:

如果系统每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠,因为它只能无故障运行1小时。与之类似,如果一个系统从来不崩溃,但是每年要停机两个星期,那么它是高度可靠的,但是可用性只有96%。 ELzKwBBa4Do2yMpIX0LyXgG3cta3bijVW18I+BTd0JuC3wUDTyyu3tsAaRY6IV6R

点击中间区域
呼出菜单
上一章
目录
下一章
×