zoukankan      html  css  js  c++  java
  • 客户端负载均衡—Ribbon初探

    一、什么是Ribbon

      Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用

    二、为服务消费者整合Ribbon

      1、引入依赖:spring-cloud-starter-ribbon(spring-cloud-starter-eureka中已包含了ribbon)

      2、为RestTemplate添加@LoadBalanced注解

      3、将请求地址修改为虚拟主机名,Ribbon会自动把虚拟主机名映射称网络地址(默认情况下,虚拟主机名和服务名称是一样的,也可以通过配置属性eureka.instance.virtual-host-name或者eureka.instance.secure-virtual-host-name。虚拟主机名不能包含下划线)

    #在RestTemplate上加上@LoadBalanced注解
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
      return new RestTemplate();
    }
    
    //修改controller内的方法,将请求地址从url改为微服务的虚拟名
    @GetMapping("/user/{id}")
      public User findById(@PathVariable Long id) {
        //VIP:virtual IP
        return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);
      }
    使用Ribbon

    三、利用java代码自定义Ribbon配置

    IClientConfig:Ribbon 的客户端配置,默认采用 com.netflix.client.config.DefaultClientConfigImpl 实现。
    IRule:Ribbon 的负载均衡策略,默认采用 com.netflix.loadbalancer.ZoneAvoidanceRule 实现,该策略能够在多区域环境下选择最佳区域的实例进行访问
    IPing:Ribbon 的实例检查策略,默认采用 com.netflix.loadbalancer.NoOpPing 实现,该检查策略是一个特殊的实现,实际上他并不会检查实例是否可用,而是始终返回 true ,默认认为所有服务实例都是可以使用
    ServerList<Server>:服务实例清单的维护机制,默认采用 com.netflix.loadbalancer.ConfigurationBasedServerList 实现。
    ServerListFilter<Server>:服务实例清单过滤机制,默认采用 org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter 实现,该策略能够优先过滤出与请求调用方处理同区域的服务实现
    ILoadBalancer:负载均衡器,默认采用 com.netflix.loadbalancer.ZoneAwareLoadBalancer 实现,他具备了区域感知的能力

    //该类为Ribbon配置类
    //该类不应该在主应用程序上下文的@ComponentScan中,否则该类中的配置信息就会被所有的@RibbonClient共享
    @Configuration
    public class RibbonConfiguration{
        @Bean
        public IRule ribbonRule(){
            return new RandomRule();
        }
    }
    
    //空类,添加@Configuration和@RibbonClient注解
    @Configuration
    @RibbonClient(name = "microservice-provider-user",configuration = "RibbonConfiguration.class")
    public class TestConfiguration{
    }
    Ribbon自定义配置

    四、使用属性自定义Ribbon配置

    <clientName>.ribbon.为前缀:

    #预加载配置,默认为懒加载
    ribbon:
      eager-load:
        enabled: true
        clients: mima-cloud-producer,mima-cloud-producer2
    #这里使用服务提供者的instanceName
    mima-cloud-producer:
      ribbon:
        # 代表Ribbon使用的负载均衡策略
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
        # 每台服务器最多重试次数,但是首次调用不包括在内, Max number of retries on the same server (excluding the first try)
        MaxAutoRetries: 1
        # 最多重试多少台服务器,Max number of next servers to retry (excluding the first server)
        MaxAutoRetriesNextServer: 1
        # 无论是请求超时或者socket read timeout都进行重试,Whether all operations can be retried for this client
        OkToRetryOnAllOperations: true
        # Interval to refresh the server list from the source
        ServerListRefreshInterval: 2000
        # Connect timeout used by Apache HttpClient
        ConnectTimeout: 3000
        # Read timeout used by Apache HttpClient
        ReadTimeout: 3000
    mima-cloud-producer2:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule
    Ribbon自定义配置

    microservice-provider-user:
      ribbon:
        NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule

    五、脱离Eureka使用Ribbon

      由于脱离了Eureka,微服务不再缓存服务列表,所以需要在配置文件中配置可访问的服务列表

    server:
        port: 8010
    spring:
        application:
            name:microservice-consumer-movie
    microservice-provider-user;
        ribbon:
            listOfServers: localhost:8000,localhost:8001
    配置

    六、相关中间件

    Nacos Discovery内部默认集成了Ribbon,集成的方式跟Eureka几乎一致

  • 相关阅读:
    习题10-2 递归求阶乘和(15 分)
    在过滤器中得到模型状态信息
    理解OAuth 2.0
    asp.net mvc 控制器的依赖注入(使用Ninject)
    web.routing 学习
    深度优先和广度优先的基础应用
    数的全排
    C# 表达式树
    C#中RSA的简单使用
    select into 和insert into select
  • 原文地址:https://www.cnblogs.com/yanghanwen/p/12093677.html
Copyright © 2011-2022 走看看