分布式与集群的区别是什么?

汪青兰


集群比较好理解,多个同等物理服务联合提供服务,高可用,提升吞吐量。

分布式就没那么简单吧,把一个系统分解碎片就是分布式?

分布式比较早出现在数据库,文件系统。

在数据库领域,分布式数据库已经研究几十年了,一直没啥突破性进展。理想模式的分布式数据库是多个写入点,联合组成数据库,能够跨越地理区域,外部是感知不到数据到底存储在哪。

这里面涉及致命问题是分布式事务,数据库分布式数据有现成的方案,2阶段提交,问题是性能太差。所以基本没人敢用。

分布式文件系统

其实文件系统这块有个方案,弄个高速共享磁盘,机房内所有服务器共享该设备,实现文件系统层面高速共享。这个方案主要问题出在物理设备太贵,可支持机器有限。

分布式文件系统,主要还是hdfs为代表。配合hadoop出现。典型特征还是不知道数据在哪。甚至不知道数据咋组成的。hdfs使用很严谨机制来确保写入正确性。

hadoop的mapreduce也是分布式的一种,只是限定在特定框架内的分布式。

分布式系统,早先出现过soa系统,2010年的一个号称soa系统,接口使用soap,核心使用jbpm jms完成通信和协调工作,在8个服务器上完成业务切割,将具体业务模块封装在jbpm,剩下就是利用jbpm框架在8个物理服务上交替完成业务模块,一条业务流程,全走完可能随机分布在不同的服务上,这个和更早出现的集群不一样,集群是一个流程会集中在一个物理服务上。

再后来微服务盛行,将业务模块做成微服务,服务组合利用rest或者mq。将先前soa的8个巨型物理服务器变成n个doker镜像。驱动业务模块的jbpm不需要了,可以通过更自由的方式组合使用这些微服务。

分布式焦点还是事务性,看过一个资料,这块目前来说还无法真正解决问题,cap原理无法打破。

并行计算和分布式还有集群的区分,以前并行计算也叫高性能计算,是在大型机器上用特定算法和框架完成大型工程计算。

不过集群和分布式系统有时也能起到并行计算的效果,比如一个计算节点无法短时间处理10000个任务,那就扩机器,横向扩大集群,100个节点计算,时间可缩小到1/100。而hadoop也有类似效果,一个计算节点无法完成海量计算,将其分解后,分散到多个计算节点将计算时间变成可行。

还有主从模式算分布式吗?

典型数据库的主从模式算吗?我个人觉得不算,mysql的分布式数据库专指mysql cluster,是在ndb基础上搭建。

那数据库分片算吗?

比如mongo的分片算吗?

我个人觉得不算。

个人觉得分布式这个被弄的很凌乱。所以看到不同系统不同资料不同时期,给的概念和定义都有差异。本人见识不足,错误的理解之处见谅。


lndlgongjiang


集群和分布式,两者的区别还是挺大的,我就按照自己的理解,向大家解释一下,如果有不对的地方,欢迎大家留言讨论。(回答过类似的问题,不过每次回答的时候,都有新的收获和感悟可以分享)

集群

一个业务,部署在多台服务器上,这就是集群。这里的一个业务,可以直接看做一个程序包。

提到集群,就不得不说一下负载均衡,这两个概念一起举个例子:

  • 公司开发了一个网上商城,类似于T宝,顾客可以在上面浏览商品、加入购物车、支付,完成整个的购物流程。

  • 公司买了一台服务器,把这套程序部署上去,可以满足一千个人同时在线购物。

  • 当顾客越来越多,服务器负载越来越高,商城的页面也越来越卡,这时候公司再买几台服务器,把商城的程序在每个服务器上都部署一套,由负载均衡讲请求转发到各个服务器上,这就是集群。

分布式

把一个业务,拆分成多个业务,然后部署到不同的服务器上,这就是分布式。

还是举例子说明:

  • 公司的网上商城,拆分成两个系统:商品系统和支付系统,用户在商品系统上完成浏览商品、加入购物车的动作,在支付系统上完成支付动作(当然用户是无法感知到是在两个系统上完成的操作),这就是分布式。

  • 当然,还能继续拆,例如拆出来:用户系统、积分系统等等等等。

  • 那么分布式的好处是什么?公司说,我们再做一个二手交易平台,类似于X鱼,这时候用户系统、支付系统就可以复用了,做到了服务复用。

分布式+集群

两者同城是结合一起使用的,比如商品系统部署五台,支付系统部署五台,前面各自挂负载均衡,这样就算有单个服务器Down掉,也不会对整个业务流程造成影响。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


