ribbon设置权重_Spring Cloud学习笔记——Ribbon负载均衡和自定义负载策略

Spring Cloud学习笔记——Ribbon

负载均衡

在分布式微服务系统中,负载均衡也是核心能力之一,这里的负载均衡主要是指各个微服务之间的负载均衡。以Spring Cloud为例,假设在集群中,A服务要调用B服务,而B服务在集群中,有10个节点都有提供,那么,压力如何分配到10个节点上,就是负载均衡要考虑的问题。

常见的负载均衡算法可以分成两类,即静态和动态。动态算法的典型特征是会以当前节点的负载状态作为一个算法参数来计算分配权值,而静态算法则和节点负载状态无关。由此可见,静态算法通常比动态算法简单些。

常见的负载均衡算法很多,我们举几个例子。

轮询法:将用户的请求轮流分配到服务器。这种算法实现简单,并且也是绝对均衡的。它和服务器负载无关,是静态算法。

随机法:将用户的请求随机分配到某台服务器。这种算法实现也简单,它和轮询法有些类似,虽不能保证绝对均衡,但是当请求达到一定量级时,仍然是可以基本均衡的。它和服务器负载也无关,是静态算法。

最小连接法:将用户的请求分配给此时具有最小连接数的节点。这种算法较为复杂些,会基于服务器当前的连接数来进行分配,是动态算法。

事实上,在负载均衡中,可能会有更多的场景以及相应的实现方案,比如说:

A节点配置优于B节点,希望由A节点承担多于B节点的压力。服务器大致位于两个区域,北京和上海,希望上层服务可优先调用同区域的下层服务。服务器升级时,为达到热部署的效果,可能需要动态地对某些服务的负载权重进行修改以配合服务升级。类似的场景还有很多,由此可见,负载均衡并不是一个简单的问题,好在,我们已经有了许多高效可靠的工具,来帮助我们解决这些问题。

Ribbon

Spring Cloud Ribbon就是一个客户端负载均衡工具,它可以帮助我们实现各种需要的负载均衡相关的效果。在上一篇中,我们了解了Feign的简单使用,Feign是Spring Cloud提供的一个为简化Http调用的组件封装,并且,在其中,也封装了关于Ribbon的内容。当然,Ribbon也可以单独使用,但是那种方式通常会使代码臃肿些,大家有兴趣可以自行尝试,本文不作展示。

全局配置可以直接添加到配置文件中,如:

全局配置

也可以针对任意一个FeignClient客户端进行设置,假设要对deme2进行配置,如:

指定客户端配置

spring cloud ribbon提供了几个规则可供选择,如:

随机:RandomRule,随机算法。

轮询:RoundRobinRule,轮询算法。

重试:RetryRule,重试算法。重试算法的含义是在固定时间内基于轮询进行选择,如超时仍未选出,则线程终止。

响应时间权重:WeightedResponseTimeRule,响应时间权重算法,权重值和服务的平均响应时间相关。

最空闲连接策略:BestAvailableRule,最空闲连接算法,即最小连接算法。

以上这些算法类都可以在ribbon-loadbalancer中的com.netflix.loadbalancer包中找到。当然了,我们也可以模仿现有的规则,自己重新定义一个Rule,如MyRule,内容如下:

MyRule

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值