第一部分 分布式系统基础与理论

第1章 分布式系统基础

1.1 概述

随着全球数字化进程的推进,全球数据在爆发式地增长,据《数据时代2025》白皮书报告,到2025年全球数据圈将增长到175ZB(1ZB=210EB=220PB=230TB)。传统的单机的现状是性能瓶颈现象明显,而大型机价格昂贵,并且无法进行容灾,出现故障将导致服务停机不可用。人们愈发意识到在技术领域,传统的单机系统已无法适应大规模的数据存储和计算的需求。正是由于这个时代的数据量与单机存储、处理能力的不匹配,分布式系统越来越受到人们的关注。事实上,为应对数据爆发式的增长,人们在两条可选择的道路中探索:机器大型化和机器互联。前者成本高昂且不灵活,于是后者越来越受青睐。然而,根据代价守恒定律,代价不会凭空消失,硬件成本下降了,软件设计成本便会提升。而分布式系统理论,则能帮助我们降低软件成本。

分布式系统是一种计算环境,其中各种组件分布在网络上的多台计算机(或其他计算设备)上。分布式系统协调这些设备的资源,使其比单个设备更有效地完成工作。这个定义包含两方面的内容:第一方面是硬件的,计算设备之间本身是独立的;第二方面是软件的,对用户来说他们就像在与单个系统打交道。也可以将这里的工作理解为一项任务,例如渲染视频并发布成品。在这个简单的示例中,该分布式系统可以将视频的每一帧提供给多个不同的计算机(或节点),使每一帧得以完成渲染。一旦渲染过程完成,用于管理的应用程序就会给节点安排一个新工作阶段,即聚合阶段。这个阶段将一直持续到视频的所有片段重新组合在一起。这项任务可能分布在数百甚至数千个节点之间,将单台计算机可能需要数天才能完成的任务变成一件数分钟就能完成的事情。将计算设备进行分布式整合处理(机器互联)的优点可总结为以下几点。

●更大的灵活性:随着服务需求的增长,更容易添加计算能力。在大多数情况下,人们可以即时地将服务器添加到分布式系统中。

●可靠性:一个设计良好的分布式系统可以承受其一个或多个节点的故障,而不会严重影响性能。在单体系统中,如果服务器宕机,应用程序将无法运行。

●提高速度:当流量变得繁重时,可能会使单个服务器陷入困境,从而影响每个用户的性能。分布式数据库和其他分布式系统的可扩展性使其更易于维护并维持高性能水平。

●地理分布:分布式内容交付对于任何互联网用户来说都是直观的。分布式系统屏蔽来自地理的差异,这对于组织来自全球的内容来说是至关重要的。

分布式系统是IT和计算机科学的重要发展方向,不同场景的使用现状变得越来越庞大和复杂,单一的分布式系统模型和架构显然无法满足复杂多变场景的要求。经过多年发展,多种分布式系统模型和架构已经被提出。我们总结了一些使用较多的分布式系统的模型和架构。

●客户端-服务器系统是最传统和最简单的分布式系统类型,在组织上来说,属于主从(master-worker)架构。涉及大量联网计算机,这些计算机与中央服务器交互以实现数据存储、数据处理或其他共同目标,单点瓶颈和故障是其主要缺点。对此类型的一种更为通俗的理解是:有一个机器负责指挥,其他机器负责干活。

●手机网络是一种先进的分布式系统,在手机、交换系统和基于互联网的设备之间共享工作负载。组织结构上是多层架构,每一层都根据不同的特点进行设计。

●对等网络,在组织上来说,属于点对点(peer-to-peer)架构。其中工作负载分布在数百或数千台运行相同软件的计算机之间,所有的计算机在逻辑上是等价的,是分布式系统架构的另一个示例。

●当今企业中最常见的分布式系统是那些通过Web运行的系统,将工作负载移交给数十个根据需要创建的基于云的虚拟服务器实例,然后在任务完成时终止。

为了实现对上述各种分布式系统的监控,有多种监测方式被提出。例如一种适合现代云和微服务体系结构下的监控方式是分布式跟踪(distributed tracing),这是一种监控应用程序的方法,其本质上是分布式计算的一种形式,用于监视在分布式系统上运行的应用程序的操作。

虽然各种分布式系统在组织架构和模式上看起来各不相同,但是究其根本,我们仍可窥探出一些相似之处,分布式系统通常由以下关键特征和特性定义。

●可扩展性:随着工作负载大小的增加而增长的能力是分布式系统的基本特征,通过按需向网络添加额外的处理单元或节点来实现。

●并发性:分布式系统中的各种组件同时运行。当任务不按顺序以不同的速率发生时,它们的另一个特点是缺乏“全局时钟”。

●可用性/容错性:如果一个节点发生故障,其余节点可以继续运行而不会中断整体计算。

●透明度:外部程序员或最终用户将分布式系统视为单个计算单元而不是其底层部分,允许用户与单个逻辑设备进行交互,而不用关心系统的架构。

●异构性:在大多数分布式系统中,节点和组件通常是异步的,具有不同的硬件、中间件、软件和操作系统。这允许通过添加新组件来扩展分布式系统。

●复制:分布式系统支持共享信息和消息传递,确保冗余资源(如软件或硬件组件)之间的一致性,提高容错性、可靠性和可访问性。

事实上,以上特征与特性也正是分布式系统理论研究与系统设计的基础出发点。在1.2节中,我们将概述性地介绍这些内容。虽然后续章节没有再明确点出这些内容,但是读者仍然会感受到它们作为“分布式问题的思考出发点”贯穿整本书。

正如我们所知,单机能力不匹配数据量的问题在各种场景日益凸显。在可预见的未来,分布式系统处于主导计算的有利位置,几乎任何类型的应用程序或服务都将包含某种形式的分布式计算。随着用户越来越多地转向移动设备来处理日常任务,对始终在线、随处可用的计算的需求正在推动这一趋势。展望未来,随着企业开发人员越来越依赖分布式工具来简化开发、部署系统和基础设施、促进运营和管理应用程序,分布式系统在全球计算中的重要地位将进一步被巩固。