Один или два процессора в физическом сервере что лучше для сайта

В конфигурациях физических серверов иногда встречаются две очень похожие на первый взгляд машины. В одной установлен один мощный процессор, например AMD EPYC или Intel Xeon, а в другой стоят сразу два серверных CPU. Вторая конфигурация выглядит очевидно серьёзнее. Два процессора ассоциируются с двойной производительностью, большим запасом и сервером совсем другого класса. Отсюда легко сделать вывод, что для крупного сайта двухпроцессорная машина должна быть лучше.

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

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

Поэтому выбирать между одним и двумя CPU стоит не по количеству установленных процессоров, а по тому, сколько параллельной работы выполняет проект и какие ограничения уже существуют у текущего сервера.

Чем двухпроцессорный сервер отличается от одного мощного CPU

Однопроцессорный физический сервер содержит один центральный процессор. При этом сам CPU сегодня может быть очень производительным и иметь десятки физических ядер. Поэтому слово однопроцессорный давно не означает небольшую или слабую машину.

Современные серверные процессоры AMD EPYC и Intel Xeon способны предоставить огромное количество вычислительных ресурсов в рамках одного сокета. К ним подключается большой объём оперативной памяти, быстрые NVMe, сетевые карты и другое оборудование. Такой машины может хватить для очень крупного интернет-магазина, базы данных, нескольких десятков сайтов или целого набора виртуальных серверов.

Двухпроцессорная система содержит две отдельные физические микросхемы CPU. У каждого процессора есть собственные ядра, кэш и прямой доступ к определённой части оперативной памяти. Между собой процессоры соединяются специальным высокоскоростным интерфейсом.

Если в машине установлено два процессора по 24 ядра, операционная система может видеть 48 физических ядер. На бумаге это выглядит как простое удвоение ресурсов. Для некоторых нагрузок примерно так и происходит: если сервер одновременно выполняет большое количество независимых задач, дополнительные ядра действительно дают большой прирост общей пропускной способности.

Но отдельный запрос к сайту не обязательно способен использовать все эти ресурсы сразу.

Два процессора не делают одну страницу в два раза быстрее

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

Один такой запрос обычно не распределяется автоматически между десятками процессорных ядер. Значительная часть работы выполняется последовательно в рамках одного процесса. Поэтому скорость ответа сильно зависит от производительности конкретного ядра, а не только от общего количества CPU в машине.

Если старый двухпроцессорный сервер содержит много сравнительно медленных ядер, современная однопроцессорная машина с меньшим количеством, но более быстрыми ядрами способна формировать отдельные динамические страницы заметно быстрее.

Именно поэтому недорогая двухпроцессорная конфигурация на старых Xeon не обязательно является выгоднее нового сервера на одном современном процессоре.

Другое дело, когда одновременно приходят сотни или тысячи запросов. Один процесс PHP обрабатывает страницу первого посетителя, другой обслуживает второго, база данных выполняет свои потоки, в фоне запускаются задания cron, импорт каталога и резервное копирование. Здесь дополнительные ядра уже могут активно использоваться параллельно.

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

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

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

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

Для одного WordPress-сайта с умеренной нагрузкой второй физический процессор чаще всего совершенно избыточен.

В двухпроцессорном сервере память тоже устроена сложнее

Одна из главных особенностей многопроцессорных машин называется NUMA, или Non-Uniform Memory Access. Название выглядит сложно, но принцип достаточно понятен.

В двухпроцессорной системе оперативная память распределяется между процессорами. Первый CPU имеет наиболее быстрый прямой доступ к своей части RAM, второй — к своей. При необходимости процессор способен обращаться и к памяти, физически подключённой к другому CPU, но такое обращение проходит через межпроцессорное соединение и обычно имеет большую задержку.

Получается, что для программы уже существует разница, где находятся её данные и на каком процессоре выполняется соответствующий код.

Современные операционные системы умеют учитывать NUMA и стараются размещать процессы и память рационально. Многие серверные приложения тоже оптимизированы под многопроцессорные машины. Но сама архитектура всё равно сложнее, чем у системы с одним сокетом.

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

