Я тестирую различные варианты балансировки нагрузки и получаю плохие результаты от Nginx, haproxy и varnish. У меня есть один балансировщик нагрузки на 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 или varnish, я получаю примерно одинаковые результаты. Тем не менее, я протестировал новые облачные балансировщики Rackspace, и они показали гораздо лучшую производительность (отлично справляются со скоростью 7000 / с). Поскольку nginx и другие работают на инстансе, который я установил, а балансировщик стоечного пространства - нет, я предполагаю, что в системе что-то не так. Я бы предпочел использовать балансировщик, который я контролирую, чтобы добавить к нему кеширование, gzip, ssl и другие вещи.
Как я могу узнать, в чем заключается узкое место? Есть ли что-нибудь, что я должен настроить в системе, чтобы повысить производительность? Мне нужно более 4 ГБ оперативной памяти? (Использование оперативной памяти невелико во время теста). Есть другие случайные идеи?
Обновить: Я только что изменил размер балансировщика до 8 ГБ, и он работает намного лучше, до 6000-7000, или сравним с балансировщиками стоечного пространства. В этом нет никакого смысла, потому что раньше не хватало оперативной памяти.
Обновить: Вот пример вывода httperf, когда я перегружаю балансировщик (в версии 8 ГБ, так что выше, чем я мог сделать раньше, но ошибки аналогичны): https://gist.github.com/1299628
Я тоже использую Rackspace Cloud, и у меня очень похожая проблема. Я считаю, что проблема в следующем:
Часто задаваемые вопросы по Rackspace Cloud Server
Судя по тому, что вы описываете, вы просто увеличиваете до максимума то жалкое количество полосы пропускания, которое дает нам стоечное пространство, почти полностью добиваясь потрясающего прироста производительности, которое обеспечивают такие вещи, как Varnish / Nginx.
Чтобы убедиться в этом, повторно запустите некоторые из ваших тестов с открытым iftop и посмотрите, как он полностью исчерпывает объемы, предоставляемые стойкой для каждого размера сервера.