VPS для интернет-магазина: расчёт мощности под трафик

Для бизнеса
VPS для интернет-магазина: расчёт мощности под трафик

VPS для интернет-магазина подбирают не «на глаз», а расчётом: сколько посетителей приходит, сколько из них одновременно находится на сайте и сколько ресурсов съедает одна загрузка страницы. Ошибка в любую сторону стоит денег — слабый сервер для интернет-магазина роняет конверсию в час пик, избыточный просто сжигает бюджет. В этой статье выведем простую формулу расчёта мощности по трафику и конверсии, объясним, почему база данных магазина обязана жить на NVMe, и покажем готовые конфигурации — от первого магазина на WooCommerce до каталога на десятки тысяч товаров.

Чем магазин отличается от обычного сайта

Блог или лендинг почти полностью отдаётся из кеша: страница собрана один раз и раздаётся тысячам посетителей без нагрузки. У интернет-магазина так не получается:

  • Корзина и checkout не кешируются. Каждое добавление товара, пересчёт доставки и оформление заказа — это живые запросы к PHP и базе данных.
  • Каталог — это база. Фильтры «цена + размер + бренд», сортировки, поиск, остатки на складе — десятки SQL-запросов на каждую страницу.
  • Фоновые интеграции. Синхронизация с 1С или МойСклад, выгрузка фидов в маркетплейсы и Яндекс Маркет, отправка писем — всё это ест CPU параллельно с посетителями.
  • Цена простоя измерима. Если магазин с выручкой 300 000 ₽/мес недоступен 1% времени — это минус ~3000 ₽ и подорванное доверие. Поэтому важен и uptime площадки: у Cheap-Host он составляет 99,9%.

Отсюда главный вывод: магазину нужны гарантированные ресурсы (KVM-виртуализация, а не контейнеры с оверселлингом) и быстрый диск. Если вы ещё выбираете между шаред-хостингом и VPS — загляните в статью «VPS или виртуальный хостинг: 7 признаков, что пора переезжать».

Формула: от трафика к одновременным пользователям

Считаем в три шага. Понадобятся две цифры из Яндекс Метрики: посетители в сутки и средняя длительность визита.

Шаг 1. Пиковый час

Трафик распределён неравномерно: в вечерний пик магазин получает примерно 10–15% дневного трафика за один час. Для 2000 визитов в день это ~250 визитов в пиковый час.

Шаг 2. Одновременные посетители

Формула:

Одновременные = (визиты в пиковый час × длительность визита в сек) / 3600

Пример: 250 визитов × 300 сек (5 мин) / 3600 ≈ 21 человек одновременно

Шаг 3. Активные запросы

Из 21 находящегося на сайте реально «нажимает» в каждый момент лишь часть — остальные читают карточку товара. Практический коэффициент — 20–30%: то есть 4–7 одновременных PHP-запросов. Именно под эту цифру подбираются PHP-FPM-воркеры и память.

Один PHP-воркер WooCommerce или Битрикс занимает 80–150 МБ RAM и обрабатывает запрос за 0,3–1 секунду. Дальше арифметика памяти:

RAM = ОС и сервисы (~1 ГБ)
    + MySQL (2–4 ГБ на средний каталог)
    + Redis/кеш (0,5–1 ГБ)
    + PHP-воркеры (число × 150 МБ)
    + запас ×2 на акции и рекламу

Для примера выше: 1 + 3 + 1 + (10 × 0,15) ≈ 6,5 ГБ → с запасом ×2 ≈ 13 ГБ → тариф с 16 ГБ RAM

Коэффициент ×2 — не перестраховка: рассылка, реклама у блогера или распродажа приводит всплеск в 5–10 раз от обычного трафика, и умирают магазины именно в этот момент — когда посетители самые «горячие». Подробнее о подборе памяти — в статье «Сколько оперативной памяти нужно серверу».

Почему база данных обязана жить на NVMe

CPU у магазинов редко бывает первым узким местом — им почти всегда оказывается диск. Страница каталога с фильтрами генерирует 30–100 запросов к MySQL, и пока «горячие» данные не в кеше, каждый запрос — это чтения с диска. Разница между типами накопителей — на порядки:

ДискСлучайные IOPS (порядок)ЗадержкаЧто это значит для магазина
HDD~100–200миллисекундыФильтры каталога «думают» секундами
SATA SSD~10 000–90 000~0,1 мсНормально до первого наплыва
NVMeсотни тысяч+~0,02 мсБаза отвечает мгновенно даже в пик

NVMe подключается напрямую к PCIe, минуя узкий интерфейс SATA, — отсюда кратный прирост операций ввода-вывода и в разы меньшая задержка (разбор в статье о NVMe-дисках в VPS). На практике это выражается просто: поиск, фильтры и оформление заказа не деградируют, когда на сайте не 5 человек, а 50. У Cheap-Host NVMe стоит во всех тарифах, включая самый младший.

Место считайте так: система и стек ~10 ГБ, сайт с картинками товаров — от 5 до 50 ГБ (фото — главный потребитель), база — 1–10 ГБ, плюс локальные бэкапы минимум на 3 полных копии сайта. Для большинства магазинов 128 ГБ NVMe тарифа Pro хватает с запасом.

Готовые конфигурации по масштабу магазина

