Ribbon 内置负载均衡算法

策略名 策略声明 策略描述 实现说明
BestAvailableRule public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 选择一个最小的并发请求的 server 诸葛考察 Server,如果 Server 被 tripped 了就忽略,再选择其中 ActiveRequestCount 最小的 server
AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为 circuit tripeped 的后端 server,并过滤掉那些高并发的后端 server(active connections 超过配置的阈值) 适应一个 AvailabilityPredicate 来包含过滤 server 的逻辑,其实就是检查 status 里记录的各 server 的运行状态
WeightResponseTimeRule 根据相应时间分配一个 weight,相应时间越长,weight 越小,被选中的可能性越低 一个后台线程定期地从 status 里面读取评价相应时间,为每个 server 计算一个 weight。weight 的计算比较简单,responseTime 减去每个 server 自己平均的 responsetime 是 server 的权重。当刚开始运行还没有形成 status 时,使用 roubine策略选择 server
RetryRule 对选定的负载均衡策略机制采取重试机制 在一个配置时间段内当选择 server 不成功时,就一直尝试使用 subRule 的方式选择一个可用的 server
RoundRobinRule 使用 roundRobin 方式轮询选择 server 轮询 index,选择 index 对应位置的 server
RandomRule 随机选择一个 server 随机选择 index,再选择对应位置的 server
ZoneAvoidanceRule 符合判断 server 所在区域的性能和 server 的可用性,根据结果来选择 server 使用 ZoneAvoidancePredicate 和 AvailabilityPredicate 来判断是否选择某个 server,前一个判断判定一个 zone 的运行性能是否可用,剔除一颗永的 zone 的所有 server,AvailabilityPredicate 用于过滤掉连接数过多的 server