Ribbon使用步骤及负载均衡算法

  • 使用步骤
  • 1)业务分析
  • 2)调用测试
  • 算法


什么是Ribbon?

Ribbon是Netflix发布的负载均衡器,有助于控制HTTP客户端行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于负载均衡算法,自动帮助服务消费者请求。

Ribbon默认提供的负载均衡算法:轮询,随机,重试法,加权。当然,我们可用自己定义负载均衡算法

使用步骤

1)业务分析

ribbon 自定义负载均衡算法_zookeeper


如上图,当用户下单调用hailtaxi-order服务的时候,该服务会调用hailtaxi-driver,此时如果是抢单过程,查询压力也会很大,我们可以为hailtaxi-driver做集群,做集群只需要把工程复制多分即可,多个工程如下图:

ribbon 自定义负载均衡算法_负载均衡_02

2)调用测试

此时我们用postman执行http://localhost:18082/order/add会发现可以发现已经实现负载均衡了,1808118084服务会轮询着调用。

ribbon 自定义负载均衡算法_ribbon 自定义负载均衡算法_03


ribbon 自定义负载均衡算法_负载均衡_04

算法

我们上面没做任何相关操作,只是把服务换成了多个就实现了负载均衡,这是因为OpenFeign默认使用了Ribbon的轮询算法,如下图依赖包,引入OpenFeign的时候会传递依赖Ribbon包:

ribbon 自定义负载均衡算法_负载均衡_05


我们如果想改变相关算法,可以直接在消费方,也就是order服务的application.yml中配置算法即可。

#修改负载均衡算法,默认是轮询,配置之后变随机
ribbon:
  #轮询
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
  #随机算法
  #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
  #重试算法,该算法先按照轮询的策略获取服务,如果获取服务失败则在指定的时间内会进行重试,获取可用的服务
  #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule
  #加权法,会根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越大。刚启动时如果同统计信息不足,则使用轮询的策略,等统计信息足够会切换到自身规则。
  #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

ribbon 自定义负载均衡算法_zookeeper_06