Ribbon负载均衡服务调用

Ribbon

Ribbon是什么??

SpringCloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具(负载均衡 + RestTemplate调用)。

LB(Load Balance)负载均衡是什么?

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。

Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别?

  Nginx是服务器负载均衡,客户端的所有请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。

  Ribbon(进程内LB)是本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息列表之后缓存到JVM本地,从而实现RPC远程调用。

springBoot项目中使用:

yml:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  <version>2.2.1.RELEASE</version>
  <scope>compile</scope>
</dependency>

使用@LoadBalanced

package com.dw.springcloud.config;

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;

/**
 * @Author dw
 * @ClassName ApplicationContextConfig
 * @Description
 * @Date 2020/3/26 15:53
 * @Version 1.0
 */
@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced  // 使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

负载均衡算法-轮询算法原理:rest接口第几次请求数 % 服务器集群总量 = 实际调用服务器位置下标,每次重启后rest接口计数从1开始。

获取所有的当前微服务实例:

List<ServiceInstance>instances = discoveryClient.getInstances(“CLOUD-PAYMENT_SERVICE”);

例如:

  List[0] instances = 127.0.0.1:8002

  List[1] instances = 127.0.0.1:8001

8001 + 8002 组合为集群,他们共两台机器,集群总数为2, 按照轮询算法

当请求总数为1时,1 % 2 = 1对应下标为1,则获得127.0.0.1:8001;

当请求总数为2时,2 % 2 = 0对应下标为0,则获得127.0.0.1:8002;

当请求总数为3时,3 % 2 = 1对应下标为1,则获得127.0.0.1:8001;

当请求总数为4时,4 % 2 = 0对应下标为0,则获得127.0.0.1:8002;

Ribbon默认的负载均衡的转发规则是轮询,当然也提供了其他的负载均衡规则,如何使用呢?:

注意:官方文档提示:自定义的配置类不能放在@ComponentScan所扫描的当前包及子包下。

如下:

Ribbon内置的负载规则:

内置负载均衡规则类

规则描述

RoundRobinRule

简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。

AvailabilityFilteringRule

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

WeightedResponseTimeRule

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

ZoneAvoidanceRule

以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。

BestAvailableRule

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

RandomRule

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

Retry

重试机制的选择逻辑

原文地址:https://www.cnblogs.com/dw3306/p/12636405.html