关于集群,负载均衡,分布式,服务化,微服务的理解

最近公司一直想搞重构,把原来单机的程序,搞成分布式的,但是对于一些大家平时喊的比较响亮的术语,感觉自己理解的不够深刻,同时也感觉有些人虽然在说一些术语,但是他们本身理解的也并不是特别正确,然后自己也上网找了一些术语的介绍,然后想自己写一篇总结,希望与各位同道中人共同探讨。

集群是个物理形态,分布式是个工作方式。

  • 分布式:一个业务分拆多个子业务,部署在不同的服务器上
  • 集群:同一个业务,部署在多个服务器上
  • 负载均衡,是集群中的调度方式

1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。负载均衡是指在集群中如何均等的分配任务,不至于一个服务器上承载过多的任务。

分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。

举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。这里的响应服务器,负责负载均衡的调度。

再说一个具体的例子,就是我进行我的一个应用程序,要进行三个业务,呼叫,短信,GPS三个业务,然后我为了分散压力做成集群模式,就是把应用程序部署在三台服务器上,然后前面有个响应服务器,Nginx,负责负载均衡调度。

可以用下图来表示集群以及负载均衡。

 

 

而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。

分布式可以用下图来表示

 

 

2:简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

例如:如果一个任务由 10 个子任务组成,每个子任务单独执行需 1 小时,则在一台服务器上执行该任务需 10 小时。

采用分布式方案,提供 10 台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是 Hadoop 的 Map/Reduce 分布式计算模型)

而采用集群方案,同样提供 10 台服务器,每台服务器都能独立处理这个任务。假设有 10 个任务同时到达,10 个服务器将同时工作,1 0小时后,10 个任务同时完成,这样,整体来看,还是 1 小时完成一个任务!


好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。

具体的表示如下图所示:

服务化:

服务化和集群,分布式不是一个级别或者是类型的概念,服务是类似于一个设计模式,就是类似于我们软件里常说的抽象层,也可以说是依赖于接口编程,举个例子,就是不同的业务网元都和数据库打交到,每个模块都去调用数据库进行增删改查,这样就比较乱,我们单独写个模块进行对数据库底层的操作进行封装,这就是一个服务,服务化与本地调用rpc调用等没有什么关系。

 

另外,还有一个概念和分布式比较相似,那就是微服务

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力那么分布式是否属于微服务呢?

答案是肯定的。微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。

那么微服务一定属于分布式吗?

不一定,微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。

分布式和微服的架构很相似,只是部署的方式可能不一样而已

在文章的最后,我想记录下我之前看过的一篇文章关于集群,分布式,负载均衡的一个很幽默的例子,这个可能更有助于大家的理解。

转载自:https://blog.csdn.net/afsya/article/details/84584515

一个项目的成功与否,往往是由用户的多少来计算,随着访问量的上升,如何提高效率、保障系统的可用性就成了必须要解决的问题。
不论是面试,还是公众号里的文章,集群、负载均衡、分布式,这三个词的出现频率总是很高。

栗子
从集群、负载均衡、分布式的定义来看,乍听上去都是为了解决高并发的,无法很直观的发现它们的区别与联系。下面我们通过一个栗子,看看它们到底是做什么的。

二蛋是个心怀天下的吃货,为了让更多的人吃上好吃的,于是开了个饭馆儿,处于对自己的充分信任,一个员工都没有,惨状如下图:

终于有一天,二蛋受不了了,决定雇两个像自己一样厉害的同志,立志做个甩手掌柜的,嚣张状如下图:

二蛋的两个手下所形成的,就是集群,部署两套完全一样的,执行相同任务的项目,就像多个 tomcat 下都部署同一个项目。那么二蛋就完全没有事了吗?不是的,分配工作的任务由他负责,负载均衡就是在这里。

在上边的结构里,二蛋轻松了不少,可两个手下很快就提出了抗议,从头忙到尾不说,还要干些不擅长的工作,于是二蛋狠了狠心,又招来几批人,痛心状如下图:

根据业务分组,每组人马就只负责自己擅长的,就是分布式。而且今天记账的同志请假了,并不影响整个饭馆儿的运营,最多只是账晚点再计嘛。每种业务只招一个人的风险还是很大,因为如果厨子病倒了,饭馆儿照样不能营业。所以分布式中往往附带着集群,那么有了集群,怎么分发请求呢,还是会用到负载均衡。

这个图原作者没有给出,大致就是在采购  做饭  搞卫生,后面加个负载均衡服务器,然后后面变成集群模式,多个人干活。

总结
集群:运行多个做同样工作的程序,相当于把现有的项目部署到多个服务器上。
负载均衡:分发请求给集群中的某一台服务器。
分布式:根据业务拆分出独立的服务,可以拥有自己的数据库,服务之间互不影响。
关系:为了使服务更加灵活,我们希望每种业务都有自己独立的服务,可供任何项目调用,所以用到了分布式;想要使服务高可用,就需要再以集群的方式部署,那么管理请求时,自然会用到负载均衡。
负载均衡
常用的负载均衡工具有 nginx,zookeeper,eureka 等,我们需要配置集群中的各台服务器信息,还可以指定分发请求的方式。
 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值