什么是分布式计算?
在分布式计算中,我们使用多台计算机协同解决同一个问题。我们不再依赖单台机器,而是将任务拆分为更小的部分,并分配给由多台计算机组成的网络,我们称之为“节点”。这些节点共享处理负载和数据存储,协同完成任务。
这种方法在应对规模庞大或数据集过于庞大、复杂而单机无法处理的问题时非常有用。例如,分布式计算系统可以为搜索引擎处理 PB 级数据、为科学研究运行仿真,或为市场分析提供金融模型的算力。
分布式计算 vs 并行计算
分布式计算与并行计算常被混淆,看起来似乎可以互换。二者都涉及多个进程为同一目标协作,但它们是为不同场景设计的不同方法。
分布式计算侧重使用彼此独立、往往地理上分散的多台机器,通过协作解决问题。每台机器作为独立节点运行,拥有各自的内存与处理能力。节点间通过网络通信,任务被划分以便在不同机器上运行。
相对地,并行计算通常发生在单一系统内。它利用同一台计算机内的多个处理器或内核同时执行任务。这些处理器共享同一内存,并紧密协作以拆分计算。

以一个实际示例来说,我们要对一个海量数据集进行排序。在并行计算中,我们会将数据集分成若干块,同一台机器内的各个处理器分别处理一块。在分布式计算中,数据集会被拆分并发送到不同的机器,每台机器独立完成其部分的排序,随后再将已排序的片段合并。
两种方法都非常有用,但适用场景不同。并行计算适合需要极高计算速度且通信开销很小的任务,比如在超级计算机上运行仿真。分布式计算更适合横向扩展的场景,比如在基于云的系统或全球网络中处理数据。
分布式计算的用例
分布式计算为当今世界中许多最具影响力的应用提供了动力。我们来看看三类常见用例:搜索引擎、科学研究和金融建模。

搜索引擎
像 Google 这样的搜索引擎高度依赖分布式计算来抓取和索引数十亿网页。它们不会把任务交给单台机器处理,而是将负载分配给大量节点。
一些节点专注抓取网页,另一些负责建立索引,还有一部分在实时处理中用户查询。这种分工确保了无论任务规模如何,搜索结果都能快速而高效地返回。
科学研究
在科学研究中,分布式计算通过运行复杂仿真和分析海量数据集来推动突破。例如,气候科学家使用分布式系统来建模和预测天气模式,或模拟全球变暖的影响。
金融建模
金融行业依赖分布式计算来完成风险分析、欺诈检测和市场建模等任务。
全球金融市场产生的海量数据需要能够 7×24 小时高速运转的系统。分布式计算使金融机构能够以足够快的速度分析数据、测试模型并产出洞见,从而在实时市场中保持竞争力。
分布式计算的关键组件
分布式计算依赖一些基本构件:节点、网络和分布式文件系统(DFS)。

节点
节点是分布式系统中执行计算的单台机器。每个节点都可以独立行动,处理分配给它的任务,并与其他节点通信共享结果。在某些情况下,节点可能承担专门角色,如管理任务或存储数据。
网络
网络是连接各节点的通信基础设施,使它们能够交换数据并协调任务。根据系统规模,可能涉及局域网(LAN)或广域网(WAN),以连接地理上分散的节点。
分布式文件系统(DFS)
分布式文件系统是一种存储方案,允许在多个节点间访问数据。一个常见示例是 Hadoop 分布式文件系统(HDFS),它旨在处理大型数据集,并通过在多个节点上复制数据来提供容错能力。
分布式计算的常见架构
好了,我们已经通过网络将工作负载分发给不同节点,且所有节点都可通过 DFS 访问数据。那么,谁来决定哪个节点执行什么任务呢?
这些问题没有唯一答案,因为分布式计算系统可以有多种组织方式。话虽如此,三种常见架构是:主从、点对点和客户端-服务器。
主从(Master-Slave)
在主从模型中,一个中心节点(主节点)负责管理与协调任务,而从节点执行实际计算。主节点负责将任务拆解为更小的部分,分发给从节点,并收集结果。
例如,在执行大规模图像处理任务时,主节点会为每个从节点分配特定的图像片段进行处理。任务完成后,主节点汇总结果并合成为最终输出。
这种方法简化了任务管理与协调,但有一个明显缺点:系统存在单点故障,因为它完全依赖主节点。

点对点(Peer-to-Peer)
在点对点架构中,所有节点地位平等,不存在中心协调者。每个节点既可作为客户端也可作为服务器,直接与其他节点共享资源并通信。
例如,像 BitTorrent 这样的文件共享网络采用 P2P 方式,用户直接从其他节点下载并向其他节点上传文件片段。
这类系统的优势在于没有中心故障点,具备较强的弹性与可扩展性,但节点间的协调(例如保证数据一致性)会更复杂。

客户端-服务器
在客户端-服务器模型中,一个或多个服务器为多个客户端节点提供资源或服务。客户端向服务器发出请求,服务器处理并返回结果。该架构在网页应用和数据库中非常常见。
这听起来可能与主从模型类似,仿佛服务器扮演主节点的角色,但二者有区别:服务器通常更为被动,不会拆分或委派任务——它只是响应客户端请求。
在这种模型下,集中式管理与控制使系统更易维护与更新,但服务器会成为瓶颈,限制可扩展性。服务器宕机也可能导致整个系统中断。
上述三种架构是在分布式系统中最常见的,但您也可能接触过其他模型(我确信您听说过基于云的架构!)。
每种模型满足的需求不同,架构选择会显著影响系统性能、容错性和可扩展性。因此,在确定方案前,务必先梳理清楚要解决的问题。好消息是,您不必只能选其一!大多数现代系统,尤其是在云计算中,会采用这些架构的混合体,以结合各自优点。
搭建分布式计算系统
既然已经了解了分布式计算的理论,让我们来看看如何实际搭建一个分布式计算系统。

1. 明确定义您的工作负载
在分发任务之前,您需要先明确要分发的任务是什么。这通常涉及将一个更大的问题拆分为更小、相互独立的工作单元,以便并行处理或分配到各节点。
例如,如果您在处理一个大型数据集,可以将其划分为多个数据块,分别由不同的机器或处理器处理。
2. 选择基础设施
分布式计算需要一个由多台机器组成的网络,无论这些机器是本地服务器、云实例(如AWS、Azure或Google Cloud),还是二者混合。您需要决定如何部署和配置这些机器,确保它们连接并能够互相通信。
- 基于云的基础设施:AWS、Google Cloud 和 Azure 等平台让您无需管理物理硬件即可快速构建分布式计算集群。这些平台通常提供托管服务,如AWS EC2(提供计算能力)和S3(提供分布式存储),方便您搭建可扩展系统。
- 本地或混合部署:如果您使用自有服务器或本地与云资源的混合部署,您需要搭建网络、配置节点,并确保它们之间通信可靠。
3. 部署分布式文件系统(DFS)
如前所述,分布式计算中最重要的要素之一是确保所有节点都能访问所需数据。Hadoop 的 HDFS或其他 DFS 方案允许您将大型数据集存储在多个节点上,并通过冗余来确保即使某个节点故障也不会丢失数据。
4. 部署框架或工具
当基础设施就绪后,您需要部署所选的分布式计算工具。每个框架都有自己的安装与配置流程,但通常包括:
- 在每个节点上安装所需软件,或使用能为您自动安装与配置的云端方案。
- 配置集群设置,例如工作节点数量、资源分配方式以及容错策略。
5. 分发任务
当环境准备就绪,您就可以开始将任务分发到各个节点。大多数工具会通过拆分工作负载并将任务指派给不同节点来帮助您管理这一过程。
通常,您需要编写代码来定义任务如何拆分(如 Hadoop 的 MapReduce 作业、Spark 的转换与动作等),或使用框架的 API 来处理节点间的分发与通信。
6. 监控与管理集群
分布式系统可能会变得复杂,跟踪性能、故障与资源使用情况对确保系统平稳运行至关重要。许多工具提供内置监控面板,但您也可能需要额外的监控方案(如Prometheus或Grafana)来监控节点健康、性能和作业进度。
分布式计算的工具与框架
正如我们所见,合适的工具能帮助您快速上手分布式计算,并在管理分布式环境时承担大量繁重工作。下面我们来看看一些最受欢迎的工具。
Apache Hadoop
Apache Hadoop 是一个开源框架,旨在在分布式集群上处理海量数据。它采用 MapReduce 编程模型,将大型任务拆分为更小、可并行处理的单元。
Hadoop 尤其适合处理 PB 级数据,具备良好的可扩展性、容错性与存储灵活性。其生态包含诸多组件,如用于分布式存储的 HDFS 以及批处理工具,因此成为众多大数据应用的常用方案之一。
但其基础设施的搭建本身可能较为复杂,仍需要配置节点、管理集群资源并确保容错能力。
想进一步了解 Hadoop,您可以阅读这篇关于Hadoop 面试问题的文章。它有助于面试准备,同时也包含许多有关该工具及其用例的有趣信息。
Apache Spark
Apache Spark 是一个用于大规模数据处理的高速通用引擎。
由于基于 Hadoop,Spark 可以运行在现有的 Hadoop 集群之上,或使用其自身的集群管理器。不同于使用磁盘存储的 Hadoop,Spark 提供内存计算,因此能够显著加快数据处理速度。
它可用于广泛的处理任务,包括批处理、实时流处理、机器学习和图计算。它支持Python、Scala和Java等语言,并可与 AWS、Azure 等云平台集成。
Dask
还记得我们谈到并行计算吗?Dask 是一个 Python 的并行计算库,旨在从单机扩展到大型分布式集群。
它非常适合处理大型数据集和复杂计算任务,因为它与 NumPy、Pandas、Scikit-learn 等 Python 库深度集成,为 Python 用户提供熟悉的环境。
它同时支持分布式与本地环境,这意味着无论是小型项目还是庞大的数据流水线都能使用。与 Hadoop 和 Spark 相比,它在分布式计算方面仍需一定配置,但许多步骤已实现自动化。
结语
希望您喜欢这次对分布式计算基础的学习!不过,本文只是起点。分布式计算领域每年都有无数工具、框架与技术不断涌现。
如果您想亲手尝试构建分布式系统,建议注册 AWS 或 GCP 等云服务商账户。它们在注册时都会提供额度,您可以免费试用其基础设施并搭建小项目!
如果您已经掌握基础并希望提升数据职业发展,不妨选择线上众多Apache Spark 认证中的一项。
编码愉快!
常见问题
分布式计算需要专用硬件吗?
不一定——您可以使用普通机器,但高性能任务可能会受益于优化过的硬件。
分布式计算总是更快吗?
不总是如此。对于较小任务,协调与通信带来的开销有时会抵消其收益。
搭建分布式系统需要多少编程知识?
尽管工具能简化流程,但您仍需要对编程、网络与系统设计基础有较好的理解。

作者
Marie Fayard
我是一名具有产品思维的技术负责人,专注于帮助早期初创公司从首个原型成长到实现产品与市场匹配,并持续向前发展。我对人们如何使用技术充满好奇,热爱与创始人及跨职能团队紧密合作,将大胆的想法变为现实。不在打造产品的时候,我会在世界的新角落寻找灵感,或在瑜伽馆放松减压。
如果您曾经在需要复杂计算或高数据分析需求的系统上工作过,您很可能见识过单机在应对这些任务时的吃力。即便是高性能计算机,在处理海量数据时也会触到天花板,尤其是在实时数据分析或机器学习等领域。
这正是分布式计算发挥作用的地方。通过将任务拆分并分配到多台机器,它利用多机合力来克服单一系统难以承担的挑战。借此,我们工程师可以构建各类应用,从索引数十亿网页的搜索引擎到气候变化模拟。
在本文中,我将为您介绍分布式计算,拆解其关键组件与架构,说明如何搭建分布式系统,并探讨可用的一些工具。