zoukankan      html  css  js  c++  java
  • 服务消费之负载均衡

    当一个服务存在多个实例的,我们就需要使用能够满足 **负载均衡 **的 HTTP 组件。

    注:基于 SpringCloud之项目初始化 之上操作。

    一、 Loadbalancer

    1.1 Loadbalancer 介绍

    LoadBalancerClientSpringCloud 提供的负载均衡器客户端,它先从提供的服务中获取某一个实例(默认策略为轮询),通过 choose() 方法获取到节点中的一个服务,拿到服务的信息之后取出服务 IP 信息,就可以得到完成的想要访问的 IP地址和接口,最后通过 RestTempate 访问服务。

    1.2 Loadbalancer 使用

    1. 新建 HttpConfig ,启用 @LoadBalanced 实现负载均衡功能
    @Configuration
    public class HttpConfig {
    
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    
    1. 完善 OrderController.getPrice() 方法
    @GetMapping("/getPrice")
    public BigDecimal getPrice(String productId) {
        final BigDecimal price = restTemplate.getForObject("http://PRICE-SERVICE/price/getPrice/" + productId, BigDecimal.class);
        return price;
    }
    
    1. 启动 OrderService 服务,访问 http://localhost:8005/order/getPrice?productId=123 ,返回:
    100
    

    说明调用成功了,我们再访问二次请求,然后查看 PriceService 控制台输出:

    查看 PriceService01控制台:

    productId=123
    productId=123
    

    查看 PriceService02 控制台:

    productId=123
    

    可以看到使用了轮询机制。

    二、 Ribbon

    Spring Cloud Netflix RibbonSpring Cloud Netflix 子项目的核心组件之一,主要给服务间调用及 API 网关转发提供负载均衡的功能。

    2.2.1 Ribbon的常用配置

    全局配置:

    ribbon:
      ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
      ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
      OkToRetryOnAllOperations: true #对超时请求启用重试机制
      MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
      MaxAutoRetries: 1 # 切换实例后重试最大次数
      NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法
    

    指定服务进行配置:

    user-service:
      ribbon:
        ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
        ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
        OkToRetryOnAllOperations: true #对超时请求启用重试机制
        MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
        MaxAutoRetries: 1 # 切换实例后重试最大次数
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法
    

    可以看出与全局配置的区别就是 ribbon 节点挂在服务名称下面。

    2.2.2 Ribbon的负载均衡策略

    ribbon可以选择以下几种负载均衡策略:

    * com.netflix.loadbalancer.RandomRule:从提供服务的实例中以随机的方式;
    * com.netflix.loadbalancer.RoundRobinRule:以线性轮询的方式,就是维护一个计数器,从提供服务的实例中按顺序选取,第一次选第一个,第二次选第二个,以此类推,到最后一个以后再从头来过;
    * com.netflix.loadbalancer.RetryRule:在RoundRobinRule的基础上添加重试机制,即在指定的重试时间内,反复使用线性轮询策略来选择可用实例;
    * com.netflix.loadbalancer.WeightedResponseTimeRule:对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择;
    * com.netflix.loadbalancer.BestAvailableRule:选择并发较小的实例;
    * com.netflix.loadbalancer.AvailabilityFilteringRule:先过滤掉故障实例,再选择并发较小的实例;
    * com.netflix.loadbalancer.ZoneAwareLoadBalancer:采用双重过滤,同时过滤不是同一区域的实例和故障实例,选择并发较小的实例。
    
  • 相关阅读:
    Nginx入门使用
    下载pcre-8.35.tar.gz
    后端传到前端时间问题
    Layui弹出层分割线
    CSS动画实例:图文切换
    JavaScript小游戏实例:简单的键盘练习
    JavaScript小游戏实例:统一着色
    JavaScript动画实例:炸开的小球
    JavaScript动画实例:烟花绽放迎新年
    JavaScript动画实例:圆点的衍生
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/13496896.html
Copyright © 2011-2022 走看看