参考了一些其他文章的见解,也补充了一些自己的见解。
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 ... , 厨师和配菜师的关系是分布式。
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群。
店里生意很好,当店长接到订单后,看哪个厨师活儿不重,就将新的订单分给谁,这就是负载均衡。
集群:多个人在一起做同样的事 。
分布式 :多个人在一起做不同的事 。
负载均衡:决定将任务以某种规则分给谁做。
1)我记得在一本讲TCP/IP 的书上有这样一句话:分布式是指多个系统协同合作完成一个特定任务的系统。
分布式是解决中心化管理的问题,把所有的任务叠加到一个节点处理,太慢了。
所以把一个大的问题拆分为多个小的问题,并分别解决,最终协同合作。分布式的主要工作是分解任务,将职能拆解。
中心化带来的主要问题是可靠性,若中心节点宕机则整个系统不可用,分布式除了解决部分中心化问题,也倾向于分散负载,但分布式会带来很多的其他问题,最主要的就是一致性。
这些年吵得很热的云计算实际上只是包装在分布式之外的“新”概念。
2) 集群主要的使用场景是为了分担请求的压力,也就是在几个服务器上部署相同的应用程序,配合负载均衡来分担客户端请求。
当压力进一步增大的时候,可能在需要存储的部分,mysql无法面对很多的写压力。因为在mysql做成集群之后,主要的写压力还是在master的机器上面,其他slave机器无法分担写压力,从而这个时候,也就引出来分布式。
分布式的主要应用场景是单台机器已经无法满足这种性能的要求,必须要融合多个节点,并且节点之间是相关之间有交互的。相当于在写mysql的时候,每个节点存储部分数据,也就是分布式存储的由来。在存储一些非结构化数据:静态文件、图片、pdf、小视频 ... 这些也就是分布式文件系统的由来。
如:现在的Spring Cloud的分布式微服务架构,一个系统分解成了多个Spring Boot的微服务,各个微服务协同合作完成特定的任务。同个微服务又可以部署多台服务器形成微服务集群,从而提供高可用服务。
3)集群主要是简单加机器解决问题,对于问题本身不做任何分解;
分布式处理里必然包含任务分解与答案归并。分布式中的某个子任务节点,可能由一个集群来代替;集群中任一节点,都是做一个完整的任务。
集群和分布式都是由多个节点组成,但是集群之间的通信协调基本不需要;而分布式各个节点的通信协调必不可少。
将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式),然后部署多个相同的子系统在不同的服务器上(这叫集群),部署在不同服务器上的同一个子系统需要做负载均衡处理。
集群是个物理形态,分布式是个工作方式。
分布式:一个业务拆分为多个子业务,部署在多个服务器上 。
集群:同一个业务,部署在多个服务器上 。
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题。
集群:同一个业务部署在多台机器上,提高系统可用性。
【参考】:https://www.zhihu.com/question/20004877,https://www.zhihu.com/question/20004877,https://blog.csdn.net/jiangyu1013/article/details/80417961