虽然身处在一个前端,但是依旧避免不了从后端口中彪出一些咱不太理解的词语,微服务、集群、分布式、负载均衡、mq、redis、kafka等。今天主要谈谈集群和分布式的理解。
先来看看一个简单的业务发展史。
现在一家小电商创业公司要做个电商系统,噼里啪啦一顿整,业务开发完成,tomcat部署上线。
在业务量小的时候,一台机器访问自然是没有什么任何问题的,俺扛得住。
随着公司业务量逐渐增大,原有的那台服务器扛不住了,这可咋整?
诸子百家,唯我纵横
咱们先来看下如何纵向扩展解决问题
加配置加配置加配置,8核上16,16G上64G,不行就128G
那么是不是可以无限增加配置了,想想肯定也是不可能的,单机终究是有上限的。而且,配置double一下,cpu计算能力并不会double,并且提升比率会逐渐降低。
经济学中有一个很重要的概念:边际效用递减
这个应该很容易理解,就像公司刚开始 初级程序员搞不定 ,换个高级的,高级不行,换成专家。
那么既然纵向的垂直方向已经无法深耕了,这个时候就得横向水平扩展了,
增加服务器,一台不行就来两台,两台不够再来一台。
这么多服务器组在一起其实就形成了集群
当然这里面就需要一台机器专门来做调度了,譬如Nginx之类的。这么多机器在工作,该交由谁来处理。
这里就想到了java里面线程池,那么多的worker,需要有个dispatcher来分发。
那么就这样无限增加机器就没有极限和弊端吗?
当然是不可能的,首先虽然有这么多的服务器,但是其实每台服务器上部署的代码都是同一套,你的整套商品订单物流系统数据处理其实还是全部在一台服务器上处理,一台机器的处理能力终究是有上限的,那么有没有什么好的办法了? 有,硬件上没法加,那就得在软件上进行优化。一台机器上的服务咱可以再给他垂直细分一下,商品服务,搜索服务,订单服务,用户服务,是否可以将他们给独立出来,我一台机器只处理一件事情。
专业的事情交给专业的人做
这里每个独立服务的部署其实就是所谓的分布式
当然这里面就需要的事情就是服务间的通信了,RPC调用和消息机制。
这里就挺像咱们移动端开发历程,最开始一个module,然后进入模块化,一个模块一个功能,跨模块通信的基于spi机制的RPC框架,eventbus消息组件。
最后,到了这一步是不是就算完了呢?要是一台机器处理一个服务还是不够用了,对,那咱们再一下水平扩展一下,十台机器跑一个服务,服务大了继续拆小,往往复复,无穷无尽也。
生活中,这种纵横模式的例子也不少。
- 一个手抓饼的路边摊,一个人负责收钱、做饼、卖饼,简直一全栈工程师。
- 生意好客户多了,然后升级成小店铺,有了收银员、服务员、厨师。一个人变成是三个人,这就是分布式了。
- 客户愈发增多,一个厨师不够用了,再招两个厨师。那么三个厨师相当于横向扩张形成一个集群了。
- 周杰伦代言了你的手抓饼,一个店铺排队一天有的人都吃不到手抓饼了。在进行扩张,开连锁店铺,多个店铺又是一个维度的集群。
- 每个店铺分别生产手抓饼效率不高,将店铺集群模式再给分布式改造下,门面店铺只负责卖,专门厨房负责生产然后发送到店铺去卖。
- ...
事实上,现实中很多企业也确实是这样的,以前我配眼镜的时候,都是店里选好镜框,然后机器直接给你做出来一小时眼镜配好。最近一次配眼镜是在SOHO这个品牌,发现他们是当天拿不到眼镜的,因为他们店里面没有机器,只负责卖眼镜,登记好后后台制作好后快递给你。可见卖眼镜的都知道分布式部署服务,哈哈哈。
网友评论