九、Ribbon负载均衡

目录

一、Ribbon负载均衡策略(常用7种):

详细介绍:

1、轮询策略: RoundRibbonRule(Ribbon默认策略)

2、重试策略:RetryRule

3、加权响应时间策略:WeightedResponseTimeRule

4、随机策略:RandomRule

5、最空闲策略:BestAvailableRule

6、区域感知轮询策略:ZoneAvoidanceRule

7、可用性过滤策略:AvailabilityFilteringRule

二、Ribbon的使用(不需要引入新的依赖,因为ribbon集成在了eureka client中了)

1、在手动注入RestTemplate时添加注解@LoadBalanced开启ribbon负载均衡

2、在member项目的controller中添加新的接口

3、运行springcloud-eureka、springcloud-order(启动三个服务实例)、springcloud-member启动类

4、多次访问localhost:9081/member/getOrder

三、修改Ribbon的轮询策略

1、全局修改,即所有的服务都是用同一个负载均衡策略

2、局部修改,即不同的服务使用不同的负载均衡策略

2.1  基于注解的方式配置

2.2 基于配置文件的方式配置

四、自定义负载均衡策略


一、Ribbon负载均衡策略(常用7种):

1、轮询策略: RoundRibbonRule(Ribbon默认策略)

2、重试策略:RetryRule

3、权重轮询策略:WeightedResponseTimeRule

4、随机策略:RandomRule

5、最少并发数策略:BestAvailableRule

6、区域感知轮询策略:ZoneAvoidanceRule

7、可用性过滤策略:AvailabilityFilteringRule

详细介绍:

1、轮询策略: RoundRibbonRuleRibbon默认策略

BaseLoadBalancer 负载均衡器默认采用线性负载轮询负载均衡策略。

工作流程:

RoundRibbonRule 类的 choose(ILoadBalancer Ib,Object key) 方法初始化一个计数器。

incrementAndGetModulo() 方法获取一个下标 (是先加1,然后和服务清单总数取模获取到的,不会越界),是一个不断增长的数。

chooseServer(Object key) 方法拿着下标去服务列表中获取服务,每次循环计数器都会加1。如果连续10次都没有取到服务,则会报 “No available alive servers after 10 tries from loadbalancer.” 警告。

2、重试策略:RetryRule

重试策略在使用 RetryRule 类中定义的 choose(ILoadBalance Ib,Object key) 方法来选择一个服务实例。

choose() 方法也是采用 RoundRibbonRule 中的 choose() 方法来选择一个服务实例的。

工作流程

如果选择到的服务实例正常,则返回数据。

如果选择到的服务实例为 null 或 失效,则 choose() 方法会在失效时间前不断地进行重试。

如果超过了失效时间还是没有取到,则返回一个 null。

3、加权响应时间策略:WeightedResponseTimeRule

WeightedResponseTimeRule 类是 RoundRibbonRule 的一个子类,它对 RoundRibbonRule 的功能进行了扩展。它根据每一个服务实例的运行情况先计算出该服务实例的一个权重,然后根据权重进行服务实例的挑选,这样能够调用到更优的服务实例。

工作流程

每 30S 计算一次各服务实例的响应时间,以响应时间来计算权重。平均响应时间越短则权重越高,权重越高则被选中的的概率越高,反之则被选中的概率较低。

WeightedResponseTimeRule 中有一个名叫 DynamicServerWeightTask 的定时任务。它是一个后台线程,定期从 status 里面读取响应时间,用来计算每个服务实例权重。

4、随机策略:RandomRule

随机选择一个可用的服务实例。

工作流程

负载均衡通过 upList() 和 allList() 方法获得可用服务实例列表,然后初始化了一个 Randow 对象以生成一个不大于服务实例总的随机数。

choose() 方法将该随机数作为下标获取一个服务实例。轮询 “index” 选择

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值