Именно поэтому нельзя рассматривать двухпроцессорный сервер как одну гигантскую микросхему, где все ядра и вся память абсолютно одинаково связаны между собой.

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

Есть и другое преимущество одного современного мощного процессора — энергопотребление и охлаждение. Два CPU требуют двух сокетов, двух систем охлаждения и обычно потребляют больше электричества. Для клиента арендованного сервера это не всегда видно отдельной строкой в счёте, но провайдер учитывает стоимость питания и охлаждения в тарифе.

Поэтому двухпроцессорная конфигурация имеет экономический смысл только тогда, когда второй CPU действительно используется.

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

Два сокета увеличивают суммарную пропускную способность памяти и часто позволяют установить больший общий объём RAM.

Например, если серверу требуется несколько терабайт оперативной памяти, двухпроцессорная платформа может оказаться естественным выбором не ради количества ядер, а ради необходимой ёмкости и пропускной способности памяти.

Для обычного сайта такие объёмы практически никогда не требуются. Даже крупный интернет-магазин чаще использует десятки или сотни гигабайт памяти, а современные односокетные серверы легко способны предоставить такие конфигурации.

Ещё одно преимущество многопроцессорной платформы связано с PCI Express. Процессор предоставляет линии, к которым подключаются NVMe, сетевые карты, GPU и другие устройства. Второй CPU способен увеличить суммарное количество доступных линий и тем самым позволить установить больше высокоскоростного оборудования.

Это полезно для больших систем хранения, нескольких GPU, быстрых сетевых интерфейсов и других специализированных конфигураций.

Но и здесь обычный веб-сервер редко достигает ограничений современного однопроцессорного CPU.

Когда сайту действительно нужны два физических процессора

Самая очевидная причина — сервер уже использует почти все ресурсы одного современного процессора, а нагрузка хорошо распределяется между ядрами.

Представим большой проект, где одновременно работают сотни PHP-процессов, несколько сервисов приложений, крупная база данных и множество фоновых задач. Мониторинг показывает, что все ядра регулярно загружены, очередь процессов растёт, а оптимизация программного обеспечения уже выполнена.

В такой ситуации увеличение общего количества вычислительных ресурсов может быть оправдано.

Но даже здесь сначала стоит сравнить двухпроцессорную машину с более производительным однопроцессорным сервером нового поколения. Иногда переход со старых двух CPU на один современный EPYC способен одновременно повысить производительность и упростить архитектуру.

Особенно хорошо двухпроцессорные системы подходят для виртуализации. Если одна физическая машина превращается в десятки VPS, ядра легко распределяются между независимыми виртуальными серверами. Один VPS использует часть CPU, второй выполняет другую работу, третий занят базой данных.

Здесь суммарная производительность машины важнее скорости одного конкретного процесса.

Поэтому такие серверы часто встречаются именно в инфраструктуре хостинг-провайдеров и крупных компаний.

Другой сценарий — большая корпоративная база данных. PostgreSQL, Microsoft SQL Server, Oracle и другие системы способны эффективно использовать многопроцессорное оборудование при подходящей нагрузке. Если одновременно выполняется большое количество запросов и работа правильно распараллеливается, дополнительные ядра и каналы памяти становятся полезными.

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

Поэтому перед масштабированием железа всё равно нужно анализировать реальное узкое место.

Двухпроцессорная система также может быть оправдана при огромном объёме оперативной памяти. Если приложение требует столько RAM, сколько односокетная платформа физически не поддерживает или поддерживает только в очень дорогой конфигурации, второй CPU расширяет возможности сервера.

Для аналитических систем, in-memory баз, больших виртуализационных узлов и некоторых научных расчётов это нормальный сценарий.

Для одного коммерческого сайта он встречается намного реже.

Ещё один класс задач связан с большим количеством устройств PCI Express. Несколько GPU, быстрые сетевые карты, NVMe-накопители и специализированные контроллеры могут требовать больше линий, чем способен предоставить один процессор.

Тогда второй сокет становится частью общей архитектуры машины.

