Logo
Section 1 / 10

入门

了解什么是分布式系统以及我们为何需要它。

导入

入门

了解什么是分布式系统以及我们为何需要它。

什么是分布式系统?

根据 #key# Coulouris 等人:G. Coulouris, J. Dollimore, T. Kindberg, 以及 G. Blair,《分布式系统:概念与设计》(第5版),2011年。#key#,“分布式系统是指其组件分布在不同的联网计算机上,这些组件通过传递消息来相互通信并协调各自的行为。”

该系统的组件可以被看作是在物理硬件(如计算机)上运行的软件程序。这些组件具有多种形式;例如,它们可以是Web服务器、路由器、Web浏览器等。为了保持通用视角,我们假设每个程序都在独立的机器上运行。我们将这些机器中的每一个称为一个 节点。

...
一个分布式系统

上图展示了网络要么由分布式系统组件之间的直接连接构成,要么包含更多构成网络骨干的组件(例如,当通信通过互联网进行时)。

虽然上述通用节点视角有助于理解图表,但在某些情况下,了解节点在实际应用中如何工作的例子可能更有帮助。在这种情况下,我们会详细说明系统中每个节点的作用。

分布式系统的组成部分

分布式系统的核心部分可分为两类:

  • 构成分布式系统的各个部分:它们位于远程位置,并通过网络相互分离。
  • 分离分布式系统各部分的网络:它作为通信机制,使各部分能够交换消息。

我们将在本课程后续部分详细讨论各个组成部分。

为什么需要分布式系统

分布式系统有三大主要优势,如下图所示。

...
分布式系统的三个主要优势

下面我们逐一解释。

性能

根据 #key# Mohan 等人:Mohan, S. “性能解决方案:创建响应迅速、可扩展软件的实用指南 [书评]。” IEEE Software 20, 第5期 (2003): 103-103。#key#,“性能是指软件系统或组件在及时性方面实现其目标的程度。”

单台计算机的问题

单台计算机的性能受到其硬件物理限制的制约。此外,在某个阶段之后,提升单台计算机性能的成本极高。

解决方案

我们可以使用两台或多台低配置计算机,达到与一台高性能计算机相当的性能。因此,分布式系统能够在更低的成本下实现更好的性能。

需要注意的是,更好的性能在不同场景下可能意味着不同的含义,例如请求延迟更低、吞吐量更高。

可扩展性

根据 #key# Bondi 等人:A. B. Bondi,“可扩展性的特征及其对性能的影响”,载于第二届国际软件与性能研讨会论文集 – WOSP ’00,第195页,2000年。#key#,“可扩展性是指系统、网络或流程处理不断增加的工作量的能力,或其适应这种增长的潜力。”

单台计算机的问题

在现实世界中,数据存储和处理构成了软件系统价值的主要来源。随着用户数量的增长,系统需要应对更高的流量并存储更大的数据量。然而,如前所述,仅由一台计算机组成的系统只能扩展到一定限度。

解决方案

如果我们构建一个分布式系统,就可以将数据拆分并存储在多台计算机上,并将处理任务分布到多个节点上。

垂直扩展 指的是通过向单一节点添加资源(内存、CPU、磁盘等)来扩展系统的方法;而 水平扩展 指的是通过增加更多节点来扩展系统的方法。

由此,我们可以将系统扩展到单台计算机无法企及的规模。

可用性

在软件系统的语境中,可用性是指系统在需要时能够按要求正常运行的概率。

单台计算机的问题

如今,大多数在线服务都需要全天候运行(也称为“7×24小时服务”),这是一项巨大挑战。当服务声称具备五九可用性时,通常意味着其每年最多停机时间不超过5分钟(即99.999%的正常运行时间)。

考虑到硬件本身的不可靠性,要实现这样的可靠性极为困难。显然,仅靠单台计算机无法提供如此级别的可用性保证。

解决方案

冗余 是一种广泛采用的提高可用性的机制。它指的是将数据存储在多个冗余的计算机中。当某台计算机发生故障时,系统可以快速切换到另一台备用机器。这样就能避免用户感知到故障。

由于数据现在存储在多台计算机中,我们就自然形成了一个分布式系统!

如果我们利用分布式系统,就能同时获得上述所有优势。然而,正如我们将在后续内容中看到的,这些优势之间存在权衡关系,与其他属性也存在冲突。因此,在大多数情况下,我们必须做出取舍。要做到这一点,就必须理解分布式系统的基本约束和局限性。本课程的第一部分将帮助我们建立这一认知。

开始之前

分布式计算的谬误