在BAT与同事们交流过,分布式已经逐渐成为面试时必不可少的问题了。了解面试者对分布式的理解,一方面可以侧面验证其过去工作的规模,另一方面可以测试他对架构设计方面的功底。

但是集群相对来说,在面试中提到的较少,因此很多人对分布式与集群的区别都不是很清楚。

接下来,我们将从N个方面来分析他们的区别。

物理与逻辑

集群倾向于物理概念,即多台机器组成一个集群。这多台机器是否有合作关系并不能保证,比如我们会说我们公司的一个规模为1000台机器的物理集群部署在昌平,但是这1000台机器可能是给公司内不同的平台提供服务,但是从物理角度,由于都部署在一起,在同一个机房,就可以称之为集群。

分布式倾向于逻辑概念,即多个节点或程序为了一个共同的目标,部署在一个或者多个物理机器上。举个例子,一台物理机上装了一个Nginx,它连接的两个Tomcat也在这台物理机上,但是这个Nginx代表的服务,就可以称之为分布式。当然,为了安全性,稳定性等原因,我们并不建议把分布式部署在一个物理节点上。

冗余与分解

集群除了可以用来表示多个物理机器,还可以表示一种“冗余”的理念,即通过部署多个同样功能的节点,来实现扩展性与可用性的提升。举个例子,通过在不同节点上部署两个同样功能的server,来这样就算其中一个节点宕机,也能保证服务的可用性。而扩展性,比如一个server的qps可用承担到2000,但是随着用户群体的增加,qps需要达到3000,那么我们就可以通过增加一个Tomcat节点的方式来实现扩容。

分布式的分解与微服务的概念有点相近,即把一个系统的功能分布在不同节点上,每个节点都承担了不同的责任,这样分模块部署最主要的优势是业务隔离,即个别功能的问题或者改进不会影响其他模块,这样就算个别模块挂掉,其他模块也能够继续运作。举个例子,前些年春晚抢红包的时候,曾经由于瞬时间请求量太大导致把微信和支付宝给弄瘫痪了,但是大家都知道,瘫痪的只是红包部分的功能,微信的信息功能并不受影响,这就是分布式的好处。

以上是我对分布式与集群的浅见,欢迎各位在下方留言评论。

我是苏苏思量,来自BAT的Java开发程序员,每天分享科技类见闻,欢迎关注我,与我共同进步。


苏苏思量


分布式和集群不是同一个维度的概念。

  1. 集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式,嗯,C/S架构也可以叫分布式。集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

  2. 通俗的来讲,分布式是指多人分工干活,集群概念模糊,主要做服务分压(分压力);分布式(拆分业务)。集群主要解决高可用问题,作用相对单一。分布式上游做业务拆分,在开发阶段就体现出它的价值,支持多团队并行开发。单个节点之间单独开发,升级,部署。是互联网应用架构的核心。

  3. 在分布式的基础之上,线上环境部署的时候可以使用集群技术增强系统可用性。

上一张图,大家可以看看能否区分的出集群和分布式!

个人观点这个是两个维度的东西,分布式应该和SOA相提并论。集群是分布式上层建筑,通常和负载均衡一起出现。


大狂客


「集群」的核心在「冗余」,通过冗余来提高系统的「可用性」,附带影响了系统「容量」。

「分布式」的核心在「拆分」,通过拆分后的分工合作,提高系统的「响应」和「容错能力」,附带影响了「可用性」。

区分「集群」和「分布式」的方法就是这一组系统/组件之间是「冗余」关系,还是「分工合作」关系。


举个例子

假设题主是个有老婆的程序员!再假设题主的老婆开了一家小吃店!

因为是小本生意,初期收银、服务、做菜、打扫都是你老婆一个人做。这就是「单机系统」。

但是你老婆也不是超人,偶尔会生个病,或者有其他事情,这个时候就没法开店了,也就是说「系统停止对外提供服务了」!

为了减少关店的时间,你在老婆有事的时候,就去帮忙开店。这时你和你老婆就组成了「主备」。你老婆是「主」,你是「备」!

后来生意越做越好,你老婆一个人扛不住了。你琢磨着干软件没前途,还不如和老婆开夫妻店去。于是你就辞职和老婆一起开店了。这时你和你老婆就组成了「集群」。你和你老婆都做收银、服务、做菜、打扫的工作,谁有事了,店也能开,只是服务的人数会(容量)相对的减少。

