public class WeightedResponseTimeRule extends RoundRobinRule
The basic idea for weighted round robin has been obtained from JCS The implementation for choosing the endpoint from the list of endpoints is as follows:Let's assume 4 endpoints:A(wt=10), B(wt=30), C(wt=40), D(wt=20).
Using the Random API, generate a random number between 1 and10+30+40+20. Let's assume that the above list is randomized. Based on the weights, we have intervals as follows:
1-----10 (A's weight)
11----40 (A's weight + B's weight)
41----80 (A's weight + B's weight + C's weight)
81----100(A's weight + B's weight + C's weight + C's weight)
Here's the psuedo code for deciding where to send the request:
if (random_number between 1 & 10) {send request to A;}
else if (random_number between 11 & 40) {send request to B;}
else if (random_number between 41 & 80) {send request to C;}
else if (random_number between 81 & 100) {send request to D;}
When there is not enough statistics gathered for the servers, this rule
will fall back to use RoundRobinRule
.
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_TIMER_INTERVAL |
protected java.util.concurrent.atomic.AtomicBoolean |
serverWeightAssignmentInProgress |
protected java.util.Timer |
serverWeightTimer |
static com.netflix.client.config.IClientConfigKey<java.lang.Integer> |
WEIGHT_TASK_TIMER_INTERVAL_CONFIG_KEY |
Constructor and Description |
---|
WeightedResponseTimeRule() |
WeightedResponseTimeRule(ILoadBalancer lb) |
Modifier and Type | Method and Description |
---|---|
Server |
choose(ILoadBalancer lb,
java.lang.Object key) |
void |
initWithNiwsConfig(com.netflix.client.config.IClientConfig clientConfig) |
void |
setLoadBalancer(ILoadBalancer lb) |
void |
shutdown() |
choose
getLoadBalancer
public static final com.netflix.client.config.IClientConfigKey<java.lang.Integer> WEIGHT_TASK_TIMER_INTERVAL_CONFIG_KEY
public static final int DEFAULT_TIMER_INTERVAL
protected java.util.Timer serverWeightTimer
protected java.util.concurrent.atomic.AtomicBoolean serverWeightAssignmentInProgress
public WeightedResponseTimeRule()
public WeightedResponseTimeRule(ILoadBalancer lb)
public void setLoadBalancer(ILoadBalancer lb)
setLoadBalancer
in interface IRule
setLoadBalancer
in class AbstractLoadBalancerRule
public void shutdown()
public Server choose(ILoadBalancer lb, java.lang.Object key)
choose
in class RoundRobinRule
public void initWithNiwsConfig(com.netflix.client.config.IClientConfig clientConfig)