springcloud

本文详细介绍了SpringCloud中的五大核心组件,包括Eureka服务发现、Ribbon客户端负载均衡、Hystrix熔断器、Zuul网关以及Gateway的负载均衡策略。此外,还讨论了SpringFeign如何实现负载均衡和Gateway逐渐取代Zuul的原因。
摘要由CSDN通过智能技术生成

五大组件

springclound的5大组件包括,

  • 服务中心
    用户实现服务治理,常用的是eureka和Nacos,服务架构中的三个核心角色包括服务注册中心、服务提供者和服务消费者。
    Nacos是阿里巴巴集团的开源平台,专门为动态服务发现、配置和服务管理设计。
  • 负载均衡
    用于提供客户侧的软件负载均衡算法,常见的有Netfix的Ribbion组件。
  • 熔断降级
    hystrix用于防止因服务调用失败导致的连锁反应,如大量请求涌入导致服务瘫痪。断路器模式允许应用程序检测故障是否已解决,并在问题解决后尝试再次调用操作,以保证服务的高可用性。
  • 网关
    通常指的是Zuul和gateway
  • 分布式配置管理
    支持分布式系统中外部化配置的管理,当配置文件发生变化时,会自动刷新配置。这可以通过Spring Cloud Config实现

Netflix Eurek(服务发现)

相当于zk,提供服务注册与发现功能。
eureka客户端每隔30秒发送一次心跳来续约,通过续约来告知eurkea该eurkea客户端仍然存在,没有出现问题;正常情况下,如果eureka server在90秒内没有收到客户端的续约,他会将实例从其注册表中删除。

Netflix Ribbon(客户端负载均衡)

概念

  1. ribbon是一个实现了客户端侧负载均衡的组件,Netflix开源的,主要功能提供客户端侧负载均衡。
  2. 服务调用过程中的负载均衡一般使用springclound的ribbon组件实现,feign的底层已经自动集成了ribbon,使用起来非常简单。
  3. ribbon默认的负载均衡策略有七种:
  • RoundRobinRule
    简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
  • 权重策略(WeightedResponseTimeRule)
    根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大
  • 随机策略(RandomRule)
    从服务提供者的列表中随机选择一个服务实例
  • 最小连接数策略BestAvailableRule
    最小连接数策略:BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
  • 重试策略:RetryRule
    重试策略:RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。此策略的配置设置如下:
  • 可用性敏感策略(AvailabilityFilteringRule)
    先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例
  • 区域敏感策略(ZoneAvoidanceRule)
    区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。

Netflix Hystrix(熔断器)

Netflix Zuul(gateway效率更高)

定义

zuul是spring clound中的微服务网关,是spring cloud 组件之一,用于提供动态路由、请求过滤和负载均衡等功能。

作用

  1. 路由(Routing)
    zuul可以根据路由规则将请求转发到不同的后端服务,通过配置路由规则,并将请求发送到相应的服务实例上。
  2. 过滤 filtering
    过滤器可以对请求进行预处理或者后处理,从而实现请求的定制化处理和保护。
    通过定义过滤器,可以在请求的不同阶段进行操作,比如身份验证、请求日志记录、性能监控等。
  3. 负载均衡(Load Balancing)
    zuul可以与负载均衡组件ribbon集成,实现请求的负载均衡。
    通过配置负载均衡规则,zuul可以将请求平均的分发到后端的多个服务实例上,提高系统的可用性和性能。
  4. 容错和故障转移(Fault Tolerance)
    zuul集成了Hystrix来提供容错和故障转移的能力,当后端服务发生故障和超时时,zuul能够使用断路器模式和熔断来保护整个系统不受影响。
    总之,zuul作为服务网关提供了动态路由、请求过
    滤、负载均衡、容错和故障转移功能。

Gateway

gateway限流

  1. 计数器算法:以QPS为100举例,如果1秒钟内钱200ms请求数量到达了100,后面800ms中的请求都会被拒绝,这种情况称为”突刺现象“
  2. 漏桶算法:可以解决突刺现象。比如创建一个很大的队列来接收请求,一个较小的线程池来处理请求。但是也有极限情况,当队列满了时, 请求也会拒绝掉。
  3. 令牌桶算法:可以说是漏桶算法的改进。在桶中放令牌,请求获取令牌后才能继续执行。如果桶中无令牌,请求可以选择进行等待或直接拒绝。

gateway网关负载均衡策略

uri的配置为协议为lb,表示启用gateway的负债均衡功能。如lb://seviceName为spricloud gateway在微服务中自动为我们创建的负债均衡的uri。

  1. 轮询策略 (Round Robin)
    最简单的负载策略,将请求一次分配给各个服务器,能实现请求的平均分配。
    此策略使用与服务器性能比较均衡的场景,假如服务器性能有的好有的差,可能导致某些服务器负担过重。
  2. 加权轮询策略 (Weighted Round Robin)
    在轮询策略的基础上加了权重的概念,每个服务器都有一个权重值,权重值越高的服务器会被分配更多的请求,动态地调整权重值。
  3. 最少连接数(Least Connections)
    根据服务器当前的连接数来决定请求的分派。动态选择当前连接数最少的服务器来处理请求,以确保服务器的负载相对均衡。
  4. IP哈希策略
    根据请求的源IP地址进行散列运算,将相同源IP地址的请求分发给同一台服务器,从而确保来自同一客户端的请求能被发送到同一台服务器上,提高请求处理效率。

手工指定策略

在这里插入图片描述

gateway逐渐取代zuul的原因

  • gateway是基于非阻塞和响应式编程的webflux框架构建,相比zuul,使用少量的线程处理大量的并发请求,性能更好。
  • gateway提供了更灵活的路由配置方式,更多的过滤器选项以及更强大的自定义能力
  • gateway使用基于springboot的注解配置,可以充分利用spring框架的便利性和灵活性。

在这里插入图片描述

Spring Cloud Config

spring feign

feign如何实现负载均衡

通过配置

@Configuration

public class RestTemplateConfig {

@Bean

@LoadBalanced

public RestTemplate getRestTemplate() {

return new RestTemplate();

}

@Bean

public RoundRobinRule myRule() {

return new RoundRobinRule();//轮询策略

// return new RandomRule();//随机策略

// return new AvailabilityFilteringRule();//首先会过滤掉故障机或者并发链,接数超过阈值的服务器.剩余的机器轮询配置

// new WeightedResponseTimeRule();//服务器影响时间越快,则权重越高

// new BestAvailableRule();//最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的

}

}
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值