nginx-1.3.1

Anton Yuzhaninov citrin на citrin.ru
Вт Июн 5 16:57:54 UTC 2012


On 06/05/12 20:31, Maxim Dounin wrote:
> Я скорее затрудняюсь назвать класс задач, на котором такой
> алгоритм будет вести себя хуже, чем обычный round-robin.  Так что
> правильный вопрос скорее "почему бы не сделать так по умолчанию".

1. Большое количество "легких" запросов примерно одинаковых по ресурсоемкости 
(но несмотря на это небольшой разброс по времени выполнения все равно будет).
round-robin на такой нагрузке будет примерно одинаково загружать бэкенды, а с 
least_conn скорее всего нагрузка будет менее равномерно, из за того, что на 
таких задачах текущее кол-во коннекций на бэкенде будет быстро скакать и 
постоянным будет только среднее. Т. е. чтобы least_conn на таких нагрузках 
работал хорошо он должен будет учитывать не мгновенное число соединений, а 
exponential moving average (с таким коэффициентом, чтобы текущее значение 
вносило больший вклад в среднее, чем прошлые значения).

2. А как реализован least_conn? Все воркеры пишут в некий участок общей памяти 
при открытии соединения на бэкенд и её закрытии? В таком случае использование 
least_conn должно немного замедлять работу на серверах с большим количеством 
CPU, поскольку после модификации участка памяти, используемого одновременно в 
нескольких процессах требуется синхронизация кэшей между разными CPU (хотя 
возможно это пренебрежимо по сравнению с другими причинами по которым CPU 
вынужден простаивать).

-- 
  Anton Yuzhaninov



Подробная информация о списке рассылки nginx-ru