МасштабВизитов/деньРекомендацияТариф Cheap-Host
Старт: WooCommerce/OpenCart, до 1000 товаровдо 5006+ vCPU, 8 ГБ RAM, NVMeStart — 450 ₽/мес
Рабочий магазин: активная реклама, интеграции с 1С и маркетплейсами500–50008–12 vCPU, 16 ГБ RAM, NVMePro — 750 ₽/мес (базовый выбор)
Крупный каталог: 10 000+ товаров, 1С-Битрикс, Elasticsearch5000–20 00016+ vCPU, 32 ГБ RAM, NVMeUltra — 1500 ₽/мес

Почему базовым выбором мы называем Pro, а не Start. Магазин — это не только посетители: параллельно работают синхронизация остатков, генерация фидов, письма о заказах, антибот-фильтры. На 8 ГБ RAM всё это живёт впритык, и первый же рекламный всплеск отправляет сервер в swap. Pro (12 vCPU, 16 ГБ RAM, 128 ГБ NVMe за 750 ₽/мес) даёт тот самый двукратный запас из формулы выше — за разницу в 300 ₽/мес, которая окупается одним неупавшим вечером распродажи. Для магазинов на 1С-Битрикс с большим каталогом сразу смотрите Ultra — этому стеку памяти мало не бывает, детали в статье про требования Битрикс к VPS.

Отдельный плюс VPS перед «облаком с оплатой за потребление» — предсказуемость: трафик у Cheap-Host безлимитный, и удачная рекламная кампания не превратится в счёт-сюрприз. А если магазин перерос тариф, апгрейд CPU/RAM/диска выполняется без переустановки и потери данных — переезжать не придётся.

Что выжать из сервера до апгрейда

Правильная настройка стека способна утроить пропускную способность той же конфигурации:

  1. Кеш страниц. Категории и карточки товаров для незалогиненных посетителей отдавайте из кеша Nginx (fastcgi_cache) или плагина — это снимает 60–80% нагрузки на PHP.
  2. Redis для сессий и объектного кеша. Корзины и повторяющиеся выборки уходят из MySQL в память — база разгружается в разы.
  3. PHP-FPM под вашу RAM. Ограничьте pm.max_children расчётным числом воркеров, иначе наплыв посетителей уронит сервер в своп.
  4. Индексы MySQL. Включите slow_query_log и добавьте индексы под самые частые фильтры каталога — типичный медленный запрос ускоряется в 10–100 раз.
  5. Оптимизация картинок. WebP и ленивая загрузка сокращают трафик страницы в 2–3 раза и ускоряют загрузку на мобильных.

И до, и после оптимизаций проверяйте результат нагрузочным тестом — как это сделать с помощью ab, wrk и k6, рассказали в статье о нагрузочном тестировании сайта. Тестировать нужно не главную страницу (она из кеша), а «дорогие» сценарии: фильтры каталога и добавление в корзину.

Не забудьте про бэкапы и безопасность

Магазин хранит заказы и персональные данные покупателей — потерять их дороже, чем любой сервер. Минимальный набор: ежедневный дамп базы с выгрузкой копии на внешнюю площадку, SSL-сертификат (без HTTPS не работают платёжные системы и страдает ранжирование), файрвол с закрытым наружу MySQL, вход по SSH-ключам и fail2ban. Базовая DDoS-защита L3/L4 у Cheap-Host включена во все тарифы — от сетевого флуда младших уровней она прикрывает без доплат.

FAQ

Какой сервер нужен магазину на 1000 посетителей в день?

По формуле это 3–5 одновременных активных запросов в пик — уверенно тянет тариф Pro (12 vCPU, 16 ГБ RAM, NVMe, 750 ₽/мес). Запас закладывайте не под средний день, а под рекламные всплески ×5–10.

Почему для магазина важен NVMe-диск?

Каждая страница каталога — десятки запросов к базе. NVMe даёт на порядки больше IOPS и в разы меньшую задержку, чем SATA SSD, поэтому фильтры, поиск и checkout не замедляются под нагрузкой.

Хватит ли виртуального хостинга для магазина?

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

Как подготовить сервер к распродаже?

За неделю: нагрузочный тест «дорогих» сценариев, кеш страниц, Redis, проверка свободной RAM и диска. Не хватает — апгрейд тарифа: у Cheap-Host он делается без переустановки и потери данных.

Сколько стоит сервер для интернет-магазина?

Рабочий диапазон — 750–1500 ₽/мес: Pro за 750 ₽/мес как базовый вариант, Ultra за 1500 ₽/мес — для крупных каталогов и Битрикс.

Вывод

Расчёт сервера для интернет-магазина сводится к короткой цепочке: дневной трафик → пиковый час (10–15% дня) → одновременные посетители → активные PHP-запросы → память с двукратным запасом. Для абсолютного большинства магазинов ответ этой формулы — 16 ГБ RAM, побольше ядер и обязательно NVMe под базу. У Cheap-Host под это есть тариф Pro за 750 ₽/мес: 12 vCPU, 16 ГБ RAM, 128 ГБ NVMe, KVM, безлимитный трафик и разворачивание сервера за 45–60 секунд — а когда магазин вырастет, тариф апгрейдится без переезда. Все конфигурации — на cheap-host.onl.

Читайте также