Назад | Перейти на главную страницу

Построенные ab результаты узла, кластера и nginx, нечетные результаты?

Я сделал тест с ab -n 10000 -c 1000 против node.js с разными конфигурациями, каждый из которых возвращает строку Hello World!. Результаты кажутся мне странными.

Ось X - количество запросов, y - время ответа в миллисекундах.

Во-первых, nginx слишком медленный как балансировщик, у него худший результат из трех. Лучше, чем один узел только до 1000 запросов (но медленнее, чем кластер). Еще одна странность заключается в том, что один только узел имеет постоянное время отклика до ~ 7000 (?). Начиная с ~ 7000 запросов, время отклика кластера больше, чем у узла, и это кажется слишком странным.

Как бы вы интерпретировали эти результаты? Я что-то делаю неправильно (ошибки скамейки или черчения)?

ApacheBench 2.3 (1430300), Node.js 0.10.5, nginx 1.4.1. Работает на Xubuntu 13.04 x64.

Это вопрос интерпретации. Вы не делаете ничего плохого. Вот как я интерпретирую график. Это график распределения x vs y, где:

  • y - время отклика в мс,
  • x - общее количество запросов, возвращенных в течение y мс.

Заявления, основанные на распределении запроса для узла (отдельно), будут:

  • 7000 из 10000 запросов были возвращены в течение ~ 14 мс
  • 2000 из оставшихся 3000 запросов были возвращены в течение 14-18 мс
  • 800 из оставшихся 1000 запросов были возвращены в течение 18-22 мс.
  • Остальные 200 были возвращены в течение 35 мс.

Но при совокупном анализе это будет:

  • 7000 из 10000 запросов были возвращены в течение 14 мс
  • 9000 из 10000 запросов были возвращены в течение 18 мс
  • 9800 из 10000 запросов были возвращены в течение 22 мс
  • Все были возвращены в течение 35 мс

Конфигурация кластера покажет более быстрые результаты, чем ожидалось с одним узлом.

Для результатов nginx будет фиксированная задержка в обработке / балансировке нагрузки. Глядя на рисунок, это будет задержка около 9-10 мс, что вполне ожидаемо. Это не означает, что конфигурация nginx плохая. Он действительно возвращает большинство запросов в течение 30 мс (небольшое отличие от других конфигураций).

Вы указали количество одновременных запросов как 1000 в Apache Bench, что не требует большой балансировки нагрузки, поскольку даже один узел легко справляется с такой большой нагрузкой. Предоставление большего количества одновременных подключений / более тяжелой обработки для каждого запроса взорвет график для одного узла (он поднимется раньше для меньшего количества запросов). Nginx жертвует небольшим временем обработки, чтобы обрабатывать больше одновременных запросов, сохраняя при этом разумное время ответа.