经常听到MySql集群、Redis集群、分布式系统等概念,但是,很少有机会深究,到底什么集群,什么是分布式?在概念上这俩个词很接近,难道不需要区分?其实,非常有必要区分这两个概念,帮助我们对计算机的理论有更深入的理解。今天,我就尝试去解释一下这两个概念。

定义的区别

计算机集群(英语:computer cluster)是一组松散或紧密连接在一起工作的计算机。由于这些计算机协同工作,在许多方面它们可以被视为单个系统。与网格计算机不同,计算机集群将每个节点设置为执行相同的任务,由软件控制和调度。

维基百科的解释,关键词是:一组计算机、相同的任务。

分布式系统是一组电脑,透过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。[1]组件之间彼此进行交互以实现一个共同的目标。把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,再上传运算结果后,将结果统一合并得出数据结论的科学。

维基百科的解释,关键词是:一组计算机、大计算分解。

集群和分布式,都是描述的一组计算机。集群的所有节点跑的是同样的任务,而分布式系统的节点跑的是分解后的任务。以修手机为例:维修一部手机要分为检测、维修、测试三个环节,为了提高效率,雇了10位工程师。如果每个工程师维修时,对每台手机进行检测、维修和测试,这就是集群的工作方式。如果2位工程师负责检测,5位工程师负责维修,剩下的3位工程师负责测试,这就是分布式的工作方式。

应用中的区别

在工作中,有时候并没有严格按照概念去理解这两个词。但是,回想一下什么时候用集群这个词,Redis集群、MySql集群、Nginx集群等等,按照上述的定义分析,这些集群里的每个节点,都是跑的同样的业务。微服务平台、云计算平台,这些平台的节点往往跑着不同的业务,组成强大的能力对外提供服务,这就是分布式系统。

集群的关键作用是提升并发处理能力。例如:一台MySql数据库不能满足性能需求,通过分表分库方案,部署多台实例;一个Redis节点不足以支撑业务,多个节点组成集群提高并发处理能力。但凡能够组成集群的,往往都是职责单一,功能目标明确的应用。相对来说,集群化是简单的,对服务几乎无侵入的,通过入口分发负载,应用与应用之间是等价的、无感知的。

分布式的关键作用是解耦以便于快速迭代。单机版应用能不能做的很强大、很复杂?当然可以!十几年前的SAP、Oracle ERP软件,这些业务巨复杂的系统,都是可以部署在一台服务器上的。通过模块化、SOA等设计理念,工程师们也可以协同工作写出复杂的应用。这些软件可能一年才需要升级一次,但互联网应用几乎每周都在发版升级,显然这种开发模式在互联网领域并不适用。通过把功能模块拆分出来,部署在不同的节点,按节点进行升级,实现快速迭代。

通过上面的讲述,这种理论模型的分布式,和真实的分布式还是不同。没有谁见过分布式系统中的业务模块,是单节点部署的。是的,没有错,现实中的分布式系统,其实是分布式 集群的综合体。这样的模式,结合了两者的优势,即实现了解耦,又做到了高并发能力,完美呼应了互联网对应用的需求。其他的概念,高可用、一致性等,都是在分布式 集群的理念上,发展出来的解决具体问题的方法论

集群和分布式区别(你知道其中的区别吗)(1)

总结

本文从概念入手,“性格分裂”式的剖析了集群和分布式。我认为,这种剖析有利于理解概念,有利于理解“为什么”。在具体实践中,不能把两者对立起来,复杂的业务系统,往往都是两者的结合体。

针对我的理解,你有什么想说的吗?欢迎拍砖。

,