可用性与可靠性

可用性与可靠性是两个很相似但完全不同的概念。理解这两者之间的区别,对于理解本书后续内容至关重要。

在我们的语境中,可靠性一般指一个系统的质量。通常来说,它意味着一个系统能够按照技术标准持续运行的能力。如果一个软件通过了所有的测试套件,并且基本完成了它应该做到的事情,那么我们可以说它是可靠的。

“我的查询返回的响应是正确的吗?”

而我们所提到的可用性,一般指系统在其能力范围内执行任务的能力。系统是否运转正常?是否可以操作?是否可以响应?如果答案是“是”,那么系统就是可用的。

“我收到回复了吗?”

“回复及时吗?”

如你所见,可用性和可靠性非常相似。如果系统不可靠,它也很难是可用的,如果它不可用,也很难是可靠的。

以下是我们对这些术语的正式定义。

可靠性

系统是否具备无差错地执行预期操作的能力。

可用性

为了执行这些操作,系统当前可运行的能力。

一个计算2+3却得到结果6的系统,其可靠性很低。一个计算2+3却永远不返回结果的系统,其可用性很低。可靠性问题通常可以通过测试来修复,而可用性问题通常较难解决。

你会因为在系统中引入了一个bug,导致计算2+3得到了6。这通过测试套件可以很容易发现并修复。

但是,假设你的应用程序可以很可靠地计算2+3=5。现在假设它运行在一个网络连接不好的计算机上,结果如何?有时它可能返回5,有时它可能什么都不返回。这时候,应用程序是可靠的,但它不是可用的。

在本书中,我们主要关注于如何设计高可用的系统架构。我们会假设你的系统是可靠的,假设你知道如何构建和运行测试套件。我们只会在可靠性对系统架构或者可用性造成直接影响时才讨论它。