реализация алгоритма балансировки
Igor Sysoev
is at rambler-co.ru
Fri Apr 24 19:03:36 MSD 2009
On Fri, Apr 24, 2009 at 06:35:05PM +0400, Михаил Монашёв wrote:
> Здравствуйте, Максим.
>
> >> Есть апстрим:
> >>
> >> upstream my_backend {
> >> server 10.0.0.1:80 weight=1
> >> max_fails=20 fail_timeout=3s;
> >> server 10.0.0.4:80 weight=5000
> >> max_fails=1000 fail_timeout=3s;
> >> server 10.0.0.6:80 weight=16000
> >> max_fails=1000 fail_timeout=3s;
> >> server 10.0.0.4:80 backup;
> >> server 10.0.0.6:80 backup;
> >> }
> >>
> >> Правильно ли я понимаю, что в таком конфиге запросы пойдут следующим
> >> образом: 1 запрос на 10.0.0.1:80, потом 5000 запросов на 10.0.0.4:80,
> >> потом 16000 запросов на 10.0.0.6:80?
>
> MD> Нет. Веса сейчас работают приблизительно так: nginx ходит по кругу,
> MD> уменьшая каждый раз вес на 1 и пропуска бекенды с нулевым весом.
> MD> Когда у всех бекендов вес становится нулевым - возвращаются
> MD> исходные значения весов и всё повторяется.
>
> MD> Т.е. в отсутствии ошибок от бекендов будет как-то так:
>
> MD> 1 на .1
> MD> 10000 по очереди между .4 и .6
> MD> 11000 на .6.
>
> Этот алгоритм получше, но всё таки не идеальный. С одним воркером на
> 10.0.0.6 периодически будет приходить подряд много запросов. Хотя в
> идеале, должно размазываться по времени более равномерно.
>
> А в 0.6.31 так как ты описал или там какой-то другой алгоритм? Я
> просто выдвинул своё предположение по наблюдениям за работой 0.6.31.
Должно быть, как в 0.7:
Changes with nginx 0.6.6 30 Jul 2007
*) Bugfix: fair big weight upstream balancer.
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list