Achieving Availability

我们已经讨论了许多关于分布式系统的谬论以及定义了许多能够导致错误发生的东西。在现实世界中,节点并不总是活跃或能够相互进行通信的。然而,断续的故障不应该对 Availability 可用性产生影响:从用户的角度看,整个系统应该像没发生任何事一般正常的工作。

系统的可用性是极其重要的一个属性:在软件工程中,我们一直在追求高可用性,跟试图去最小化宕机的时间。研发团队会吹嘘他们运行的指标,我们如此重视可用性的原因在于:软件已经成为了我们整个社会的一部分,许多重要的事情都无法脱离于他:银行的事务、社交通信、旅游等等。

对于企业来讲,缺乏可用性意味着可能会丢失用户跟金钱:如果服务宕机了那你就无法在线上购物,如果银行网站失去响应,那你就无法进行转账。

为了让系统具有高可用性,我们需要一种能够优雅的处理故障或一个或多个成员发生故障的设计。因此,我们需要引入冗余跟副本的概念,但是与此同时,引入副本我们就需要去面对同步保存数据的多份拷贝的问题,并实现一些用来恢复状态的机制。