浅谈分布式和微服务

       最近的几年,互联网中分布式和微服务成为开发者必不可少的技能,但是在很多人学习的过程中会混淆分布式和微服务概念,导致在学习的过程中出现一种疑惑,接下来我将会细讲分布式和微服务。

           首先我们来讲一下分布式,说到分布式就不得不说到架构的演进,从开始的单体架构在到垂直架构在到现在的分布式架构。
               
          下图是某商城网描述一单体架构部署的例图,通过图案我们可以知道单体架构基本上不存在外部依赖,从客户端到服务端在到DB的读写都是比较直观的,在进入一个企业当中,通过一个URL请求基本上就可以贯穿查看整个项目,所以熟悉这种架构并没有多大的困难,这种架构的特点是容易部署,容易调试,因为部署在单台服务器上,打个war包或者jar包就满足了部署要求,它的缺点是开发效率低,维护困难(试想所有的业务都垄断到了一个项目里,经过多人开发,新人要读不同开发人员编写的代码是一件非常繁琐的事情,不能去细化业务),构建时间特别长,稳定性不高(就是所有代码写在一起运行在一个war包里,会发生想不到的问题),扩展性不高(无法满足高并发要求)。

浅谈分布式和微服务_第1张图片

   当访问量逐渐增大,单一应用增加机器带来的整体加速度越来越小,此时就诞生了垂直架构应用,将应用拆成互不相干的小应用,提升系统整体性能。
              下图是垂直应用架构部署的一个例图,垂直架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,解决了低并发问题,并且这种系统的拆分它的体积是可控的,一定程度上降低了开发人员之间的协调和维护的成本,进一步提升了开发效率,但是也带来了一些不足,如模块不能复用等问题,这种架构的诞生也加快前端组价的普及如vue。
                     浅谈分布式和微服务_第2张图片
             当垂直应用越来越多,应用之间交互不可避免,将核心业务和部门通用的服务抽取出来,形成一系列中间件,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。
             下图是分布式应用架构部署的一个例图,各服务之间的相互调用,由消息中间件,redis缓存,搜索引擎,CDN网络分发,日志收集系统等组成分布式的基础设施,通过将基础服务进行抽取,系统之间进行相互的调用,提高了代码复用和开发效率并且在一定程度上提高了并发性。

             

     浅谈分布式和微服务_第3张图片
        讲解了分布式之后,在来看看微服务,这里我们围绕Spring Cloud来讲解微服务,下图是Spring Cloud各组件调用图,我们先来看看执行流程,客户端发起的请求通过Nginx作为转发到Spring Cloud的网关,根据网关指定的规则在路由到具体的Service服务当中,各Service被调用前需要向Eureka注册中心先将Service服务注册上去,Service服务的相互调用通过Feign(伪RPC形式,Http形式)组件来进行通信,通过Service服务直接对DB或者Redis进行操作,Service服务在开发过程中通过Spring Cloud Config来管理配置同步到Git仓库中,通过Spring Cloud Bus作为一个开关来自动刷新配置,Hystrix dashboard组件来监控各Service服务的一个流量变化以及熔断状态等。

                      浅谈分布式和微服务_第4张图片

           通过了解Spring Cloud这个微服务框架后,本人觉得微服务侧向组件化的开发,以组件化的形式来提供服务,这里针对Serice A,Serice B,Serice C是开发人员主要开发的url所在,其他的组件都是围绕这几个Service提供服务的,例如Zuul作为路由转发,Hystrix为Service服务提供监控,熔断,服务降级等机制,Feign为服务提供通信等。
          Service A,B,C随着用户量不断的增长和业务体系的庞大可能还会面临着服务的拆分,拆分出D,E,F;这个时候就需要对业务的熟悉范围要加大,不然将会造成开发者在开发过程中面临着诸多问题。
        以上介绍了单一架构到分布式架构的演变和微服务框架Spring Cloud的讲解,总结出以下几点:
          1,分布式侧重系统部署方式,微服务侧重于架构设计方式(让开发更加专注每个Service的开发,更容易维护,理解),两则概念不同。

          2,微服务更加细化,每个Service服务都是单独部署的,跑在自己的进程里,但却又是分布式的管理,所以说微服务必然是分布式的。
          3,不管是微服务还是分布式都是有多个自治的处理元素组成的,多个节点多个服务器,对于高可用方案,基本处理手段都是通过集群来实现的。

 

 

你可能感兴趣的:(浅谈分布式和微服务)