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

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

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

  • Узел только сервер
  • Узел (кластер) - это сервер, использующий cluster модуль (два ядра)
  • Nginx (балансировщик) выступает в качестве балансировщика перед (двумя) экземплярами узлов, выполняющими один и тот же код

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

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

На графике результаты

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

1 ответ

Решение

Это вопрос интерпретации. Вы не делаете ничего плохого. Вот как я интерпретирую график. Это график распределения x против 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 жертвует небольшим временем обработки, позволяя обрабатывать больше параллельных запросов, сохраняя при этом разумное время ответа.

Другие вопросы по тегам