再后来,生意更好了,于是你招了个服务员,你和你老婆就不再做服务的事情了。现在服务员、你和你老婆就组成了「分布式」!而你和你老婆之间还是「集群」的关系。

再再后来,一个服务员也不够了,如果这个服务员请假了,生意又不好做了(单点问题),于是你又招了个服务员。这两个服务员又组成了「集群」!

最后你生意做得很红火,你招了厨师、收银、服务员、洗碗工、清洁员。你带着你老婆出去浪了~


架构思维


简单来解释:

一个任务,只有一个服务器来运行,这个服务器会累成狗;(单机结构)

多个累成狗的服务器组合在一起运行,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;(集群结构)

基因优化整合之后,多个服务器被拆分到运行在不同的机器上,就像一群小小的服务器一起工作,(分布式结构)

要充分理解这个概念,首先先明白什么是单机结构:

普通的软件是运行在一台物理机器上的,一个系统业务量很小的时候,可以将所有的代码都放在一个项目中,然后部署在一台服务器上,这台服务器提供整个项目所有的服务。单机结构的啥缺点显而易见,因为它的处理能力是有限的,当业务增长到一定程度的时候,单机的硬件资源将无法满足。

此时便出现了集群模式,单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍。

分布式结构就是将一个完整的系统,按照业务功能,把一个服务系统拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。


欧界传媒


“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

分布式是指将不同功能,或不同地点,或拥有不同数据的多台计算机通过网络连接起来,由控制系统统一管理,完成大规模信息处理的计算机系统。

集群是指将多台服务器集中在一起提供同一种服务,在逻辑上可以看做是一台服务器对外进行服务,这些服务器组合就是集群。

如题,分布式和集群的区别是什么?

哟哟简单总结一句话:分布式是“并联”工作的,集群是“串联”工作的。

下面哟哟来具体介绍一下两者的区别:

1、从概念上就可以看出两者最主要的区别就是分布式是将一种业务拆分成多个子业务部署在多台服务器上,进而对外提供服务;而集群就是将多台服务器组合在一起提供同一种服务;

2、集群强调在多台服务器位置集中,并且容易统一管理;而分布式没有具体要求,不论放置在哪个位置,只要通过网络连接起来就行;

3、集群是一种物理形态,即多台服务器在一起提供一种服务;而分布式是一种工作方式,即一个程序或业务分解到多台服务器分别完成;

总之,两者最明显的区别还是集群是多台服务器做相同类型的任务,分布式是多台服务器协同做一种任务。

欢迎大家多多关注我,在下方评论区说出自己的见解。


哟哟吼说科技


从工作形式来说:

分布式是将一个业务分拆为多个子业务,部署在不同的服务器上。

集群是将多台服务器集中在一起,实现同一业务。


从解决问题的角度来说:

分布式是研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配为许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

分布式是以缩短单个任务的执行时间来提升效率的,任务具有差异性。


集群是一组计算机作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他们看来,集群是一个系统,而非多个计算机系统,并且集群系统的管理员可以随意增加和删改集群系统的节点。

集群是以提高单位时间内执行的任务数来提升效率的,任务具有同一性。


从特点来看:

分布式:

  • 横向扩展性强

横向可扩展性是指通过增加服务器数量来提升整体性能,纵向可扩展性是指提升每台服务器性能进而提升总体性能。纵向可扩展性的上限非常明显,因为单台服务器的性能不可能无限提升,而横向可扩展性的上限空间比较大,分布式又恰恰总能很方便地增加服务器。


  • 廉价高效

这是分布式系统的突出特点,成本低廉的PC服务器组成的分布式,在性能方面能达到超越大型机的处理性能,在成本上远低于大型机。


  • 网络开销大

网络开销是分布式系统最大的瓶颈。


集群:

  • 可扩展性

集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。


  • 高可用性

在集群中,同样的服务可以由多个服务实体提供,如果一个服务实体失败了,另一个服务实体会接管失败的服务实体,服务实体冗余保证了错误恢复能力,增强了系统的可用性。


  • 负载均衡

负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。


分布式与集群间的区别联系:

分布式中的每一个节点,可以做高可用集群,这样可以保证分布式每个节点可用。而集群并不一定就是分布式的。


云汇天下Chainedbox


以下的解释都是太片面了,把分布式=垂直切分、集群=水平拓展。其实分布式是逻辑概念,集群是物理概念。两者结合在一起才是真正的分布式。不管是垂直切分和水平拓展都要考虑分布式带来很多的问题,数据不一致,事务失败、可用性底等,也就是CAP原理,如果要详细阐述就比较复杂了


分享到:


相關文章: