SpringCloud Ribbon实现负载均衡,SpringCloud Ribbon自定义策略
========================
©Copyright 蕃薯耀 2021-03-09
http://fanshuyao.iteye.com/
一、SpringCloud Ribbon概述
SpringCloud Ribbon为客户端(消费者端)的负载均衡,Nginx为服务端的负载均衡。
官网地址:https://github.com/Netflix/ribbon
官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RC2/single/spring-cloud-netflix.html#spring-cloud-ribbon
翻译文档:http://docs.springcloud.cn/user-guide/ribbon/
二、SpringCloud Ribbon几种策略:
1、轮询策略:com.netflix.loadbalancer.RoundRobinRule
ribbon默认策略
2、随机策略:com.netflix.loadbalancer.RandomRule
使用jdk自带的随机数生成工具,生成一个随机数,然后去可用服务列表中拉取服务节点Server。
如果当前节点不可用,则进入下一轮随机策略,直到选到可用服务节点为止。
3、轮询失败重试策略:com.netflix.loadbalancer.RetryRule
轮询失败重试策略(RetryRule)是这样工作的,首先使用轮询策略进行负载均衡,
如果轮询失败,则再使用轮询策略进行一次重试,相当于重试下一个节点,看下一个节点是否可用,如果再失败,则直接返回失败。
4、响应时间权重策略:com.netflix.loadbalancer.WeightedResponseTimeRule
根据响应时间,分配一个权重weight,响应时间越长,weight越小,被选中的可能性越低。
5、并发量最小可用策略:com.netflix.loadbalancer.BestAvailableRule
选择一个并发量最小的server返回。如何判断并发量最小呢?ServerStats有个属性activeRequestCount,
这个属性记录的就是server的并发量。轮询所有的server,选择其中activeRequestCount最小的那个server,就是并发量最小的服务节点。
6、可用过滤策略:com.netflix.loadbalancer.AvailabilityFilteringRule
过滤掉连接失败的服务节点,并且过滤掉高并发的服务节点,然后从健康的服务节点中,使用轮询策略选出一个节点返回。
7、区域权重策略:com.netflix.loadbalancer.ZoneAvoidanceRule
复合判断server所在区域的性能和server的可用性,来选择server返回。
三、SpringCloud Ribbon客户端实现负载均衡策略,SpringCloud Ribbon自定义负载均衡策略
1、RestTemplate添加注解@LoadBalanced实现负载均衡
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestConfig { //@LoadBalanced实现负载均衡 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
2、启动添加注解@RibbonClient指定某微服务要实现的策略
@RibbonClient注解:
name为微服务名称,必须和服务提供者的微服务名称一致,configuration配置自定义的负载均衡规则
配置类不能被启动类扫描到(即不能放在启动类的包或者子包下),否则会成为全局配置:方式一:放在不同的包下。方式二:启动类排除该配置类
@SpringBootApplication @EnableEurekaClient //name为微服务名称,必须和服务提供者的微服务名称一致,configuration配置自定义的负载均衡规则 //RibbonConfig.class不能被启动类扫描到,否则会成为全局配置:方式一:放在不同的包下。方式二:启动类排除该配置类 @RibbonClient(name = "SPRINGCLOUD-EUREKA-SERVER", configuration = RibbonConfig.class) public class SpringCloudEurekaWebApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudEurekaWebApplication.class, args); } }
3、定义要实现的策略配置类,策略只能返回唯一一个bean对象
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.netflix.loadbalancer.AvailabilityFilteringRule; import com.netflix.loadbalancer.BestAvailableRule; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import com.netflix.loadbalancer.RetryRule; import com.netflix.loadbalancer.RoundRobinRule; import com.netflix.loadbalancer.WeightedResponseTimeRule; import com.netflix.loadbalancer.ZoneAvoidanceRule; /** * Ribbon为客户端的负载均衡,Nginx为服务端的负载均衡 * Ribbon自定义负载均衡策略 * * 策略只能定义一个,不能定义多个,不然会报错: * org.springframework.beans.factory.NoUniqueBeanDefinitionException: * No qualifying bean of type 'com.netflix.loadbalancer.IRule' available: * expected single matching bean but found 7: * randomRule,retryRule,roundRobinRule,weightedResponseTimeRule,bestAvailableRule,availabilityFilteringRule,zoneAvoidanceRule * */ @Configuration public class RibbonConfig { /** * 轮询策略(ribbon默认策略) * @return */ @Bean public IRule roundRobinRule() { return new RoundRobinRule(); } /** * 随机策略 * 随机策略:使用jdk自带的随机数生成工具,生成一个随机数,然后去可用服务列表中拉取服务节点Server。 * 如果当前节点不可用,则进入下一轮随机策略,直到选到可用服务节点为止。 * @return */ public IRule randomRule() { return new RandomRule(); } /** * 轮询失败重试策略 * 轮询失败重试策略(RetryRule)是这样工作的,首先使用轮询策略进行负载均衡, * 如果轮询失败,则再使用轮询策略进行一次重试,相当于重试下一个节点,看下一个节点是否可用,如果再失败,则直接返回失败。 * @return */ public IRule retryRule() { return new RetryRule(); } /** * 响应时间权重策略 * 策略描述:根据响应时间,分配一个权重weight,响应时间越长,weight越小,被选中的可能性越低。 * @return */ public IRule weightedResponseTimeRule() { return new WeightedResponseTimeRule(); } /** * 并发量最小可用策略 * 策略描述:选择一个并发量最小的server返回。如何判断并发量最小呢?ServerStats有个属性activeRequestCount, * 这个属性记录的就是server的并发量。轮询所有的server,选择其中activeRequestCount最小的那个server,就是并发量最小的服务节点。 * @return */ public IRule bestAvailableRule() { return new BestAvailableRule(); } /** * 可用过滤策略 * 策略描述:过滤掉连接失败的服务节点,并且过滤掉高并发的服务节点,然后从健康的服务节点中,使用轮询策略选出一个节点返回。 * @return */ public IRule availabilityFilteringRule() { return new AvailabilityFilteringRule(); } /** * * 策略描述:复合判断server所在区域的性能和server的可用性,来选择server返回。 * @return */ public IRule zoneAvoidanceRule() { return new ZoneAvoidanceRule(); } }
(如果文章对您有所帮助,欢迎捐赠,^_^)
================================
©Copyright 蕃薯耀 2021-03-09
http://fanshuyao.iteye.com/
相关推荐
Spring Cloud是构建微服务架构的一套工具集,其中Ribbon是它提供的一个客户端负载均衡器,可以帮助我们实现服务间的智能路由。本篇文章将详细探讨如何在Spring Cloud中使用Ribbon实现负载均衡。 首先,我们要理解...
spring cloud gateway的负载均衡和动态路由的实现 demo_01,demo_02,demo_03 这三个服务相当于是集群的微服务 gateway这个服务是 springcloude gateway + ribbon 做的负载均衡 gateway_01 这个服务 是动态路由的...
在Spring Cloud生态系统中,Spring Cloud Ribbon是一个至关重要的组件,它主要负责实现客户端的负载均衡,以确保服务间的调用能够均匀地分散到各个实例上,从而提高系统的整体可用性和性能。Ribbon是Netflix开发的一...
Spring Cloud集成Ribbon或Netflix Eureka实现了客户端负载均衡。当`uri`以`lb://`开头时,Spring Cloud Gateway会使用Ribbon进行负载均衡,自动轮询调用服务实例。Ribbon会根据配置的策略(如轮询、随机等)选择一...
总的来说,SpringCloud 通过 Ribbon 和 OpenFeign 提供了灵活的客户端负载均衡解决方案,可以根据不同的场景和需求选择合适的工具和策略。无论是自定义负载均衡规则还是利用默认策略,都能帮助开发者有效地管理和...
四、自定义Ribbon负载均衡算法 默认的Ribbon策略可能无法满足所有场景需求,因此我们可以自定义负载均衡算法。这通常通过实现IRule接口来完成,例如: ```java public class MyRule extends ...
5. **自定义负载均衡策略**:如果默认的负载均衡策略无法满足需求,我们可以创建自定义策略类,通过实现`IRule`接口并覆盖`choose`方法,然后在Ribbon客户端配置中指定这个策略。 在提供的压缩包文件"springcloud-...
通过以上步骤和代码示例,可以清晰地看到Feign在Spring Cloud微服务架构中扮演的角色,以及如何实现远程服务调用和负载均衡。Feign的使用极大地简化了HTTP客户端的编程模型,使得开发者能够更加聚焦于业务逻辑的实现...
总结来说,Spring Cloud Zuul作为微服务架构中的路由网关,结合Ribbon的负载均衡能力,提供了高效的请求分发和处理。通过Zuul和Ribbon的组合,开发者可以轻松地实现服务间的通信,同时保证系统的稳定性和可扩展性。...
总之,Spring Cloud路由网管负载均衡的实现涉及多个组件的配合,包括Zuul或Spring Cloud Gateway的路由功能、Eureka的服务发现与Ribbon的负载均衡。通过合理配置和优化,可以构建出高效、稳定的微服务架构。
本文将深入探讨如何在Spring Cloud 中实现自定义的负载均衡算法。 负载均衡是解决多台服务器间工作负载分配的关键技术,它能确保服务的高可用性和性能优化。Spring Cloud Netflix 提供了Ribbon组件,它是一个客户端...
Spring Cloud Ribbon是Spring Cloud生态中的一个客户端负载均衡器,它集成在Netflix OSS组件中,用于在客户端进行服务发现和负载均衡。在这个详细例子中,我们将深入理解如何在实际项目中运用Ribbon,以及它的工作...
2. 在Spring配置类中,创建一个Bean,注入`IRestTemplate`接口的实现,Spring Cloud会自动注入一个带有Ribbon负载均衡功能的RestTemplate实例: ```java @Configuration public class RestTemplateConfig { @...
Spring Cloud Ribbon是一个基于Netflix的开源项目,主要提供客户端的软件负载均衡算法,将中间层服务连接在一起。Ribbon客户端组件提供了一系列完善的配置项,如连接超时、重试等。简单来说,就是在配置文件中列出...
在SpringCloud中实现负载均衡,通常会用到Ribbon。Ribbon是Netflix开源的一个客户端负载均衡器,它集成在Zuul中,可以自动地为每个HTTP请求选择一个合适的服务实例进行转发。Ribbon支持多种负载均衡策略,如轮询...
Spring Cloud Ribbon是Spring Cloud生态中的一个客户端负载均衡器,它与Eureka等服务发现组件结合,使得在微服务架构中能够实现对服务的智能路由。Ribbon的主要目标是为客户端提供一种透明化的负载均衡解决方案,...
总结来说,Spring Cloud Ribbon是实现服务消费者端负载均衡的关键工具,它结合Eureka服务注册中心,使得服务调用更加灵活和健壮,提高了系统的可用性和可扩展性。通过正确地集成和配置Ribbon,我们可以避免硬编码...
SpringCloud通过Ribbon和Eureka的集成实现了客户端的负载均衡。Ribbon是一个内置的HTTP客户端库,它可以与服务发现组件(如Eureka)配合工作,自动将请求分发到不同的服务实例上。Ribbon提供了一些预定义的策略,如...