Ribbon中的负载均衡策略
Ribbon通过IRule来实现负载均衡的策略,告诉Ribbon客户端如何决定访问那个服务
IRule接口的定义如下:
public interface IRule{
/*
* choose one alive server from lb.allServers or
* lb.upServers according to key
*
* @return choosen Server object. NULL is returned if none
* server is available
*/
public Server choose(Object key);
public void setLoadBalancer(ILoadBalancer lb);
public ILoadBalancer getLoadBalancer();
}
IRule定义了三个方法:
choose(Object key):根据key获取server
setLoadBalancer(ILoadBalancer lb):设置loadBalancer
getLoadBalancer():获取loadBalancer
Ribbon提供了很多IRule实现类,根据不同算法和逻辑来处理负载均衡,基本上满足我们的需求
Ribbon提供的负载均衡策略:
实现类 | 负载均衡策略 |
---|---|
RandomRule | 随机选择一个server |
BestAvailableRule | 选择最小请求数 |
ZoneAvoidanceRule | 根据server的zone区域和可用性来轮询选择 |
WeightedResponseTimeRule | 根据响应时间去计算一个权重weight ,weight越低,被选择的可能性就越低 |
RetryRule | 根据选的轮询的方式重试 |
AvailabilityFilteringRule | 选择可用且较空闲的服务 |