48

你的系统可用性 5 个 9 了吗?

 3 years ago
source link: https://mp.weixin.qq.com/s/sj5Gwqup3zo3-2BxyIi5rg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

IVvmmmz.png!mobile

又是一年放榜日,众多考生满怀期待的点开招生网,结果输了信息才发现根本没办法查询——查询人数太多了,直接把系统打挂了!这个时候,还没翻身的码农闰土被问到一个直击心灵的问题:这个系统可用性达到了多少个 9?想要回答这个问题,我们得先有些前置知识。

可用性&可靠性

这两个词很相似,我也一直找不到一个很好的定义区分这两个词,直到后来在看分布式系统的时候,看到了一个解释:

可用性被定义为系统的一个 属性 ,它说明系统已准备好,马上就可以使用。换句话说,高度可用的系统在任何给定的时刻都能及时地工作。可靠性是指系统可以无故障地持续运行,是一个 持续的状态 。与可用性相反,可靠性是根据时间段而不是任何时刻来进行定义的。

Y3A3UzZ.png!mobile

举个例子,想要评估一个舔 :dog:,可用性就是你找他的时候能不能找到,而可靠性就是你需要花钱的时候他出手大不大方。一个舔 :dog: 如果随叫随到,但是花钱太抠,就是高可用、低可靠;而如果他经常找不到人,但出手很大方,就是低可用、高可靠。类比到系统时,如果系统在每小时崩溃 1ms,那么它的可用性就超过 99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有 96%。

zaUjquj.png!mobile

百度百科对于系统可靠性的解释是:系统可靠性一般是指在规定的时间内和规定的工况下,系统完成规定功能的能力/概率。也就是系统的无故障运行概率。而在我们在评估一个系统的可用性和可靠性时,一般都会说三个 9,四个 9 之类的。这些一般都是说系统的 SLA(Service Level Agreement) 具体是几个「9」,以此,来表示该系统一年中具体宕机的时间。对于这几个 9 的解释,我会放到第三节来详细解释。不过,在实际交流过程中,大多数人对这两个词的理解还是差不多的。况且咬文嚼字也并非本文的主题,接下来我们来看看可用性的计算方式。

可用性计算

通常我们用 A 表示一个系统的可用性,用以下几个指标来辅助计算

相关指标

MTBF

MTBF,即平均故障间隔时间,英文全称是“Mean Time Between Failure”。是衡量一个产品(尤其是电器产品)的可靠性指标。单位为“小时”。具体来说,是指相邻两次故障之间的平均工作时间,也称为平均故障间隔。

MTTR

MTTR,全称是 Mean Time To Repair,即平均修复时间。是指可修复产品的平均修复时间,就是从出现故障到修复中间的这段时间。MTTR 越短表示易恢复性越好。

neQ7fq.png!mobile

通过上述公式计算出单个组件的可用性后,我们便可以以此计算出整个系统的可用性,而系统可用性是通过将系统建模为串联和并联的组件来计算的。以下规则用于确定系统是串联的还是并联的:

如果组件的失效导致组合变得不可操作,则认为这两个部件是串联操作的 如果组件的故障导致另一部件接管故障部件的操作,则认为这两部件并行操作

串行可用性

如上图所示,两个组件 X 和 Y,如果有一个出问题导致整个组合都不可用,就认为 X 和 Y 这两个组件是串联的。只有组件 X 和组件 Y 同时可用时,整个组合才可用。由此可见,组合的可用性是这两部分的乘积,公式如下:A = Ax Ay 从上面的等式我们看出,串联系统中,整体组合的可用性,总是低于单个组件的可用性。对于上面 X 和 Y 两个串联组件,可用性如下:

JRjae2.jpg!mobile

从上面的表中,我们看到,即使使用了非常高可用性的组件 Y,但组合系统仍然受组件 X 的影响,会降低好多,和「木桶原理」一致,都受最短板的影响。

并行可用性

qqaa2uI.jpg!mobile

如上图所示,如果两个组件都失败时,整个系统会失败的话,这两个组件会被认为是并行的。任一组件可用时,整个系统都是可用的。整体可用性是 1- (两个组件都不可用),公式如下:A = 1-(1-Ax )2 从上面我们能看出,两个组件并行的系统,整体可用性要任一单独的组件可用性高。如上图假设是组件 X 的两个部分,可用性如下:

BniAfyz.jpg!mobile

我们看到,即使一个可用性低的组件 X,组合后的系统可用性也很高。

X 个 9

说完了可用性的计算后,总算是回到本文的重点了,有个衡量其可靠性的标准——X 个 9,X 个 9 表示在系统 1 年时间的使用过程中,系统可以正常使用时间与总时间(1 年)之比,我们通过下面的计算来感受下 X 个 9 在不同级别的可靠性差异。

3 个 9:(1-99.9%) × 365 × 24=8.76 小时,表示该系统在连续运行 1 年时间里最多可能的业务中断时间是 8.76 小时。 4 个 9:(1-99.99%) × 365 × 24=0.876 小时=52.6 分钟,表示该系统在连续运行 1 年时间里最多可能的业务中断时间是 52.6 分钟。 5 个 9:(1-99.999%) × 365 × 24 × 60=5.26 分钟,表示该系统在连续运行 1 年时间里最多可能的业务中断时间是 5.26 分钟。

那么 X 个 9 里的 X 只代表数字 3 5,为什么没有 1 2,也没有大于 6 的呢?我们接着往下计算:

1 个 9:(1-90%) × 365=36.5 天 2 个 9:(1-99%) × 365=3.65 天 6 个 9:(1-99.9999%) × 365 × 24 × 60 × 60=31 秒

可以看到 1 个 9 和、2 个 9 分别表示一年时间内业务可能中断的时间是 36.5 天、3.65 天,这种级别的可靠性或许还不配使用“可靠性”这个词;而 6 个 9 则表示一年内业务中断时间最多是 31 秒,那么这个级别的可靠性并非实现不了,而是要做到从“5 个 9” 到“6 个 9”的可靠性提升的话,后者需要付出比前者几倍的成本。

可用性 A X 个 9 停机时间(分钟) 适用产品 0.999 3 个 9 500 电脑或服务器 0.9999 4 个 9 50 企业级设备 0.99999 5 个 9 5 一般电信级设备 0.999999 6 个 9 0.5 更高要求电信级设备

怎么做到更多的 9?

每个公司对几个 9 的定义都不一样,好多的互联网公司要求都是 99.99。像一些事业单位网站,办事网站等,经常故障服务不可用,估计最高也就到 99.9。而我们经常用到所谓 4 个 9 或者 5 个 9,也就是 99.99%与 99.999%。虽然这两者的差距是 0.009%,还不到 0.01%。但对于系统而言,恰恰是这不到 0.01%的差距,决定了系统完全不在一个档次上。我们知道一个系统的可靠性并不完全取决于硬件,而由软件和硬件共同来决定,如果是软件问题,就需要监控自己的服务,在服务出现异常或者宕机的时候,能及时恢复。增加冗余,防止出现问题。但是要提高系统的可靠性,除软件外,还有硬件的部分,包括网络、服务器以及存储设备等。其中,网络可以借助多运营商接入来解决,存储有 RAID、快照等应对技术,通过备份来提高数据安全性。对于服务器来说,我们可以选择集群的方式保证高可用。

7NJJBvz.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK