分布式和集群是两种不同的计算模型,它们各有特点,并根据特定的应用场景而异。本文旨在比较分布式和集群的主要区别,以便解释决定如何选择其中一种技术的原因。
分布式计算主要指的是通过网络将多台电脑联合在一起,以由客户端控制的一种计算体系。它的理念是将整个计算工作分解为多个部分,并使用互联网或其他大型网络连接这些服务器,以实现系统功能的实现。因此,分布式系统可以有效地利用网络来进行分布式数据处理和任务处理。例如,Apache Hadoop是一款优秀的分布式计算框架,可以有效地将大型数据集分发到多台服务器上,以实现并行计算。
集群计算主要指将计算任务分解到多台服务器中,以由单一控制者控制,并在本地完成分布式任务的运行。它的基本原理是将复杂的计算任务分割成一组可以单独分配和完成任务的“节点”。多台服务器在同一网络,具有正确安装和配置的架构,可以有效地互相通信和协作完成任务,从而获得最终所需的计算结果。集群计算的重点是在节点之间建立正确的通信机制,以实现有效的资源整合和分布式服务部署。例如,Apache Hadoop也支持集群模式,允许服务器之间进行通信和传输数据。
分布式和集群计算的最大区别在于它们的计算机架构和网络结构。分布式系统是一种开放式的架构,它使用互联网或其他大型的分布式网络,每个节点可以独立的处理任务,而无须连接集中主机。而集群计算则是一种封闭式的架构,它使用私有网络,所有服务器之间必须相互连接,以使得客户端可以将任务分发至其中。
此外,由于分布式系统中所有节点可以独立运行,因此分布式应用的数量只受客户端服务器之间网络连接的性能限制。而集群计算的数量取决于网络架构的复杂性以及整体集群的可用资源,它也会消耗更多的资源。
最后,选择哪种计算模型取决于应用程序的特定要求,我们必须根据项目的规模和要求来决定选择哪种计算模型,以便更好地实现预期的目标。比较分布式和集群的主要区别,我们可以得出结论,分布式计算更适合实现大规模的并行任务,而集群计算更适合实现密集型任务,以获得更快的计算速度和更高的可扩展性。
最后,选择哪种计算模型取决于应用程序的特定要求,我们必须根据项目的规模和要求来决定选择哪种计算模型,以便更好地实现预期的目标。比较分布式和集群的主要区别,我们可以得出结论,分布式计算更适合实现大规模的并行任务,而集群计算更适合实现密集型任务,以获得更快的计算速度和更高的可扩展性。
1 概述
“分布式系统”是我们经常遇到的一个概念,而“集群”也是。但是很多时候,大家会将这些概念混淆,一个原因是:分布式系统的定义本身就不明确。
学术界中,对分布式系统的定义并不统一。
有的学者将分布式系统定义为“一个其硬件或软件组件分布在联网的计算机上,组件之间通过传递消息进行通信和动作协调的系统[1]”;
有的学者将分布式系统定义为“若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统[2]”。
显然,这些定义都可以涵盖分布式系统,但又过于宽泛和模糊,与软件开发者日常讨论的分布式系统的概念相去甚远。
工程界中,分布式系统的概念也是模糊的。例如我们会说ZooKeeper是分布式系统,也会说微服务系统是分布式系统。但实际上,两类系统的差别很大(后面分析了两个系统的具体归类,这里我们给出结果:两者都属于分布式系统。而准确地说,ZooKeeper是属于分布式系统中的信息一致的节点集群,而微服务应用本身就是分布式系统的一个子类)。
那我们平时所说的分布式系统到底是什么,其判断标准是怎样的?
接下来我们就要回答上述问题。我们会从应用演化历程的角度介绍应用如何一步步从单体发展到分布式。然后在此基础上,给出分布式系统的确切定义。
2 应用的演进历程
在这一章节我们要了解应用如何从单体结构逐渐演变为分布式结构,并详细介绍演变过程中出现的各种结构的优势与缺陷。
2.1 单体应用
单体应用是最简单和最纯粹的应用形式,它就是部署在一台机器上的单一应用。单体应用中可以包含很多功能模块,模块之间会互相调用,但这些调用都在应用内展开,十分方便。因此,单体应用是一个高度内聚的个体,其内部的各个模块间是高度耦合的。
单体应用的开发、维护、部署成本低廉,适合实现功能简单、并发数低、容量小的应用。当应用的功能、并发数、容量不断提升时,单体应用的规模会不断增大。这会带来两个方面的挑战:
硬件方面。庞大的单体应用需要与之对应的服务器提供支持,这种服务器被称为“大型机”,其购买、维护费用都极其高昂。
软件方面。单体应用内模块间是高度耦合的,应用规模的增大使得这种耦合变得极为复杂。这使得应用软件的开发维护变得困难。
这里要单独说一点,很多时候从程序员的角度看,往往觉着“软件方面”的因素是单体应用分布化的主要推动力,其实不是的。从历史角度和宏观角度看,“硬件方面”才是!
因此,当应用的功能、并发数、容量增加到一定程度时,需要对单体应用进行拆分,以便于对功能、并发数、容量进行分散。这就演变成了集群应用。
2.2 集群应用
集群应用可以对应用的并发数、容量进行分散。集群应用包含多个同质的应用节点,这些节点组成集群共同对外提供服务。这里说的“同质”是指每个应用节点运行同样的程序、有着同样的配置,它们像是从一个模板中复制出来的一样。
为了让集群应用中的每个节点都承担一部分并发数和容量,可以通过反向代理等手段将外界请求分散到应用的多个节点上。集群应用的结构如图所示。
但集群应用也带来了一些新的问题。一个最明显的问题是同一个用户发出的多个请求可能会落在不同的节点上,打破了服务的连贯性。
例如用户发出R1、R2两个请求,且R2的执行要依赖R1的信息(例如R1会触发一个任务,而R2用来查询任务的执行结果)。如果R1和R2被分配到不同的节点上,则R2的操作可能无法正常执行。