Spring Cloud - ribbon、hystrix、gateway

目录

1 ribbon 负载均衡组件

实现原理

拦截器

拦截了 openfeign,篡改了请求的访问地址,获取了被访问服务集群下面的所有节点的实例信息,执行一个加载轮询策略的方法,通过这个轮询策略从所有获取的实例信息当中,选择一个实例。

IRule 接口

客户端负载均衡和服务端负载均衡的区别

客户端负载均衡 访问由请求发起者决定

服务端负载均衡 访问由 gateway、nginx 决定

如何配置不同的轮询策略

在 application.yml 中进行轮询规则的配置,而且可以给不同的服务指定不同的策略。

常见的负载均衡算法

  1. 随机算法,顾名思义就是从可用的服务节点中,随机挑选一个节点来访问。

  2. 轮询算法,顾名思义就是按照固定的顺序,把可用的服务节点,挨个访问一次。

  3. 轮询算法能够保证所有节点被访问的概率相同,而加权轮询算法是在此基础上,给每个节点赋予一个权重,从而使每个节点被访问到的概率不同,权重大的节点被访问的概率就高,权重小的节点被访问的概率就小。

  4. 最少活跃连接算法,顾名思义就是每一次访问都选择连接数最少的节点。因为不同节点处理请求的速度不同,使得同一个服务消费者同每一个节点的连接数都不相同。连接数大的节点,可以认为是处理请求慢,而连接数小的节点,可以认为是处理请求快。所以在挑选节点时,可以以连接数为依据,选择连接数最少的节点访问。

2 hystrix

基本介绍

豪猪

断路器:在分布式体系下起到一个服务保护的作用。

服务降级

当 A 服务调用 B 服务时,B 服务发生 500 服务器异常,A 服务的断路器检测到 500 之后,会给出一个正确的响应结果(商品查询失败来代替不友好的 500 服务器错误信息)。

服务质量的降级,并不是说 B 服务不可用了。

代码实现

openfeign 已经集成了 hystrix 断路器功能

  1. feign 客户端注解里面增加 fallback 属性
  2. 在同级包下实现一个 feignFallBack 类,作为服务降级的处理类,并实现 feign 的接口,不要忘记加 component 注解进行实例化。
  3. 在 application.xml 中开启服务降级的配置

熔断机制

在一定时间范围内,请求错误的次数占总请求数的百分比,超过了一定的阈值(85%),开启熔断开关,开关一旦开启以后,后面所有的请求都发不过去了,会在一定时间内熔断开关处于一个半开状态,让一部分请求可以发送过去,如果失败的请求数比例依然很高,就从半开变为全开,所有的请求都过不去。如果请求失败比例恢复正常,就从半开变为关闭。

工作流程

请求 -> 是否使用缓存 -> 是否启用断路器 -> 信号量/线程池限流 -> 运行服务

缓存 之后的 流程 可能会出现 服务降级。

缓存机制

相同的请求直接返回缓存中的数据

限流

信号量限流

有 10 个信号量,一个请求发送需要消耗一个信号量,直到信号量变为 0,后面的请求拿不到信号量,就直接返回降级消息,请求执行完毕以后,信号量加 1。

线程池限流

hystrix 会创建一个工作线程池,初始有 10 个线程可以使用,一个请求需要占用一个线程,请求完毕之后会释放这个线程,如果线程池没有空闲线程了,就返回降级消息。

应用场景

请求错误,抛出异常,异常过多对服务器的压力开销比较大。

防止出现服务雪崩,导致整个服务的调用链路全部瘫痪.

3 gateway

基本介绍

第一代网关 zuul,性能较差,同步调用的方式

第二代网关 gateway,性能不错,异步调用的方式

支持动态路由

动态路由配置:lower-case-service-id

服务名大小写配置:locator.enabled

开启网关日志:loggin.level.springframework.cloud.gateway=debug

自定义全局过滤器

实现网关同一鉴权

网关限流(需要配合 redis 一起使用)

服务集群级别
接口级别
用户级别
ip级别

上一篇:SpringCloud之Ribbon负载均衡


下一篇:SpringCloud微服务Ribbon负载均衡及Feign应用