График 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 жертвует небольшим временем обработки, позволяя обрабатывать больше параллельных запросов, сохраняя при этом разумное время ответа.