侧边栏壁纸
博主头像
Terry

『LESSON 5』

  • 累计撰写 90 篇文章
  • 累计创建 21 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

SpringCloud之Ribbon负载均衡策略

Terry
2020-11-22 / 0 评论 / 0 点赞 / 619 阅读 / 1,324 字 / 正在检测是否收录...

简述

在项目中,我们使用了consul作为服务注册中心,Ribbon负责到注册中心拿到微服务的地址列表,进行负载均衡服务调用。

负载均衡

我们可以把负载均衡分为服务端负载均衡和客户端负载均衡。

  • 服务端负载均衡
    比如nginx,F5(硬件负载均衡),请求到达服务器后,服务器根据负载均衡算法将请求转发到目标服务器进行处理。
  • 客户端负载均衡
    比如Ribbon,首先从注册中心获取到服务器地址列表,然后通过负载均衡算法选择了某个服务器后进行调用。

我使用的consul作为服务注册中心,使用RestTemplate进行RPC调用(RestTemplate是基于HTTP),RestTemplate可以通过标记@LoadBalanced注解,使用Ribbon进行负载均衡调用。RestTemplate使用Ribbon负载均衡其实使用了拦截器原理,LoadBalancerInterceptor这个类,有兴趣可以了解下。

Ribbon自带负载均衡策略

Ribbon自带的负载均衡策略由下图所示:

一共有七种,下面我们看下每种负载均衡策略的作用。

负载均衡策略描述
BestAvailableRule最小连接数策略遍历serverList,选取出可用并且连接数最小的一个服务。该算法里面有一个LoadBalancerStats的成员变量,存储所有服务的运行状况和连接数。
ZoneAvoidanceRule区域权衡策略,默认策略轮询策略的扩展,使用了ZoneAvoidancePredicate和AvailabilityPredicate过滤器。除了会过滤掉超时和连接数太多的服务之外,还会过滤掉不符合要求的zone区域内所有节点。
AvailabilityFilteringRule可用过滤策略轮询策略的扩展,轮询选取了一个服务后,判断服务是否可用,连接数是否超限,如果成功则返回,否则轮询下一个服务。
WeightedResponseTimeRule响应时间加权策略根据平均响应时间计算出服务的权重,响应快权重就大,被选中的概率就高。服务刚启动统计信息是不足的,这时候先使用轮询策略,统计信息完善后,会切换为WeightedResponseTimeRule策略
RoundRobinRule轮询策略轮询服务,如果循环10次还是没取到可用的服务,则返回一个空的服务。
RandomRule随机策略随机选取一个服务,如果服务不可用的话会while循环选取下一个服务。
RetryRule重试策略一定时间内循环重试。默认是使用了轮询策略,也支持自定义注入。RetryRule会在每次选取后对服务判断是否为非空或者alive,如果不是的话会在默认500ms内不断选取。如果使用了默认的IRule则使用了轮询,超过10次后返回一个空的服务。
0

评论区