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 |