Если же сервер нужен для обычного интернет-магазина, корпоративного сайта, портала или нескольких десятков веб-проектов, современный мощный однопроцессорный сервер часто выглядит рациональнее.

Он проще по архитектуре, способен иметь много ядер и поддерживать большой объём RAM, а высокая производительность отдельного ядра особенно полезна для веб-приложений.

При выборе процессора для физического сервера поэтому важнее смотреть на конкретную модель и поколение CPU, чем на количество установленных процессоров.

Два старых Xeon не становятся автоматически лучше одного современного процессора только из-за того, что их два.

Это особенно актуально для недорогих выделенных серверов. На рынке до сих пор много машин предыдущих поколений с двумя Intel Xeon E5. Они могут предоставлять большое количество ядер и памяти за сравнительно небольшие деньги, поэтому выглядят очень привлекательными.

Для виртуализации, тестовых окружений, фоновых задач и проектов, которым важна общая многопоточная производительность, такие серверы действительно способны быть выгодными.

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

Поэтому сравнивать стоит реальные характеристики и тесты конкретных CPU, а не архитектуру один сокет против двух сокетов сама по себе.

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

Особенно внимательно это стоит проверять при использовании Microsoft SQL Server, корпоративных систем виртуализации и другого коммерческого программного обеспечения.

Для Linux, обычного веб-стека и большинства открытых приложений такой проблемы обычно нет, но сама инфраструктура всё равно становится сложнее.

Есть ещё одна важная мысль: если один сайт действительно вырос до такой степени, что ему требуется огромная двухпроцессорная машина, стоит подумать не только о вертикальном масштабировании.

Постоянно увеличивать мощность одного сервера можно только до определённого предела. Рано или поздно появляется смысл разделить компоненты проекта.

Базу данных можно перенести на отдельную машину. Несколько веб-серверов способны работать за балансировщиком. Статические файлы можно вынести в CDN или отдельное хранилище. Фоновые задания можно выполнять на собственных узлах.

Такая архитектура сложнее, но одновременно уменьшает зависимость всего проекта от одной физической машины.

Представим очень мощный сервер с двумя процессорами, огромным объёмом RAM и быстрым RAID. Пока он работает, производительность прекрасная. Но если выходит из строя материнская плата, недоступными одновременно становятся веб-сервер, база данных и все остальные компоненты проекта.

Поэтому после определённого уровня нагрузки вопрос меняется с какой CPU поставить на один сервер на как распределить приложение между несколькими узлами.

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

Просто веб-сайт сам по себе ещё не является такой задачей.

Для обычного проекта я бы сначала выбирала современный однопроцессорный сервер с хорошей производительностью одного ядра и достаточным количеством физических ядер. Затем смотрела бы на реальную загрузку после запуска.

Если CPU большую часть времени работает на 20-30 процентов, добавлять второй процессор бессмысленно. Если одно ядро регулярно перегружено, а остальные почти свободны, второй CPU тоже не решит проблему. Нужна более высокая однопоточная производительность или оптимизация приложения.

Если все ядра одновременно и регулярно загружены, дополнительные вычислительные ресурсы уже способны помочь.

При этом важно смотреть не только на среднюю загрузку. Сервер может в среднем использовать 25 процентов CPU, но каждый вечер на десять минут полностью упираться в процессор во время импорта каталога. Нужно понять, насколько эти пики мешают пользователям и можно ли перенести тяжёлую задачу на другое время или оптимизировать её.

Иногда дешевле изменить расписание фоновой обработки, чем постоянно оплачивать второй CPU ради нескольких минут нагрузки в сутки.

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

Важен и запас производительности. Сервер не должен постоянно работать на 100 процентах. Пиковая посещаемость, новые функции и рост базы требуют свободных ресурсов.

Но разумный запас и удвоение всей вычислительной платформы заранее — разные вещи.

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

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

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

Для сайта лучший сервер не тот, где больше физических процессоров. Лучший тот, где архитектура CPU соответствует характеру нагрузки, а цена дополнительных ресурсов оправдана реальной производительностью проекта.

Оцените статью
Рейтинг хостингов
Добавить комментарий