Поможет ли Multi-Core / Multi-Proc повысить производительность на веб-сервере? - PullRequest
1 голос
/ 28 октября 2011

Преимущества NGINX или Apache от сервера, который имеет:

  • Многоядерные или

  • Несколько процессоров?

Если так, то почему?

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

Использование нескольких процессоров / процессорных ядер дает серверным приложениям возможность обрабатывать несколько клиентских подключений (и запросов) параллельно (для достижения более высокой производительности).

В мире многоядерных процессоров этот вопрос был предметом обширных исследований.

Существует 3 способа устранения параллелизма (например, многоядерные процессоры):

  1. с использованием нескольких процессов;

  2. использование нескольких потоков в одном процессе;

  3. использование нескольких потоков в нескольких процессах.

Apache исследовал несколько моделей, и Nginx использует опцию №1.

Какая модель работает лучше, обычно считается вопросом реализации (по крайней мере, в Unix, где процессы очень легкие, поэтому они могут конкурировать с потоками).

Теперь вернемся к вопросу (на основании опубликованных тестов чтения здесь ): правильная (многопоточная) архитектура Apache должна масштабироваться лучше, чем Nginx на многоядерных процессорах.

Как это ни парадоксально, это не означает, что Apache работает быстрее, чем Nginx: это просто означает, что на 1, 2, 3, ... 16 ядрах Apache будет масштабироваться лучше, чем Nginx, тогда как Nginx будет обрабатывать больше клиентских запросов:

  • Быстродействие должно быть быстрым (обработка большего числа запросов в секунду на одноядерном процессоре)

  • Масштабируемость - это способность обрабатывать больше запросов в секунду при увеличении числа ядер ЦП (идеальным является линейное масштабирование: удвоение запросов в секунду при удвоении количества ядер ЦП).

Масштабирование без производительности не имеет смысла, если число запросов в секунду к серверу, который масштабируется, ниже скорости сервера, который не масштабируется (обратите внимание, что если сервер ДЕЙСТВИТЕЛЬНО хорошо масштабируется, есть момент, когда наличие МНОГИХ ядер должно заставить его работать лучше, чем сервер, который не масштабируется).

Выполнение без масштабирования делает сервер неспособным использовать преимущества многоядерных процессоров.

Безусловно, будущее будет за серверными приложениями, которые выполняют обе функции правильно, чтобы обеспечить наилучшую производительность при любых условиях (всего несколько ядер или много-много ядер).

0 голосов
/ 08 ноября 2011

Только многоядерные системы выиграют от многоядерных процессоров.Я знаю, что Apache многопоточный, и его производительность увеличивается с многоядерностью.Как правило, производительность увеличивается с многоядерностью, если выполняемая работа делится на небольшие части работы, которые не должны зависеть друг от друга.Apache запускает процессы для обслуживания веб-запросов, и различные запросы могут выполняться одновременно на нескольких ядрах, что повышает производительность.Если NGINX однопоточный, он не будет использовать многоядерный.

Многоядерный / многопроцессорный - это одно и то же в этом контексте.

0 голосов
/ 28 октября 2011

Да.

Полагаю, ваш вопрос в том, лучше ли один или другой?

В этом случае это довольно сложный вопрос, но обычно я ожидаю, что несколько процессоров будут работатьлучше.

Вот хороший ответ, описывающий архитектуру обоих: nginx: он многопоточный, но использует несколько процессов?

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

...