T
- public class ZoneAwareLoadBalancer<T extends Server> extends DynamicServerListLoadBalancer<T>
The key metric used to measure the zone condition is Average Active Requests, which is aggregated per rest client per zone. It is the total outstanding requests in a zone divided by number of available targeted instances (excluding circuit breaker tripped instances). This metric is very effective when timeout occurs slowly on a bad zone.
The LoadBalancer will calculate and examine zone stats of all available zones. If the Average Active Requests for any zone has reached a configured threshold, this zone will be dropped from the active server list. In case more than one zone has reached the threshold, the zone with the most active requests per server will be dropped.
Once the the worst zone is dropped, a zone will be chosen among the rest with the probability proportional to its number of instances.
A server will be returned from the chosen zone with a given Rule (A Rule is a load balancing strategy, for example AvailabilityFilteringRule
)
For each request, the steps above will be repeated. That is to say, each zone related load balancing decisions are made at real time with the up-to-date statistics aiding the choice.
AbstractLoadBalancer.ServerGroup
serverListUpdateInProgress, serverListUpdater, updateAction
allServerList, allServerLock, lbStats, lbTimer, maxTotalPingTimeSeconds, name, ping, pingInProgress, pingIntervalSeconds, pingStrategy, rule, serverComparator, upServerList, upServerLock
Constructor and Description |
---|
ZoneAwareLoadBalancer() |
ZoneAwareLoadBalancer(com.netflix.client.config.IClientConfig clientConfig,
IRule rule,
IPing ping,
ServerList<T> serverList,
ServerListFilter<T> filter)
Deprecated.
|
ZoneAwareLoadBalancer(com.netflix.client.config.IClientConfig clientConfig,
IRule rule,
IPing ping,
ServerList<T> serverList,
ServerListFilter<T> filter,
ServerListUpdater serverListUpdater) |
Modifier and Type | Method and Description |
---|---|
Server |
chooseServer(java.lang.Object key)
Choose a server from load balancer.
|
void |
initWithNiwsConfig(com.netflix.client.config.IClientConfig clientConfig) |
void |
setRule(IRule rule) |
protected void |
setServerListForZones(java.util.Map<java.lang.String,java.util.List<Server>> zoneServersMap) |
enableAndInitLearnNewServersFeature, forceQuickPing, getCoreThreads, getDurationSinceLastUpdateMs, getFilter, getLastUpdate, getNumberMissedCycles, getServerListImpl, getServerListUpdater, initWithNiwsConfig, setFilter, setServerListImpl, setServerListUpdater, setServersList, shutdown, stopServerListRefreshing, toString, updateAllServerList, updateListOfServers
addServer, addServerListChangeListener, addServers, addServerStatusChangeListener, cancelPingTask, choose, getAllServers, getClientConfig, getLoadBalancerStats, getMaxTotalPingTime, getName, getPing, getPingInterval, getPrimeConnections, getReachableServers, getRule, getServerByIndex, getServerCount, getServerList, getServerList, init, isEnablePrimingConnections, isPingInProgress, lockAllServerList, lockUpServerList, markServerDown, markServerDown, primeCompleted, removeServerListChangeListener, removeServerStatusChangeListener, setEnablePrimingConnections, setLoadBalancerStats, setMaxTotalPingTime, setPing, setPingInterval, setPrimeConnections
chooseServer
@Deprecated public ZoneAwareLoadBalancer(com.netflix.client.config.IClientConfig clientConfig, IRule rule, IPing ping, ServerList<T> serverList, ServerListFilter<T> filter)
public ZoneAwareLoadBalancer(com.netflix.client.config.IClientConfig clientConfig, IRule rule, IPing ping, ServerList<T> serverList, ServerListFilter<T> filter, ServerListUpdater serverListUpdater)
public ZoneAwareLoadBalancer()
public void initWithNiwsConfig(com.netflix.client.config.IClientConfig clientConfig)
initWithNiwsConfig
in interface com.netflix.client.IClientConfigAware
initWithNiwsConfig
in class DynamicServerListLoadBalancer<T extends Server>
protected void setServerListForZones(java.util.Map<java.lang.String,java.util.List<Server>> zoneServersMap)
setServerListForZones
in class DynamicServerListLoadBalancer<T extends Server>
public Server chooseServer(java.lang.Object key)
ILoadBalancer
chooseServer
in interface ILoadBalancer
chooseServer
in class BaseLoadBalancer
key
- An object that the load balancer may use to determine which server to return. null if
the load balancer does not use this parameter.public void setRule(IRule rule)
setRule
in class BaseLoadBalancer