> 文档中心 > 【微服务】(四)—— Ribbon

【微服务】(四)—— Ribbon


 

目录

一、Ribbon概述

二、负载均衡

三、负载均衡流程

​ 四、负载均衡策略

1、RoundRobinRule:​

2、AvailabilityFilterRule​

3、WeightedResponseTimeRule ​

4、ZoneAvoidanceRule​

5、BestAvailableRule​ 

6、RandomRule ​

7、RetryRule ​

 五、代码实操

1、maven导入

2、代码方式修改

3、配置文件修改

4、饥饿加载


一、Ribbon概述

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现,通过Spring Cloud Ribbon的封装,在微服务架构中使用客户端负载均衡调用非常简单。Ribbon是Spring Cloud整个大家庭中相对而言比较复杂的模块,直接影响到服务调度的质量和性能。

二、负载均衡

  • 服务端负载均衡,又分为硬件负载均衡(比如F5)、软件负载均衡(比如Nginx)
  • 客户端负载均衡(比如Ribbon)

(1)服务端负载均衡:维护一个可用的服务端清单,通过心跳检测来剔除故障的服务端节点,保证清单中都是可正常访问的服务端节点。当客户端发送请求到负载均衡设备的时候,该设备按某种算法(轮询、加权等)从维护的可用服务端清单中取出一台服务端端地址,然后进行转发。

(2)客户端负载均衡:和服务端负载均衡最大的不同点在于服务清单所存储的位置。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心。

三、负载均衡流程

 四、负载均衡策略

 内置负载均衡规则类&规则描述

1、RoundRobinRule:

         简单轮询服务列表来选择服务器,它是Ribbon默认的负载均衡策略

2、AvailabilityFilterRule

         对以下两种服务器进行忽略:

  • (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态,短路状态将持续30秒,如果再次连接失败,短路持续时间就会几何级地增加。
  • (2)并发数过高的服务器,如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的ActiveConnectionsLimit进行配置。

3、WeightedResponseTimeRule 

        为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重会影响服务器的选择。 

4、ZoneAvoidanceRule

        以区域可用的服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可用理解为一个机房,一个机架等。而后再对Zone内对多个服务做轮询。

5、BestAvailableRule 

         忽略那些短路等服务器,并选择并发数较低的服务器

6、RandomRule 

         随机选择一个可用的服务器

7、RetryRule 

         重试机制的选择逻辑

 五、代码实操

1、maven导入

  org.springframework.cloud  spring-cloud-starter-eureka  org.springframework.cloud  spring-cloud-starter-ribbon//--------------springcloud-H版引入eureka-client自带ribbon-----------------------//        org.springframework.cloud     spring-cloud-starter-netflix-eureka-client

2、代码方式修改

  •  方法1:在启动类Application中添加Bean加载信息

    @Bean    public IRule randomRule(){ return new RandomRule();    }
  •       方法二:(1)创建配置类
    package com.cloud.order.config;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.RandomRule;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/ * @author :jizhibing * @date :Created in 2022/4/18 * @description:Ribbon规则替换类 */@Configurationpublic class MyRule {    @Bean    public IRule randomRule(){ //替换为随机算法 return new RandomRule();    }}

    (2)在启动类上边加上:

            @RibbonClient(name ="服务名" ,configuration = RibbonConfig.class)

package com.cloud.order;import com.cloud.order.config.MyRule;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.RandomRule;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.cloud.netflix.ribbon.RibbonClient;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@MapperScan("com.cloud.order.mapper")@SpringBootApplication@RibbonClient(value = "服务名",configuration = MyRule.class) //指定具体的负载均衡替换类和keypublic class OrderApplication {    public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args);    }    @Bean    @LoadBalanced    public RestTemplate restTemplate(){ return new RestTemplate();    }  }

3、配置文件修改

userservice:  ribbon:    NFLoadBanlancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则

4、饥饿加载

        Ribbon默认的是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。

        

ribbon:  eager-load:    enabled: true #开启饥饿加载    clients: userservice   #制定对userservice这个服务饥饿加载

代码资源下载:
https://pan.baidu.com/s/169SFtYEvel44hRJhmFTRTQ
提取码:1234