The official NGINX Open Source repository.
Go to file
Maxim Dounin 52327e0627 Upstream: smooth weighted round-robin balancing.
For edge case weights like { 5, 1, 1 } we now produce { a, a, b, a, c, a, a }
sequence instead of { c, b, a, a, a, a, a } produced previously.

Algorithm is as follows: on each peer selection we increase current_weight
of each eligible peer by its weight, select peer with greatest current_weight
and reduce its current_weight by total number of weight points distributed
among peers.

In case of { 5, 1, 1 } weights this gives the following sequence of
current_weight's:

     a  b  c
     0  0  0  (initial state)

     5  1  1  (a selected)
    -2  1  1

     3  2  2  (a selected)
    -4  2  2

     1  3  3  (b selected)
     1 -4  3

     6 -3  4  (a selected)
    -1 -3  4

     4 -2  5  (c selected)
     4 -2 -2

     9 -1 -1  (a selected)
     2 -1 -1

     7  0  0  (a selected)
     0  0  0

To preserve weight reduction in case of failures the effective_weight
variable was introduced, which usually matches peer's weight, but is
reduced temporarily on peer failures.

This change also fixes loop with backup servers and proxy_next_upstream
http_404 (ticket #47), and skipping alive upstreams in some cases if there
are multiple dead ones (ticket #64).
2012-05-14 09:57:20 +00:00
auto Configure: fixed msghdr.msg_control test on 64bit platforms. 2012-03-28 12:38:03 +00:00
conf Added the HTTPS fastcgi_param to fastcgi.conf. 2011-12-25 19:15:56 +00:00
contrib nginx-0.3.55-RELEASE import 2006-07-28 15:16:17 +00:00
docs nginx-1.2.0-RELEASE 2012-04-23 13:06:47 +00:00
misc Update openssl used for win32 builds. 2012-04-23 11:05:21 +00:00
src Upstream: smooth weighted round-robin balancing. 2012-05-14 09:57:20 +00:00
.hgtags release-1.2.0 tag 2012-04-23 13:07:07 +00:00