ironMan 的个人博客 ironMan 的个人博客

记录精彩的程序人生

目录
如何通俗易懂的解释微服务是个什么玩意儿?
/  

如何通俗易懂的解释微服务是个什么玩意儿?

一、前言

学习微服务之前必须要了解的基础知识

最近某某项目上要求使用微服务架构,技术文档高深莫测,不明觉厉。公司对应推出了支持微服务框架的全新版本,号称全面拥抱SpringCloud,一切都彰显着这个新名词的来势汹汹。那这么牛逼的玩意儿到底是个啥,是干啥用的,为啥要用它?不要慌,学习它之前必须要先了解一些基础知识。

二、集群/分布式/微服务/SOA是什么?

像我这种技术小白,看到这些词(集群/分布式/微服务/SOA)的时候,感觉就是遥不可及的(高大尚的技术!!)。就好像刚学Java面向对象的时候,在论坛上翻阅资料的时候,无意看到"面向切面编程",也认为这是遥不可及的(高大尚的技术!!)。

但真正接触到"面向切面编程"的时候,发现原来就是如此啊,也没什么大不了的。只不过当时被它的名字给唬住了...

不知道各位在刚接触这些名字集群/分布式/微服务/SOA的时候,有没有被唬住了呢??

  • 下面我就简单说说这些名词的意思

2.1什么是集群

以下内容来源维基百科:

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

集群技术特点:

  • 通过多台计算机完成同一个工作,达到更高的效率。
  • 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。

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

  • 某项目业务系统访问量大,单纯在A机器上部署的一套系统已经不能满足要求,访问时延很高。于时在B机器上部署另一套业务系统,通过负载设备将请求分担。对应的集群有如下特点:

    • A机器跟B机器都是业务环节,都可以处理业务
    • B机器加入后,A机器的工作可以分担一些。
    • A宕机了,还有B机器在呢。

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

特点:

  • 这两台服务器都是运行同一个系统--->GUXING的个人博客

好处:

  • 本来只有一台机器处理访问,现在有两台机器处理访问了,分担了压力
  • 如果其中一台忘记缴费了,暂时用不了了。没关系,还有另一台可以用呢。

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

2.2什么是分布式

以下内容来源维基百科:

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

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

  • GUXING是一个业务开发,但是公司里人太少。GUXING只能又做业务开发、又做工具开发、又做UI设计。虽然也能行,但术业有专攻,GUXING离全栈工程师还很远。这时候公司招人了,小张做工具小赵做前端。GUXING立马压力顿减,干活儿也比原先有劲了。可以看出

    • GUXING对前端跟工具不熟(能写出来),但在调试的时候可能会花费很多时间
    • 小赵来专门做前端的事,GUXING可以专心写自己的Java程序了。
    • 都是为了项目正常运行以及迭代。

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

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

特点:

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

好处:

  • 模块之间独立,各做各的事,便于扩展,复用性高
  • 高吞吐量。某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了

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

2.3集群/分布式

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

现在GUXING的公司规模变大了,有100个小伙子写业务,50个小姐姐做前端,30个小伙子做工具,20个小伙子做测试。

  • 业务,前端,工具,测试的关系看作是分布式的
  • 100个业务看作是集群的(前端,测试同理)...

2.4分布式/微服务/SOA

其实我认为分布式/微服务/SOA这三个概念是差不多的,了解了其中的一个,然后将自己的理解往上面套就好了。没必要细分每个的具体概念~~
在我的理解,举个例子

  • 先有了分布式,类似于目前的公司的全流程电子交易系统,属于应用级别的分布式(微应用),由业务、工具、评标模块、金融模块共同组成。
  • 随着项目越来越大,服务器资源越来越充裕,架构越来越复杂,促使功能越发细化。原先的微应用往下拆成了
    各个服务提供方(Provider),彼此间通过接口交互。分工更明确耦合也更低,只是管理起来就不像中央集权那样好管理咯,建立一套同步协调机制就显得很重要。
  • SOA 面向服务真的就跟微服务概念一毛一样了,博主是体会不到啥区别(当然博主是菜鸡),如果大佬有知道的欢迎留言
    参考资料:
  • 分布式与集群的区别是什么?https://www.zhihu.com/question/20004877
  • 分布式、集群、微服务、SOA 之间的区别https://blog.csdn.net/heatdeath/article/details/79038795
    如何通俗易懂的解释微服务是个什么玩意儿?

标题:如何通俗易懂的解释微服务是个什么玩意儿?
作者:ironMan
地址:http://gxing.picp.vip/articles/2020/11/18/1605709490730.html