Определение реалистичного показателя количества запросов в секунду для веб-сервера

15

Я настраиваю стек nginx и оптимизирую конфигурацию перед началом работы. Запустив ab на стресс-тестирование машины, я был разочарован тем, что скорость превысила 150 запросов в секунду, при этом значительное количество запросов возвращалось> 1 секунды. Как ни странно, сама машина даже не дышала.

Наконец-то я подумал проверить связь с окном и увидел время пинга около 100-125 мс. (Машина, к моему удивлению, находится по всей стране). Таким образом, кажется, что задержка сети доминирует в моем тестировании. Выполняю те же тесты с машины в той же сети, что и сервер (время пинга <1 мс), и я вижу> 5000 запросов в секунду, что больше соответствует тому, что я ожидал от машины.

Но это заставило меня задуматься: как определить и сообщить «реалистичный» показатель запросов в секунду для веб-сервера? Вы всегда видите заявления о производительности, но не следует ли учитывать задержку в сети? Конечно, я могу обслуживать 5000 запросов в секунду на машине рядом с сервером, но не на машине по всей стране. Если у меня много медленных соединений, они в конечном итоге скажутся на производительности моего сервера, верно? Или я думаю об этом все неправильно?

Простите, если это 101 сетевой проект. Я разработчик по профессии.

Обновление: отредактировано для ясности.

дон
источник
abимеет вариант параллелизма. Что вы установили? Кроме того, если вы проводите тестирование по внутреннему соединению ADSL, в тесте, скорее всего, будет преобладать ваша пропускная способность, и вы вообще не будете тестировать что-либо на сервере.
Ладададада
Я знаком с опцией параллелизма ab и пробовал широкий диапазон значений, чтобы открыть пределы поля. Как я уже писал выше, я понимаю, что в моих начальных тестах преобладала сеть, и они не отражали возможности сервера. Но мой вопрос все еще стоит: откуда большинство людей проводят свои тесты, чтобы получить реалистичные показатели? Тесты, запускаемые из коробки в той же сети, что и сервер (фактически исключая любую задержку в сети из уравнения), возвращают большие числа, но они не кажутся «честными», поскольку реальные пользователи будут приходить из-за пределов сети.
Дон
Тесты, выполняемые из одной и той же сети, на самом деле могут быть более «справедливыми», поскольку они по существу игнорируют сеть. Вероятно, все ваши пользователи находятся в разных сетях, поэтому совокупная пропускная способность всех этих сетей должна легко превышать доступную пропускную способность вашего сервера. Таким образом, при рассмотрении всех пользователей узким местом являются возможности сервера, а при рассмотрении отдельного пользователя узким местом может быть пропускная способность этого отдельного пользователя. (Возможно, идеальный тест будет выполняться из нескольких удаленных мест, чтобы лучше имитировать реальные обстоятельства, хотя в большинстве случаев это не нужно).
cyberx86
«Учитывая всех пользователей вместе, узким местом являются возможности сервера» - это имеет смысл и кажется правильным способом обдумать это. Я полагаю, что сервер мог бы сидеть за дрянным сетевым оборудованием, ограничивая скорость отклика внешним миром, но на самом деле это не проблема сервера, и его необходимо решать отдельно. Полагаю, что- то вроде Pingdom можно использовать для запуска идеального теста.
Дон

Ответы:

3

Если вы заботитесь о производительности вашего сервера, когда к нему обращаются откуда-то в мире, попросите друга где-нибудь в мире (должен иметь хорошую пропускную способность) установить sproxy + siege на его linux box. Просто скачайте, настройте, сделайте. Эти инструменты маленькие, они компилируются за считанные секунды.

Прежде всего, начните sproxyс Linux. По умолчанию он будет работать через порт 9001 на локальном хосте (127.0.0.1). Если вы хотите получить к нему доступ извне, просто передайте ему исходящий IP-адрес в качестве параметра.
Теперь подключитесь к sproxy, настроив свой браузер на использование этого ip и порта в качестве прокси для HTTP. Все, что вы делаете с этого момента, записывается sproxy и может быть воспроизведено позже. Теперь зайдите на ваш сайт, делайте то, что делали бы ваши клиенты, и пытайтесь делать «дорогие» вещи, которые используют ваш сервер.
Когда закончите, завершите sproxy, нажав CTRL ^ C. Он записал ваши действия в $HOME/urls.txt. Переместите файл туда, где находится осада. Чтобы начать стресс-тестирование, запустите siege -f urls.txt -d NUM -c NUM. dобозначает задержку между запросами, при выполнении тестов производительности используйте 1 (секунда).cобозначает количество симулированных одновременных пользователей. Выбирай по желанию, но начинай с малого. Siege покажет вам количество транзакций в секунду, частоту появления ошибок, длительность выполнения запросов и т. Д. Это мощный и простой в использовании инструмент.
Если вам нужна дополнительная информация о параметрах (их много), проверьте руководство по осаде и руководство по sproxy

Чтобы получить более реалистичные результаты, позвольте многим людям одновременно тестировать ваш сервер из разных стран и отправлять вам статистику.

SebiF
источник
2

Реалистическое количество запросов в секунду должно быть взято из журналов доступа. IMO, задержка запроса не имеет ничего общего с нагрузкой на сервер, так как сервер обрабатывает все запросы с одинаковой скоростью независимо от их происхождения.

ejaenv
источник
1

Подумайте об использовании таких услуг, как Soasta Cloudtest . С его помощью вы можете получать довольно подробные отчеты о ваших тестах и ​​запускать тесты производительности от различных поставщиков общедоступного облака / виртуализации. Вы можете настроить, как тяжело и как долго вы хотите забивать свои серверы. У них также есть бесплатная « облегченная » версия, чтобы вы могли увидеть, что она может сделать, прежде чем вносить какие-либо деньги.

Mxx
источник