"Austad, Jay" <[EMAIL PROTECTED]> writes:
> From: JuanE [mailto:[EMAIL PROTECTED]]
>> Assume you have 4 servers A, B, C, D, and that server C is down. When your
>> random seed hits server A, B or D (with probability 1/4, respectively) the
>> message will go through fine. When your random seeds hits server C (again
>> with p=1/4), you will realize that it is down and proceed to D. So in
>> effect you will hit servers A and B with probability 1/4 each, and server D
>> with probability 1/2. This is not very good load balancing, because

> You are correct.  However, since qmail-qmqpc does not continually run, it is
> not possible to do a non-random round robin (as far as I know).

Choose a permutation of the server list at random.  Then step through
this list until you hit a good server or exhaust the list.

 1. A B C D
 2. A B D C
 3. A C B D
 4. A C D B
 ....
24. D C B A

If your random number is 4, you try A, then C, then D and finally B.

If the number of servers is reasonably small, say up to 7, you could
enumerate all permutations as a static array in the code and then use
a random index into the array to determine the order.  Generating a
random permutation algorithmically is not too easy.  You can either
approximate by shuffling or make a direct choice using some bignum
arithmetic described in "Permutation Generation Methods", Robert
Sedgewick, Computing Surveys, Vol. 9, No. 2, June 1997.

-- 
Frank Cringle,      [EMAIL PROTECTED]
voice: (+49 2304) 467101; fax: 943357

Reply via email to