Я сделал тест с ab -n 10000 -c 1000
против node.js с разными конфигурациями, каждый из которых возвращает строку Hello World!
. Результаты кажутся мне странными.
Ось X - количество запросов, y - время ответа в миллисекундах.
cluster
модуль (два ядра)Во-первых, nginx слишком медленный как балансировщик, у него худший результат из трех. Лучше, чем один узел только до 1000 запросов (но медленнее, чем кластер). Еще одна странность заключается в том, что один только узел имеет постоянное время отклика до ~ 7000 (?). Начиная с ~ 7000 запросов, время отклика кластера больше, чем у узла, и это кажется слишком странным.
Как бы вы интерпретировали эти результаты? Я что-то делаю неправильно (ошибки скамейки или черчения)?
ApacheBench 2.3 (1430300), Node.js 0.10.5, nginx 1.4.1. Работает на Xubuntu 13.04 x64.
Это вопрос интерпретации. Вы не делаете ничего плохого. Вот как я интерпретирую график. Это график распределения x vs y, где:
Заявления, основанные на распределении запроса для узла (отдельно), будут:
Но при совокупном анализе это будет:
Конфигурация кластера покажет более быстрые результаты, чем ожидалось с одним узлом.
Для результатов nginx будет фиксированная задержка в обработке / балансировке нагрузки. Глядя на рисунок, это будет задержка около 9-10 мс, что вполне ожидаемо. Это не означает, что конфигурация nginx плохая. Он действительно возвращает большинство запросов в течение 30 мс (небольшое отличие от других конфигураций).
Вы указали количество одновременных запросов как 1000 в Apache Bench, что не требует большой балансировки нагрузки, поскольку даже один узел легко справляется с такой большой нагрузкой. Предоставление большего количества одновременных подключений / более тяжелой обработки для каждого запроса взорвет график для одного узла (он поднимется раньше для меньшего количества запросов). Nginx жертвует небольшим временем обработки, чтобы обрабатывать больше одновременных запросов, сохраняя при этом разумное время ответа.