SpringCloud的五大组件

SpringCloud的五大组件

  1. 服务发现: Netflix Eureka
  2. 客服端负载均衡: Netflix Ribbon
  3. 断路器: Netflix Hystrix
  4. 服务网关: Netflix Zuul
  5. 分布式配置: Spring Cloud Config
    SpringCloud的五大组件_第1张图片

Eureka

普通的user-service对外提供服务的时候,需要对外暴露自己的地址。而consumer(调用者)需要记录服务 提供者的地址。将来地址出现变更,还需要及时更新。这在服务较少的时候并不觉得有什么,但是在现在日益复杂 的互联网环境,一个项目肯定会拆分出十几,甚至数十个微服务。此时如果还人为管理地址,不仅开发困难,将来 测试、发布上线都会非常麻烦
一个RESTful服务由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
SpringCloud的五大组件_第2张图片

Ribbon

Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
下面是用到的一些负载均衡策略:

  • 简单轮询负载均衡
  • 加权响应时间负载均衡
  • 区域感知轮询负载均衡
  • 随机负载均衡

SpringCloud的五大组件_第3张图片

Hystrix

断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正​​,应用程序可以尝试调用操作断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。

工作原理

  • 使用命令模式将所有对外部服务(或依赖关系)的调用包装在HystrixCommand或HystrixObservableCommand对象中,并将该对象放在单独的线程中执行;
  • 每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队);
  • 记录请求成功,失败,超时和线程拒绝;
  • 服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求;
  • 请求失败,被拒绝,超时或熔断时执行降级逻辑;
  • 近实时地监控指标和配置的修改

在Ribbon中使用熔断器

  1. pom.xml引入jar包;
  2. 启动类上添加@EnableHystrix注解;

在启动类上添加@EnableHystrix注解开启Hystrix的熔断器功能,改造后启动类如下:
`@EnableHystrix
@EnableEurekaClient
@SpringBootApplication
public class RibbonConsumerApplication {
@LoadBalanced注解,就代表启动Ribbon,进行负载均衡
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}

  1. 添加HystrixConsumerController;
  2. 开始测试

在Feign中使用熔断器

Feign在整合到Spring Cloud时已经自带了hystrix模块,所以pom.xml中不需要额外引入feign依赖

  1. application.yml中开启熔断器;
  2. 新建一个FeignClient接口;
  3. 添加熔断处理类UserFeginFailBackImpl;
  4. 添加Controller;
  5. 开始测试;

Zuul 网关

Zuul是spring cloud中的微服务网关。网关:是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。
Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。
Zuul网关不是必要的。是推荐使用的。
使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。

代替Zuul网关的Gateway

  • Spring Cloud Gateway是Spring官网基于Spring 5.0、 Spring Boot 2.0、Project Reactor等技术开发的网关 服务
  • Spring Cloud Gateway基于Filter链提供网关基本功能:安全、监控/埋点、限流等
  • Spring Cloud Gateway为微服务架构提供简单、有效且统一的API路由管理方式
  • Spring Cloud Gateway是替代Netflix Zuul的一套解决方案

Gateway加入后的架构

SpringCloud的五大组件_第4张图片

Zuul与Gateway的区别

Zuul构建于 Servlet 2.5,兼容 3.x,使用的是阻塞式的 API,不支持长连接,比如 websockets。另外Spring Cloud Gateway构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。同时,它支持 websockets,和 Spring 框架紧密集成,开发体验相对来说十分不错。

Spring Cloud Gateway 是Spring Cloud 推出了自己的服务网关,总的来说就是使用起来比 Zuul 更简单、配置更方便。

你可能感兴趣的:(萌新刚上道)