集群,分布式,微服务,SOA的理论知识

什么是集群

以下内容来源维基百科:

计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多

集群技术特点:

  • 通过多台计算机完成同一个工作,达到更高的效率。

  • 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。

集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。

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

但问题是用户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个“调度者”的角色,用户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这个“调度者”有个牛逼了名字——负载均衡服务器。

集群结构的好处就是系统扩展非常容易。如果随着你们系统业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了。但是,当你的业务发展到一定程度的时候,你会发现一个问题——无论怎么增加节点,貌似整个集群性能的提升效果并不明显了。这时候,你就需要使用微服务结构了。

在维基百科上说得也挺明白的了,我来举个例子吧。

  • 小周在公司写Java程序,但公司业务在发展,一个Java开发者可能忙不过来,小周有的时候也得请个假呀。于是请了3y过去一起做Java开发。平时小周和3y就写Java程序,但3y可能有事要回学校一趟。没事,公司还有小周做Java开发呢,公司开发还能继续运作。

    • 3y跟小周都是做Java开发

    • 3y来了,小周的工作可以分担一些。

    • 3y请假了,还有小周在呢。

我写了一个910便利网发布到服务器去了,现在越来越多的人访问了,访问有点慢,怎么办???很简单,(只有充钱才能变强),加配置吧(加cpu,加内存)。升级完配置之后,访问人数越来越多,于是发现又不禁用啦,在这台机器上加配置已经解决不了了,怎么办???很简单,(只有充钱才能变强),我再买一台服务器,将910便利网也发布到新买的这台服务器上去

特点:

  • 这两台服务器都是运行同一个系统--->910便利网

好处:

  • 本来只有一台机器处理访问,现在有两台机器处理访问了,分担了压力

  • 如果其中一台忘记缴费了,暂时用不了了。没关系,还有另一台可以用呢。

集群同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

什么是分布式

以下内容来源维基百科:

分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标

我也来举个例子来说明一下吧:

  • 现在公司有小周和3y一起做Java开发,做Java开发一般jQuery,AJAX都能写一点,所以这些活都由我们来干。可是呢,3y对前端不是很熟,有的时候调试半天都调不出来。老板认为3y是真的菜!于是让小周专门来处理前端的事情。这样3y就高兴了,可以专心写自己的Java,前端就专门交由小周负责了。于是,小周和3y就变成了协作开发

    • 3y对前端不熟(能写出来),但在调试的时候可能会花费很多时间

    • 小周来专门做前端的事,3y可以专心写自己的Java程序了。

    • 都是为了项目正常运行以及迭代。

我的910便利网已经部署到两台服务器去了,但是越来越多的人去访问。现在也逐渐承受不住啦。那现在怎么办啊??那继续充钱变强??作为一个理智的我,肯定得想想是哪里有问题。现在910便利网的模块有好几个,全都丢在同一个Tomcat里边。

其实有些模块的访问是很低的(比如后台管理),那我可不可以这样做:将每个模块抽取独立出来,访问量大的模块用好的服务器装着,没啥人访问的模块用差的服务器装着。这样的好处是:一、资源合理利用了(没人访问的模块用性能差的服务器,访问量大的模块单独提升性能就好了)。二、耦合度降低了:每个模块独立出来,各干各的事(专业的人做专业的事),便于扩展

特点:

  • 将910便利网的功能拆分,模块之间独立,在使用的时候再将这些独立的模块组合起来就是一个系统了。

好处:

  • 模块之间独立,各做各的事,便于扩展,复用性高

  • 高吞吐量。某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了

分布式一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)

集群/分布式

集群和分布式并不冲突,可以有分布式集群

现在3y的公司规模变大了,有5个小伙子写Java,4个小伙子写前端,2个小伙子做测试,1个小伙子做DBA。

  • Java,前端,测试,DBA的关系看作是分布式的

  • 5个Java看作是集群的(前端,测试同理)…

SOA:业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力,通过服务的组合和编排来实现上层的业务流程 
作用:简化维护,降低整体风险,伸缩灵活 

猜你喜欢

转载自blog.csdn.net/zxl646801924/article/details/83782889