天天看点

(转)区分可用性和可靠性

首先,这两个属性都是质量(可维护性)的一部分。

按照书上的定义,

可靠性(reliability):在规格时间间隔内和规定条件下,系统或部件执行所要求功能的能力。例如:

QA1:在客户端与服务器端通信时,如果网络故障,系统不能出现故障。

可用性(availability):软件系统在投入使用时可操作和可访问的程度,或能实现其指定系统功能的概率。例如:

QA2:系统的可用性要达到98%。

实话说我一直想吐槽这个定义,说得未免太模糊了一点。尤其是可用性的定义,用术语解释术语可太秀了。后来在看分布式系统的时候,看到了一个解释:

可用性被定义为系统的一个属性,它说明系统已准备好,马上就可以使用。换句话说,高度可用的系统在任何给定的时刻都能及时地工作。

可靠性是指系统可以无故障地持续运行,是一个持续的状态。与可用性相反,可靠性是根据时间段而不是任何时刻来进行定义的。

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

我觉得这个解释说得很好。可靠性是一个持续性的状态,更多地强调系统自身;而可用性是一个短暂的状态,更多地强调外部的触发。就好比一个人,你找他的时候能不能找到,这是可用性;而他干活靠不靠谱,则是可靠性。一个人如果随叫随到,但是时不时偷懒,就是高可用、低可靠;而如果他经常找不到人,但干活很负责,就是低可用、高可靠。其实就是上面说的那个例子了。

再回到书上的例子去。为什么“网络故障,系统不能出现故障”是可靠性?其实也是比较显然的。这是一个持续的过程。网络故障的时候,系统不出现故障,维持了正常运行状态,正是高可靠的表现;而且,系统不受外界影响,体现出内在的稳定性,也是可靠性的隐藏要求吧。

从某种程度上,可用性包括了可靠性。如果不可用,根本谈不上可靠。有一个定义:

继续阅读