zoukankan      html  css  js  c++  java
  • 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

    重试机制的选择逻辑

  • 相关阅读:
    angularJs自定义指令时的绑定
    AngularJs在单击提交后显示验证信息.
    页面中插入flash,并且给flash添加单击事件控制播放,以及获取相关参数.
    AngularJs的表单验证
    angularJs 过滤器
    关于在页面总嵌入iframe,ifram中发起请求,服务器端的session为空问题解决
    js判断手机是的操作系统
    easyui中带checkbox框的tree
    easyUi中的一段漂亮代码之将list转换成tree.
    Nginx多个配置文件共用location配置
  • 原文地址:https://www.cnblogs.com/dw3306/p/12636405.html
Copyright © 2011-2022 走看看