目录
Ribbon 负载均衡策略
Ribbon 作为一款客户端负载均衡框架,默认的负载策略是轮询,同时也提供了很多其他的策略,能够让用户根据自身的业务需求进行选择。

BestAvailableRule
最低并发策略:选择一个最小的并发请求的 Server,逐个考察 Server,如果 Server 被标记为错误,则跳过,然后再选择 ActiveRequestCount 中最小的 Server。
AvailabilityFilteringRule
可用过滤策略:过滤掉连接失败的服务节点,并且过滤掉高并发的服务节点,然后从健康的服务节点中,使用轮询策略选出一个节点返回。
ZoneAvoidanceRule
区域权重策略:使用 ZoneAvoidancePredicate
和 AvailabilityPredicate
来判断是否选择某个 Server,前一个判断判定一个 Zone 的运行性能是否可用,剔除不可用的 Zone(的所有 Server),AvailabilityPredicate
用于过滤掉连接数过多的 Server。
RandomRule
随机策略:使用 jdk 自带的随机数生成工具,生成一个随机数,然后去可用服务列表中拉取服务节点 Server。如果当前节点不可用,则进入下一轮随机策略,直到选到可用服务节点为止。
RoundRobinRule
轮询策略:拿到所有的 Server 集合,然后根据 id 进行遍历。这里的 id 是 ip + 端口,Server 实体类中定义的 id 属性如下:
this.id = host + ":" + port;
注意:轮询策略有一个上限,当轮询了10个服务端节点还没有找到可用服务的话,轮询结束。
RetryRule
重试策略:首先使用轮询策略进行负载均衡,如果轮询失败,则再使用轮询策略进行一次重试,相当于重试下一个节点,看下一个节点是否可用,如果再失败,则直接返回失败。
注意:重试的时间间隔,默认是500毫秒,我们可以自定义这个重试时间间隔。
this.maxRetryMillis = 500L;
ResponseTimeWeightedRule
响应时间权重策略:作用同 WeightedResponseTimeRule
,后来改名为 WeightedResponseTimeRule
。
WeightedResponseTimeRule
响应时间权重策略:根据响应时间,分配一个权重 weight,响应时间越长,weight 越小,被选中的可能性越低。
注意:服务刚启动时,由于统计信息不足,先使用轮询策略。等到信息足够了,切换到
WeightedResponseTimeRule
策略。