首页 > 技术文章 > 详细的讲一下微服务框架--SpringCloud

leleChang 2020-05-14 15:42 原文

一:微服务架构?

 1.为什么需要微服务架构

    大家都知道,最开始开发系统就是单机模式(only one computer)。但是随着网络的不断发展,数据不断的增加,业务不断的增加,之前在一台机器上实现的服务现在性能上更不上了,所以很需要一种模式来解决这个问题---微服务架构由此诞生。

 2.微服务架构是什么

    大白话讲一下就是:把一个大型的单个应用程序和服务拆分为多个的支持微服务,各自都有对应的业务。个人认为就是按照业务来划分成不同的微服务。

  

 3.其相对于之前的单机模式的优势:

   其处理复杂的系统时表现出高性能,易维护,好协调等好处

         (1)通过分解各个微服务,以及各大组件技术,使得服务更好流畅的执行,分工明确。比如说之前饭店有10个人,每个人既要跑堂,又要记账,又要做饭;这很麻烦;然而使用微服务架构后每个人都有了i明确的分工,自然就搞笑了很多,责任也好追查。

          (2)微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响。这种改变可以加快部署速度。UI团队可以采用AB测试,快速的部署变化。微服务架构模式使得持续化部署成为可能。

   (3)这种架构使得每个微服务都可以有专门开发团队来开发。开发者可以自由选择开发技术,提供API服务。这种自由意味着开发者不需要被迫使用某项目开始时采用的过时技术,他们可以选择现在的技术。甚至于,因为服务都是相对简单,即使用现在技术重写以前代码也不是很困难的事情。

二:当今最流行的微服务框架---Spring Cloud

           Spring Cloud整体核心架构只有一点:Rest服务。也就是这一点与其他所有的微服务框架都不同,其他都可以算是PRC框架,而SpringCloud是基于Restful实现的服务调用。而且其社区牛逼,技术更新相比很快。还有一点就是该框架提供的是全家桶服务;不像Dubbo这些框架缺少很多组件,就采用其他组件来弄,搞得像是个杂牌机一样;不过也正如Doubbo的一位负责人说的,Dubbo他的目的和SpringCloud不一样,其旨在解决各个微服务的性能,管理等。接下来我们主要讲各大组件技术。

   1.Eureka(注册中心)

      

  

         就是在服务的调用和被调用之间加了一个中间件。这个Rureka主要分为服务器和客户端。

         服务生产者把服务注册到Eureka;服务消费者在Eureka中找到想要的服务API,并进行调用。Eureka大多都是用集群,其保证的是AP原则。就是可用性和分区容错性。

    2.Ribbon,Feign(多业务端的负载均衡)

    

    SpringCloud Ribbon 是一个基于Netflix Ribbion实现的的客户端负载工具。主要功能是提供客户端的软件负载均衡算法。通过SpringCloud的封装,可以让我们轻松的将面向服务的REST服务请求自动转换为客户端负载均衡的服务调用。服务提供者只需要启动多个服务实力示例并注册到一个注册中心或是多个相关联的服务注册中心。服务消费者直接通过调用@LoadBalanced注解修饰过的RestTemplate来实现面向服务接口调用。

              大白话时刻:就是将LB逻辑集成到消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

    Feign是一个声明式WebService端。使用Feign能够让编写WebService客户端更加简单,他的使用方法是定义一个接口,然后在其上面添加注解,其与Rureka和Ribbon组合使用以支持负载均衡。

    Feign集成了Ribbon:利用Ribbon某个微服务维护了服务列表信息,通过集成IRule这个接口,可以实现不同的LB算法。而与Ribbon不同的是通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

    3.Hystrix熔断处理

 

   Hystrix主要是处理分布式系统的延迟和容错的开源库。通常在分布式系统中会出现服务A依赖服务B,服务B有依赖服务C(这种情况叫做扇出);而只要B断开或出问题的话,时间一长会导致所有的服务都卡在这里就会出现系统崩溃。那么Hystrix能够保证在一个微服务出现问题了,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

   而把其称之为断路器,也是在一个服务单元发生故障后,通过故障检测(类似熔断保险丝),向调用方返回一个符合预期,可处理的备选响应(Fallback),而不是长时间的等待或者抛出调用方无法处理的异常。这样就保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

   其能够完成服务降级,服务熔断,服务限流,接近实时的监控。其实和前面说的意思差不多。

    4.ZUUL网关代理。

    

    Zuul服务器也是会注册进Eureka中,提供代理,路由,过滤三大功能呢。

              Zuul注册进Eureka中,同时也会从Eureka的服务列表中获得其他的微服务信息。即以后的微服务都是通过Zuul跳转后获得的。

       5.SpringCloud Config分布式配置中心

      

    这个理解起来就很简单了。就是把每一个微服务提供者的配置文件统一管理。可以放到Git上,或者其他服务器利用SVN来管理。

三:总结

SpringCloud是一个提供全家桶的微服务架构。下面是常用的组件架构图。

推荐阅读