什么是高可用

高可用性是互联网系统的一个基本要求,但什么是可用性?简单来说,可用性是系统可用时间的占比,通常用一年中可用时间与总时间的比例来表示。一个系统的可用性越高,就说明这个系统越稳定。

如果一个系统一直都处于可用状态,那这个系统就有较高的可用性(这不废话嘛)。举个例子:如果一个系统一年中不可用的时间不超过5分钟,那这个系统的可用性就是99.999%,简称5个9。

这5个9是如何算出来的呢?我们知道,一年大概525900分钟左右,5分钟占比大约0.001%左右,因此可用性就是1-0.001%=99.999%。

有的同学这里会有疑问:这里做数学计算时,为什么要通过不可用时间来倒推可用性,而不是直接用可用时间除以总时间呢?那是因为在我们实际的工程中,通常统计到的都是不可用时间。如果你接触了实际生产环境的监控,应该就很好理解了。我们的报警系统,触发来源通常都是一些异常场景,比如物理资源耗尽、网络异常等导致系统不可用,而当这些异常消失的时候,报警也随之解除了。因此,统计系统不可用的这段时长,是很简单的事情,直接累加就好了。

但有时候,我们很难严格区分系统是否可用。比如说,一个接口,正常情况下耗时2ms,但由于网络波动,这个接口耗时增加到20S了,那这个接口应该算可用还是不可用呢?针对这个问题,有人提出了响应时间比例的概念:如果一个系统正常运行,且大部分响应时间都不超过一个阈值值,就认为这个系统是可用的。比如说,如果一个系统正常运行,且5分钟内99.9%的响应时间都不超过5ms,则认为这个系统是可用的。

影响可用性的因素

我们应该如何提高系统的可用性呢?有的同学张口就来:让系统运行更稳定一点。但问题是,如何让系统运行更稳定呢?另外,我们手上有大量的方法来提高系统稳定性,但应该从哪个方面入手呢?如果我们有一个数学模型来表示系统可用性,我们就能更好的分析了。

一种思路是,根据系统的平均故障时间(MTBF, mean time before failure)和平均故障恢复时间(MTTR, mean time to recovery)来描系统可用性模型:


A(MTBR,MTTF) = MTBF / (MTBF + MTTR)

此时,要提高系统可用性,就有了两个方向:提高MTBF、降低MTTR。如果MTBF趋于无穷大,则系统可用性趋于1;如果MTTR趋于0,则系统可用性趋于0。

用一个图片来描述,更直观:

zabbix jmx 可用性未知_系统稳定性

更进一步,我们还可以将MTTR再拆分为两部分:平均故障检测时间(MTTD, mean time to detect)和实际的恢复时间。这也为我们的可用性优化工作提供了思路。

多多益善?

系统的可用性是否越高越好呢?显然不是,至少在互联网行业,大多数业务并不需要这么高的可用性。对可用性的追求,必然导致大量的资源投入,也会导致研发效率的降低。

那么多高的可用性才最合适呢?这显然已经不再是一个单纯的技术问题了。

参考:https://orangematter.solarwinds.com/2015/12/21/the-factors-that-impact-availability-visualized/