Низкая производительность балансировщика нагрузки на стойке
Я нагрузочно тестирую различные варианты балансировки нагрузки и получаю плохие результаты от Nginx, haproxy и лака. У меня есть один балансировщик нагрузки 4 ГБ в Rackspace, поражающий серверы приложений 4x1 ГБ.
Я нажимаю URL-адрес "/slow", который намеренно ждет 500 мс, прежде чем ответить. Если я попадаю на сервер приложений напрямую, он может обрабатывать скорость соединения 1600-1800 в секунду.
Если я нажму на балансировщик нагрузки Nginx, он сможет обработать только около 2000 соединений. Я надеялся на что-то ближе к 4x1600 = 6000. Ниже приведена команда, которую я использую для тестирования. Это выполняется параллельно на 40 256 МБ экземплярах. Я намеренно устанавливаю num_call в 1, потому что хочу увидеть производительность соединения. Чуть выше, и я начинаю получать много ошибок.
httperf --server 50.56.80.227 --port 1555 --uri /slow --rate 50 --num-call 1 --num-conn 100 --timeout 5
Вот мой конфиг nginx: https://gist.github.com/1299501
Итак, вот странная вещь, независимо от того, использую ли я nginx, haproxy или лак, я получаю примерно одинаковые результаты. Тем не менее, я протестировал новые облачные балансировщики Rackspace, и они получили гораздо лучшую производительность (отлично работает на скорости 7000/ с). Поскольку nginx и остальные работают на экземпляре, который я настроил, а балансировщик стойки не работает, я предполагаю, что в системе что-то не так. Я бы предпочел использовать балансировщик, которым я управляю, поэтому я могу добавить к нему кэширование, gzip, ssl и другие вещи.
Как я могу узнать, что является узким местом? Что-нибудь, что я должен настроить в системе, чтобы улучшить производительность? Нужно ли больше 4 ГБ оперативной памяти? (Использование плунжера невелико во время теста). Любые другие случайные идеи?
Обновление: я только что изменил размер балансировщика до 8 ГБ, и он работает намного лучше, до 6000-7000, или сопоставим с балансировщиками стойки. Это не имеет никакого смысла, потому что раньше памяти не хватало.
Обновление: вот пример вывода из httperf, когда я перегружаю балансировщик (в версии 8 ГБ, так что выше, чем я мог идти раньше, но ошибки похожи): https://gist.github.com/1299628
1 ответ
Я также на Rackspace Cloud и у меня очень похожая проблема. Я считаю, что проблема заключается в следующем:
Часто задаваемые вопросы по Rackspace Cloud Server
Из того, что вы описываете, может показаться, что вы просто максимизируете жалкое количество полосы пропускания, которое дает нам пространство для стоек, почти полностью делая все эти удивительные приросты производительности, как в Varnish/Nginx.
Чтобы подтвердить, перезапустите некоторые из ваших тестов с открытым iftop и посмотрите, как он полностью ограничивает объемы, выделяемые для каждого размера сервера.