RestTemplate添加@LoadBalanced注解利用SpringCloud的Ribbon实现自动化负载均衡

目录

问题现象:

问题分析:

解决方法:


问题现象:

今天在学习微服务过程中,有提到一个问题:

如何简单的实现负载均衡呢?


问题分析:

通过处不学习,我了解了一些实现负载均衡的方法:

例如可以通过 注册注入DiscoveryClient 对象,调用 getInstances("服务名") 的方法来获取相同服务名的对象集合,再通过 get(index) 方法就可以根据index来选择被调用接口的服务对象了. 然后通过 new Random().nextInt(instances.size());可以随机获取 [0~集合长度-1] 的index了,从而实现随机策略的负载均衡!

实现过程有一点繁琐,总感觉不够优化;于是我又了解到了另一种更简单快捷,优化的方法;

通过注册注入 RestTemplate对象 :

首先在注册的时候添加  @LoadBalanced 注解: 

该注解可以利用springcloud继集成的 Ribbon工具 实现自动化负载均衡.

Ribbon有7种主要的负载均衡策略:

/*
   1.RandomRule:
      随机选择一个server。
      [在index上随机,选择index对应位置的server]
   2.BestAvailableRule:
      选择一个最小的并发请求的server。
      [逐个考察Server,如果Server被tripped了,就忽略,再选择其中ActiveRequestsCount最小的server]
   3.AvailabilityFilteringRule:
      过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,
      并过滤掉那些高并发的的后端server(activeconnections 超过配置的阈值)。
      [使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态]
   4.WeightedResponseTimeRule:
      根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。
      [一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。
      Weight的计算也比较简单:responsetime减去每个server自己平均的responsetime是server的权重。
      当刚开始运行,没有形成statas时,使用roubine策略选择server。]
   5.RetryRule:
      对选定的负载均衡策略机上重试机制。
      [在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server]
   6.RoundRobinRule:
      轮询方式轮询选择server。
      [轮询index,选择index对应位置的server]
   7.ZoneAvoidanceRule:
      复合判断server所在区域的性能和server的可用性选择server
      [使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,
      前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),
      AvailabilityPredicate用于过滤掉连接数过多的Server。]
 */

配置这些策略的方式有很多种,比如在配置文件中配置.


解决方法:

配置文件中配置Ribbon的负载均衡策略:

随机策略成功:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值