问题
If I have some servers: 192.168.100.1, 192.168.100.2, 192.168.100.3, 192.168.100.4... and weights of them are: 5, 1, 2, 3
I want to implement load balancing, but how can I implement weighted round robin using C#?
回答1:
Say you have servers a, b, c, d. And you have corresponding weights 5, 1, 2, 3. You can do weighted round robin in the following way:
Random rand = new Random(seed);
void processRequest(Request r){
// assume rand.next() returns a uniformly distributed integer >= 0
int i = rand.next() % 11; // 11 is sum of weights
if(i <= 4) // process r with server a
else if(i == 5) // process r with server b
else if(i <= 7) // process r with server c
else // process r with server d
}
rand.next() % 11 returns a uniformly distributed integer in the range [0, 10] (inclusive). We process the request with server a for five of the possible values [0, 4]. We process the request with server b for only one possible value 5 and so on.
Pay special attention to the particular random method you use and the seed value.
来源:https://stackoverflow.com/questions/8494876/how-to-implement-weighted-round-robin-using-c