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

按照书上的定义,

可靠性(reliability):在规格时间间隔内和规定条件下,系统或部件执行所要求功能的能力。
可用性(availability):软件系统在投入使用时可操作和可访问的程度,或能实现其指定系统功能的概率。

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

可用性被定义为系统的一个属性,它说明系统已准备好,马上就可以使用。换句话说,高度可用的系统在任何给定的时刻都能及时地工作。
可靠性是指系统可以无故障地持续运行,是一个持续的状态。与可用性相反,可靠性是根据时间段而不是任何时刻来进行定义的。
如果系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有96%。

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

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

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

平均故障间隔时间(MTBF,Mean Time Between Failure),是指相邻两次故障之间的平均工作>时间,是衡量一个产品的可靠性指标。
平均修复时间(MTTR,Mean Time To Repair),是描述产品由故障状态转为工作状态时修理时间的平均值。在工程学中,MTTR是衡量产品维修性的值,在维护合约里很常见,并以之作为服务收费的准则。GB/T3187-97对可用性的定义:在要求的外部资源得到保证的前提下,产品在规定的条件下和规定的时刻或时间区间内处于可执行规定功能状态的能力。它是产品可靠性、维修性和维修保障性的综合反映。
Availability = MTBF / (MTBF + MTTR)
从这里也可以看出,可靠性强调的是一个持续状态。


这是一篇转载文章,原文链接
参考资料:1.分布式可用性和可靠性区别 2.如何理解“可靠性”和“可用性”?