Является ли наличие большего количества ядер ЦП лучшим вариантом для работы веб-сервера?

Является ли наличие большего количества ядер ЦП лучшим вариантом для работы веб-сервера?

Я читал о том, как потоки пользователя сопоставляются с потоками ядра наВикипедияИз этой статьи я понял, что FreeBSD использует 1:1 (потоковое исполнение на уровне ядра).

Таким образом, каждый поток User, созданный приложением, отображается в поток Kernel. Если я предполагаю, что создаю веб-сервер, который будет обрабатывать каждый новый запрос в потоке, и работаю на FreeBSD, улучшит ли увеличение числа ядер общую производительность приложения?

Я прочитал этот вопросЯдра ЦП: чем больше, тем лучше?, но я хочу, чтобы объем ответов определялся именно соответствием 1:1 между потоками пользователя и ядра.

решение1

Короткий ответ: да.

Длинный ответ: .... больше ядер ЦП означает больше вычислительной мощности. В случае веб-приложения PHP / Ruby / Python / и т. д. это означает больше ресурсов для обработки одновременных подключений. Больше ядер действительно имеет значение в случае приложения с большой нагрузкой.

Мое личное мнение таково, что в случае выбора между большей вычислительной мощностью и большим объемом оперативной памяти я в большинстве случаев выбираю больше оперативной памяти. С помощью оперативной памяти вы можете уменьшить узкое место, которым является дисковый ввод-вывод.

Используя кэш-системы, такие какPHP АПК,Лак, иНастройка MySQL(кеш таблиц, кеш запросов и т. д.), вы можете значительно повысить производительность своего веб-сайта, не требуя при этом дополнительной мощности ЦП для генерации контента.

Если ваш сайт можно кэшировать, сделайте этот выбор. Простое увеличение числа ядер ЦП — проигрышный выбор в долгосрочной перспективе.

решение2

Да.

Современное программное обеспечение веб-сервера использует отдельный процесс или поток для каждого компьютера, подключающегося к серверу. Кроме того, бэкэнд-программное обеспечение, такое как MySQL или PHP, также работает в отдельных процессах или потоках для каждого пользователя, которого оно должно обслуживать, поэтому наличие большего количества ядер всегда полезно.

Конечно, в более интенсивных средах производительность диска, память или пропускная способность сети могут стать узкими местами. Больше памяти позволяет больше кэшировать чтение, что сократит доступ к медленному дисковому хранилищу. Как предполагает Biapy, если вы имеете дело с большим количеством запросов в секунду, вам следует рассмотреть специализированное программное обеспечение для кэширования, такое как Varnish, которое значительно снизит нагрузку на систему.

решение3

Как обычно, ответ будет таким: это зависит от обстоятельств.

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

Как вы можете видеть в связанных измерениях производительности, потоковые веб-серверы Apache создают больше потоков и используют больше памяти, если количество одновременных подключений увеличивается. Объем памяти, используемый nginx, остается довольно постоянным. А по количеству запросов, обрабатываемых в секунду, nginx значительно превосходит apache.

Поэтому нити не всегда являются лучшим решением.

Производительность также зависит от того, где находятся ваши данные. Если они находятся на жестком диске, доступ к ним будет медленнее, чем когда они находятся в оперативной памяти, которая, в свою очередь, намного медленнее, чем кэш процессора. Если вы хотите ускорить свой веб-сервер, рассмотрите возможность использования ускорителя, напримерлак. Рассмотрите возможность прочтенияЭта статьяот основного автора Varnish о производительности в веб-обслуживании. Сообщение здесь в том, что вы должныиспользоватьвстроенные механизмы кэширования операционной системы и что вам не следует пытаться выполнить ту же работу самостоятельно.

Связанный контент