`
阅读更多

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/

 

1
1
分享到:
评论

相关推荐

    spring_cloud_gateway负载均衡,动态路由

    spring cloud gateway的负载均衡和动态路由的实现 demo_01,demo_02,demo_03 这三个服务相当于是集群的微服务 gateway这个服务是 springcloude gateway + ribbon 做的负载均衡 gateway_01 这个服务 是动态路由的...

    SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法

    主要介绍了SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    微服务springcloud之ribbon使用demo

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一。Ribbon客户端...

    尚硅谷SpringCloud视频(最新)

    32.尚硅谷_SpringCloud_Ribbon负载均衡 33.尚硅谷_SpringCloud_Ribbon核心组件IRule 34.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(上) 35.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(下) 36.尚硅谷_Spring...

    想学习的看过来了spring4.0、springboot、springcloud详细视频课程(硅谷)

    32.硅谷学习_SpringCloud_Ribbon负载均衡 33.硅谷学习_SpringCloud_Ribbon核心组件IRule 34.硅谷学习_SpringCloud_自定义Ribbo的负载均衡策略(上) 35.硅谷学习_SpringCloud_自定义Ribbo的负载均衡策略(下) 36....

    尚硅谷Java视频教程_SpringCloud视频教程

    32.尚硅谷_SpringCloud_Ribbon负载均衡 33.尚硅谷_SpringCloud_Ribbon核心组件IRule 34.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(上) 35.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(下) 36.尚硅谷_...

    SpringCloud微服务架构Demo案例

    上传的这个microservicecloud工程的主要使用了SpringCloud的5大技术栈做了一个微服务架构案例,涉及到Eureka集群的配置、Ribbon的自定义负载均衡、Feign的声明式接口调用、Hystrix的服务熔断和降级、Zuul的Api ...

    spring boot+spring cloud视频教学下载全套

    ├32 6.4 Zuul指定Path+url以及指定可用的服务节点时如何负载均衡.avi ├33 6.5 Zuul使用正则表达式指定路由规则.avi ├34 6.6 Zuul路由的strip-prefix与order.avi ├35 6.7 Zuul的各种姿势.avi ├36 6.8通过Zuul...

    SpringCloud-Ribbon[入门案例]

    它不像springcloud服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个springcloud微服务中。包括feign提供的声明式服务调用也是基于该Ribbon实现的。ribbon默认提供很多种负载均衡算法,例如轮询、...

    SpringCloud:Ribbon设计原理解析

    融合到微服务的一些基础设施(如Feign),不需要独立部署Ribbon会将微服务之间的Rest请求转为客户端的负载均衡的RPC调用Ribbon默认的负载均衡策略是轮询,但不止轮询一种,可以自定义配置1:微服务之间通过Feign调用...

    SpringAll_wuyouzhuguli.tar.gz

    Spring Cloud Ribbon客户端负载均衡 Spring Cloud Hystrix服务容错 Spring Cloud Hystrix Dashboard仪表盘 Spring Cloud Hystrix Dashboard仪表盘 & RabbitMQ Spring Cloud Feign 声明式服务调用 Spring Cloud Zuul...

    springboot+springcloud 第9篇

    此文件是springboot跟springcloud的整合,搭建一个eureka的服务注册中心,并有服务提供者跟 ribbon消费者和feign消费者 实现负载均衡代码。hystrix dashboard 可视化监控数据。trubine集群监控。Zuul自定义路由规则...

    springCloud

    断路器示意图 SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多个层次的服务调用. 下面是微服架构下, 浏览器端通过API访问后台微服务的一个示意图: hystrix 1 一个微服务的超时...

    Eureka+Ribbon-项目demo

    在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,容易使用Ribbon实现自定义的负载均衡算法,SpringCloud微服务五大神兽之一,...

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    ## 负载均衡配置都是由ribbon提供,语法如下 策略可以是系统默认也可以自己实现IRule,默认规则参考IRule及其实现类 <客户端>: ribbon: NFLoadBalancerRuleClassName: <策略全限定路径> 框架中包含了熔断器聚合监控...

    毕业设计-分布式 RPC公司销售管理系统(源代码+说明)

    使用Ribbon实现了负载均衡技术,自定义均衡算法 拆分Spring Security成单独微服务作为权限验证中心 拆分多个数据库实现读写分离 使用Redis实现分布式锁技术 系统在生活中的应用十分广泛,无论是个人还是企业,在日常...

    spring-cloud

    spring cloud各子项目说明 1、eureka 目录为单机版的eureka...7、microservice-consumer-movie-ribbon 带客户端负载均衡的ribbon示例 8、microservice-consumer-movie-ribbon-customizing 使用java代码自定义配置的ribb

    lamp-cloud微服务脚手架

    lamp-cloud微服务脚手架是一个基于SpringCloud(Hoxton.SR10) + SpringBoot(2.3.10.RELEASE)的SaaS微服务脚手架,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API、分布式事务、大文件...

Global site tag (gtag.js) - Google Analytics