• SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)


    一、Ribbon是什么?

      Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端  负载均衡的工具(这里区别于nginx的负载均衡)。简单来说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix中间服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。再简单点说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。当然,我们也很容易使用Ribbon实现自定义的负载均衡算法。

      Ribbon官网:https://github.com/Netflix/ribbon

    二、Ribbon配置

    本项目的地址https://github.com/Simple-Coder/microservice-demo-study

    (1)Maven工程结构

     (2)microservice-consumer添加Ribbon的pom依赖

    pom

    (3)添加负载均衡注解:@LoadBalanced

    (4)地址修改

     (5)启动类添加@EnableEurekaClient注解

    (6)测试:依次启动3个EurekaServer、3个Provider、1个Consumer

     (7)浏览器访问服务消费方提供的地址:http://localhost:7001/consumer/get/all

    第一次访问该地址,可以看出数据来自Cloud02数据库

    第二次访问该地址,可以看出数据来自Cloud03数据库

     

    第三次访问该地址,可以看出数据来自Cloud01数据库

     第四次访问该地址,可以看出数据来自Cloud02数据库,说明客户端使用的负载均衡算法默认是简单轮询

    三、Ribbon核心组件IRule

       IRule:根据特定算法从服务列表中选取一个要访问的服务,官网源码地址如下:

      https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java,IRule的继承关系图如下:

      

    (1)框架自带的7种特定算法概括

      ①RoundRobinRule:简单轮询

      ②RandomRule:随机

      ③AvailabilityFilteringRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问。

      ④WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大,被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRibbonRule策略,等统计信息足够,会切换到WeightedResponseTimeRule

      ⑤RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间会进行重试,获取可用的服务

      ⑥BestAvailableRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

      ⑦ZoneAvoidanceRule:默认规则,符合判断server所在区域的性能和server的可用性选择服务器

    (2)启动类添加配置(添加此注解:@RibbonClient)

      在这里要特别注意:官方文档明确给出警告,这个自定义的配置类不能放在@ComponentScan所扫描的当前包及子包下,否则我们自定义的这个配置类就会被所有Ribbon客户端所共享,也就不能达到特殊化定制的目的了。 

     (3)根据需求自定义算法(MyRandomRule.java)

      需求:依旧轮询策略,但是加上新的需求,每个服务器要求被调用3次。也就是以前每台机器一次,现在每台机器5次。参考官网源码地址如下:

    https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/RandomRule.java 

    (4)配置该自定义算法

     (5)测试

    依次启动3个Eureka、3个provider、1个consumer,查看consumer是否每个服务调用3次切换

     浏览器访问消费方提供的地址:http://localhost:7001/consumer/get/all

       不断访问该地址,确实发现每个服务调用3次,至此自定义的负载均衡算法小练习已经完成!

    四、总结

      ①Ribbon是客户端、负载均衡的工具(区别于nginx)

      ②框架自带7种负载均衡算法

      ③自定义负载均衡算法的使用(启动类添加@RibbonClient、配置类不能在启动类扫描包下,否则所有Ribbon客户端都会生效该配置)

      ④本代码已经上传:https://github.com/Simple-Coder/microservice-demo-study

  • 相关阅读:
    Java之多线程(实现Runnable接口)
    Java之使用HttpClient发送GET请求
    hbase中文内容编码转换
    Java之utf8中文编码转换
    Java之正则表达式
    Java之List排序功能举例
    maven测试时中文乱码问题解决方法
    Hbase之IP变更后无法启动问题解决
    Hbase远程连接:Can't get the locations
    重启Hbase命令
  • 原文地址:https://www.cnblogs.com/rmxd/p/11553432.html
Copyright © 2020-2023  润新知