Привет, Хабр! На связи Егор Сапун, руководитель направления сертификации инфраструктуры Рег.облака. 

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

Навигация по тексту:

Как устроены shared- и dedicated-сервисы

В стандартной облачной продуктовой линейке провайдер обычно предлагает vCPU — виртуальные ядра, которые гипервизор нарезает из физических. Один физический поток может обслуживать несколько vCPU разных клиентов одновременно. Соотношение vCPU к физическим потокам — коэффициент переподписки (overcommit ratio). Значение 2:1 или 4:1 — стандартные показатели. Это рабочая модель, основанная на статистике: большинство ВМ не нагружают процессор одновременно и на полную. Пока нагрузка распределена неравномерно — shared CPU работает предсказуемо.

В линейке с выделенным CPU физические ядра фиксируются за конкретной ВМ и не делятся с соседями — это гарантирует стабильную производительность вне зависимости от активности других клиентов на хосте.

Ключевое понятие здесь — steal time: процент времени, когда vCPU хочет работать, но физического ядра нет, потому что его занял другой поток. Именно он объясняет нерегулярные просадки производительности, которые сложно воспроизвести: проблема возникает тогда, когда соседи на хосте активны, и исчезает, когда они простаивают.

Stateless-сервисы и веб-приложения с непредсказуемым трафиком → shared CPU

Фронтенд, API-серверы, микросервисы с горизонтальным масштабированием — нагрузка здесь по природе своей неравномерна. Пики сменяются затишьем, запросы короткие. Shared CPU справляется с этим хорошо: пока одна ВМ обрабатывает всплеск, соседние простаивают, и физические ядра достаются тем, кому нужны прямо сейчас.

Модель переподписки работает в пользу клиента именно здесь: ресурсы используются эффективно, нагрузка распределяется по времени.

Dev/staging-окружения → shared CPU

Dev- и staging-окружения редко работают под постоянной нагрузкой. Тесты запускаются по расписанию или вручную, в остальное время ВМ простаивает. Периодические просадки производительности здесь некритичны — они не влияют ни на пользователей, ни на SLA. Shared CPU — очевидный выбор для всех окружений, которые не являются продуктивными.

Batch-обработка без жесткого расписания → shared CPU

ETL-процессы, импорт данных, ночные отчеты, генерация выгрузок — если задача не требует завершения к конкретному моменту, небольшой steal time на результат не влияет. Задача выполнится чуть дольше, но это приемлемо.

Исключение — batch-задачи с жестким SLA или те, что блокируют другие процессы до своего завершения. Здесь уже стоит смотреть на выделенный CPU.

OLTP-нагрузки и транзакционные СУБД → выделенный CPU

PostgreSQL, MySQL, Oracle, 1С — транзакционные системы чувствительны к задержкам на уровне планировщика. Транзакция держит блокировки: пока она ждет CPU, другие транзакции стоят в очереди. Steal time в 10–15% превращается в непредсказуемые всплески latency, которые пользователи чувствуют как «база иногда тупит».

При этом средние показатели могут выглядеть нормально — проблема проявляется в хвостах распределения (p95, p99). Если эти значения входят в SLA или напрямую влияют на пользовательский опыт, shared CPU создает структурный риск.

OLAP и аналитические запросы с жесткими SLA → выделенный CPU

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

ERP, CRM, финансовые системы → выделенный CPU

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

Системы с персональными данными в аттестованном контуре → выделенный CPU

Отдельный случай, где вопрос производительности пересекается с compliance.

В аттестованном облаке по 152-ФЗ работают системы с повышенными требованиями к защите: набор сертифицированных средств защиты информации, подтвержденные типовые конфигурации инфраструктуры. До недавнего времени это означало компромисс — либо compliance, либо гарантированная производительность. Теперь эти два требования можно закрыть в рамках одного контура.

Выделенный CPU в аттестованном облаке — это выбор для продуктивных систем с реальной нагрузкой: СУБД, ERP, финансовые системы, высоконагруженные веб-приложения, которые обрабатывают персональные данные. Физические ядра фиксируются за конкретной ВМ без переподписки — производительность стабильна вне зависимости от соседей на хосте, а вся инфраструктура остается в аттестованном контуре.

Так что в итоге?

Shared CPU — правильный выбор там, где нагрузка неравномерна, просадки некритичны и нет жестких требований к latency: stateless-сервисы, dev/staging, batch без SLA.

Небольшой бонус: шпаргалка для тех, кто прочитал весь текст целиком :) 
Небольшой бонус: шпаргалка для тех, кто прочитал весь текст целиком :) 

Выделенный CPU оправдан там, где нестабильность производительности становится проблемой: транзакционные СУБД, системы с синхронными запросами к базе, аналитика с жесткими SLA, а также любые продуктивные системы в аттестованном контуре 152-ФЗ. А конфигурации Shared CPU, выделенного CPU и выделенного CPU в аттестованном облаке 152-ФЗ можно посмотреть на сайте Рег.облака.


Вопросы по выбору конфигурации для вашего проекта — пишите в комментариях, разберем!