集群、分布式、微服务

集群

在网站的用户量比较小、并发量不高的情况下,我们可以只用一个服务器来对外提供服务。但随着网站的发展,用户量可能会变得越来越大,并发量也随之增高,这个时候我们的单体服务器压力就会很大,可能会导致服务响应缓慢甚至是服务不可用。

大家都是程序员,那就拿程序员举个例子,比如我们公司某个团队接外包项目,而这个团队的成员只有一个人。。。UI设计、前端开发、后端开发、测试、数据库管理、运维等等都是这个苦逼老哥一个人包揽,那接的项目比较小还好,一旦开始接的项目比较大了,那这老哥肯定是忙的焦头烂额的。

出现了这种问题,我们可以从两个角度出发考虑解决方案,一种是纵向的扩展,一种是横向的扩展。

纵向的角度来考虑的话,那我们可以把这个老哥裁掉,再雇个能力更强的大佬来干,但是以前的那个老哥一个月开五千块就能给你干,现在雇的大佬需要每个月支付五万块的报酬!而且,随着公司的发展,接的项目越来越大,那么可想而知,以后可能还会裁掉现在的大佬,继续雇佣更大的大佬,周而复始的重复着这样的操作,甚至将来某一天,项目大到不管多优秀的大佬都不能在截止日期内完成的程度。类比到我们的生产环境,这种情况就是,现在的服务器不行了,那么就换一台性能更强的,我们用更强劲的CPU,更大的内存,更快速的存储设备。而这样做的成本在初期可能还可以接受,但随着网站的发展,这种解决方案的成本将是指数级的提升。

从横向的角度来考虑的话,我们可以再雇个跟现在这个老哥能力差不多的员工,他也需要UI设计、前端开发、后端开发、测试、数据库管理、运维等等这些技术能力,同样工资也是5000块,两个人一同分担这个任务,这样我们保证了项目的如期完成,同时用人成本也大大小于雇佣一个大佬的成本。并且,随着项目的发展,两个人干不过来,那就三个人干,三个人干不了就四个人干。。。类比到我们的生产环境,这种情况就是,我们不仅仅使用一个服务器,而是再追加几个服务器,这些服务器之间可能性能有所差别,但是对外都提供相同的服务。通过负载均衡技术,将客户端的请求派送给某一个服务器,这样一来,各个服务器互相分担压力。

集群,就是使用这种横向扩展的手段,在性能到达瓶颈时,通过增加服务器的数量,来分担压力,多个提供相同服务的服务器就构成了集群。而且,集群还有一个好处是,就算某个服务器宕机了,那么我们的服务依然是可用的,而纵向扩展的情况下,服务器宕机将导致网站彻底瘫痪。

分布式

我们现在知道了使用集群,可以分担服务的压力,提高性能。可我们想速度再提高,那么这种单纯的增加服务器数量将很难再有质的的改变。

我们再来看上面我举的程序员的那个例子,我们换一种思路,不再雇佣这种全栈式的老哥,而是根据不同的工作内容招人,比如前端开发、测试开发、后台开发等。

分布式就是采用的这种思想,我们将一整个大的任务,拆分成一些独立的子任务,然后将这些子任务部署到不同的服务器上。客户端提交请求后,部署了不同子任务的服务器完成自己的任务,最后归并处理结果将响应回馈客户端。

说到这,我们可以看出集群和分布式的区别是非常明显的,集群是通过提高单位时间内执行的任务数来提升效率的,而分布式则是以缩短单个任务的执行时间来提升效率的。

下面的图片来自李智慧老师所著的《大型网站技术架构》一书。

在这里插入图片描述
上图的应用服务便是使用了集群部署,多个应用服务器提供相同的服务,使用负载均衡技术将不同的请求转发到不同的服务器上,以缓解海量的用户请求所带来的单机压力。

在这里插入图片描述
上图就是一个最简单的 “分布式部署” (其实实际生产场景比这复杂的多,主要还是对应用服务进行拆分,然后分布式部署)。我们将应用服务、文件服务、数据库服务拆开,部署到不同的服务器上。我们不难发现,单纯的使用分布式而不使用集群也不是一个明智的选择,因为任意一个节点(子任务)出了问题都将导致服务不可用!

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

如下图所示
在这里插入图片描述

微服务

个人理解,微服务跟分布式非常相似,只不过微服务可以作为一个独立的服务。微服务每个模块就相当于一个单独的项目,所以这个服务可以单独部署运行,不同的服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。

使用微服务架构设计,将一个大的系统拆分成许多模块,而且这些模块的边界相当清晰,某个服务的变动不会连带着其他服务跟着遭殃,这也是一种典型的低耦合实现。

写在最后

这篇文章是我自己的学习笔记,参考了一些书籍和链接,再加上了些自己个人的理解。
主要参考的书籍和链接内容如下:

《大型网站技术架构:核心原理与案例分析》- 李智慧 著
《从 Paxos 到 ZooKeeper : 分布式一致性原理与实践》- 倪超 著

一分钟弄懂什么是分布式和微服务
集群,分布式,微服务概念和区别
大白话解说,半分钟就懂 — 分布式与集群是什么 ? 区别是什么?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值