• Ribbon讲解


    一:Ribbon是什么?

    Ribbon其实就是一个软负载均衡的客户端组件。

    二:负载均衡(LB)是什么?

    用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)

    三:负载均衡分类?

    1. 集中式 LB :在服务的消费方和提供方之间使用独立的LB设施,如Nginx
    2. 进程内 LB:消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。例如Ribbon

    四:Ribbon是如何通过一个@LoadBalanced注解就实现负载均衡的

    1. 在创建RestTemplate的bean时添加@LoadBalanced注解
    2. LoadBalancerAutoConfiguration自动配置筛选出添加@LoadBalanced注解的RestTemplate
    3. 为RestTemplate设置LoadBalancerInterceptor,目的是使用LoadBalancerClient来发起请求
    4. 请求过程中,根据负载均衡策略,调用LoadBalancerClient.choose()方法获取最终ServiceInstance
    5. 根据ServiceInstance获取真实host、port,发起最后请求

    五:Ribbon有哪些负载均衡策略?

    1. 轮询策略
    2. 重试策略:先按照轮询的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
    3. 随机策略
    4. 最低并发策略:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
    5. 可用过滤策略:先过滤掉故障实例,再选择并发较小的实例
    6. 响应时间加权重策:响应速度越快的实例选择权重越大,越容易被选择
    7. 区域权重策略:复合判断server所在区域的性能和server的可用性选择服务器

    六:如何修改Ribbon的负载均衡策略?

    1. 在配置类中配置IRule
      在这里插入图片描述
      表示,访问CLOUD_pAYMENT_SERVICE的服务时,使用我们自定义的负载均衡算法

    2. 在application.yml配置文件中配置

       user-service:
         ribbon:
           NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡则则
      
      • 1
      • 2
      • 3

    这两种配置方式有什么不同?
    (1)配置类方式是全局生效的,意思是只要是 order-service 服务采用 Ribbon 进行的负载均衡调用都是使用的自定义负载均衡策略。
    (2)yml 配置的方式是局部生效的,意思是在 order-service 服务采用 Ribbon 进行负载均衡的时候,只有请求 user-service 服务的请求是使用的自定义负载均衡策略。

    在这里插入图片描述

    七:如何自定义负载均衡策略?

  • 相关阅读:
    一文详解常见的基于比较的排序算法【简单易懂】
    每天一个数据分析题(一百六十六)
    【风力发电】山顶的白色“大风车”你了解吗?
    架构漫谈 - 如何设计高性能、高可用、高扩展架构
    Spring循环依赖
    redis之如何存储时间序列数据
    Leetcode.25 K个一组翻转链表(模拟/递归)
    934. 最短的桥
    NLP工具学习(1)Thulac分词工具与WordCloud词云
    Vue3 复制 copy 功能实现(vue-clipboard3)
  • 原文地址:https://blog.csdn.net/weixin_44582492/article/details/134240299