• springcloud-Ribbon-负载均衡组件


    Ribbon负载均衡

    1.Ribbon简介

    ribbin是Netflix发布的负载均衡器,有助于控制http和tcp客户端的行为,为ribbon配置服务提供者列表后,ribbon就可以基于某种负载均衡算法,自动的帮助服务消费者去请求。ribbon提供了很多的负载均衡算法例如

    • RoundRobinRule(轮询算法)
    • RandomRule(随机算法)
    • AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
    • WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule
    • RetryRule():先按照RoundRobinRule的策略获取服务,如果获取失败则在制定时间内进行重试,获取可用的服务。
    • BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

    在springCloud中,当ribbon和Eureka配和使用时ribbon可以自动获取服务注册列表,并基于负载均衡算法,请求其中的一个服务提供实例

    在消费者与服务者之间做了一个Nginx代理,有效的分发请求到同一个服务者集群,如果将ribbon搭建在服务者一方,没有任何作用。

    2.为消费者整合ribbon

    1.ribbon和springcloud的启动器

    注意:如果已经引入了spring-cloud-starter-eureka依赖,其中已经包含了spring-cloud-starter-ribbon,所以不需要再次引入

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    
    2.ribbon整合RestTemplate

    整合只需要在RestTemplate配置类添加注解:@LoadBalanced,就可以实现负载均衡

    @Configuration
    public class RestTemplateConf {
       @Bean
       @LoadBalanced
        RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    3.消费者控制器

    测试时,注入LoadBalancerClient作为调用测试

    @RestController
    @RequestMapping("/query")
    public class ClientController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @Autowired
        LoadBalancerClient loadBalancerClient;
    
        @RequestMapping("/load")
        public void loadBalanceTest(String name){
            IRule iRule; //该接口管控ribbon负载均衡策略实现类
            ServiceInstance instance = loadBalancerClient.choose("EUREKA-PROVIDER");
            String host = instance.getHost();
            int port = instance.getPort();
            URI uri = instance.getUri();
            System.out.println(host);
            System.out.println(port);
            System.out.println(uri);
        }
    }
    
    服务者集群1的控制器
    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        @RequestMapping("/test1")
        public String test(String name){
            return "xixixi 8763  :"+name;
        }
    }
    
    服务者集群2的控制器
    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        @RequestMapping("/test1")
        public String test(String name){
            return "xixixi 8764  :"+name;
        }
    }
    
    4.验证负载均衡

    访问:http://localhost:8762/query/load?name=hahahaha

    得到结果如下:

    因为ribbon默认的实现类是轮询策略,如果要修改如下↓

    3.自定义ribbon配置

    在消费者配置文件天添加如下内容,将负载均衡策略指向其他实现类

    HI-SERVICE.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
    

    还有其他实现类如下:

  • 相关阅读:
    Cannot retrieve the latest commit at this time.
    Github上搭建个人博客记录
    ESPCN超分辨率汇总
    ESPCN处理彩色图像代码
    配置caffe过程中,生成解决方案出错。无法打开包括文件: “gpu/mxGPUArray.h”
    未定义变量 "caffe" 或类 "caffe.reset_all"
    windows下caffe安装配置、matlab接口
    Python3:pyecharts数据可视化插件
    Django:用户登录实例
    Django:提交表单时遇到403错误:CSRF verification failed
  • 原文地址:https://www.cnblogs.com/mzc1997/p/10252278.html
Copyright © 2020-2023  润新知