聊聊分布式、集群、微服务的概念。
分布式:是一种部署方式。
微服务:是一种架构设计方式。
集群:是一种物理形态
分布式、微服务、集群是从三个方向看过去的。刚开始学习的时候往往要去做一些比较,但这样往往会迷失在其中。让我们忘掉以前学习的东西,重新来审视三个概念,并且从多个方面进行探讨。
分布式
分布式,顾名思义。分开部署,强调的是分,那不分开的部署是什么?就是把服务放在一台服务器上。对于简单的java应用来说,Tomcat+war+db可以构成一个服务,部署在一台服务器上;上述讲清楚了不分开部署的概念,现在我们来看一下分开部署。
有一些开发经验的同学,应该都了解生产环境的数据库一般是不和应用放在同一个服务器上,所以现在就变成了tomcat +war,db各自占用一台服务器。这就是分布式,db与应用程序分开部署。
集群
集群,集和群都在强调一个概念,那就是多!!!既然谈到多,那什么是单?单机游戏一个人玩!!一个服务。物以类聚,相似的东西才能在一起。集群就是多个服务,多个一模一样的服务的集合。同一个业务,部署在多个服务器上。(即:多台服务器部署相同应用构成一个集群)
分布式与集群
分布式:合与分的较量。集群:多与少的区别。大家先自行体会下多与合的区别,再想想分与少。个人感觉集群的概念相对分布式较好理解。接下来我们从集群开始谈谈它们分别解决了矛盾。
集群主要解决缓解并发压力和单点故障转移问题。这是多能解决的问题,那合能解决这个问题吗,合一定是单(这里的单指的是服务只有一个,并不是服务器只有一个!!),然后。。。你就懂了。
分布式主要解决,单机无法容忍开发、性能、架构等多方面的问题。这是分能解决的问题,那多能解决这个问题吗?这听起来有“以点带面”的感觉,打个比方,有个人手没了,你把人手剁了,在手的地方安装了个大活人。一个系统分为很多个子系统,这些子系统相互配合完成整个的业务逻辑叫做分布式,分布式中每一个节点都可以配置集群。
最后我们再看点相对抽象的概念,分布式其主要的功能是用了将我们的系统模块化,将系统进行解耦的,方便我们的维护和开发的,但是其并不能解决我们的并发问题,也无法保证我们的系统在服务器宕机后的正常运转。集群,就是多个服务器处理相同的业务,这在一方面可以解决或者说改善我们系统的并发问题,一方面可以解决我们服务器如果出现一定数量的宕机后,系统仍然可以正常运转。
集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统(集群的每个节点都是完整逻辑的服务,这个服务的部署方式是分布式);
分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。(分开部署的每个节点,都是高可用的,都可以做成一个集群)
微服务
分布式:分散压力(各个方面的矛盾(压力),并不局限于性能)。
微服务:分散能力。
微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
微服务架构既进行垂直拆分,又进行了水平拆分。
一些鬼话
垂直分布: 分布式处理等同于组织的客户端 - 服务器应用 作为多层体系结构 。在不同的机器上放置逻辑上的不同的组件。
水平分布: 客户端和服务器的分布 - 在现代 架构中更常见。 客户端或服务器可以是物理上分成逻辑 等同的部分,但是每个部分在其自身上完整的数据集的共享操作,从而平衡负载。