@OnlyMyQuestion

Какие характеристики виртуального сервера необходимы для данной нагрузки?

Добрый день.
Имеется проект, который крутится на сервере рядом с кучкой других проектов заказчика. Временами все это падает, но так как отвечать за другие проекты нет никакого желания - решено было перенести все на отдельную виртуалку с оптимальными характеристиками. Так как я разработчик, а не сис. админ - присутствуют только поверхностные знания о данной области. Естественно, kvm + ssd и связка fpm + nginx + mysql.

Собрал логи за последние 10 дней:
Соотношение отдаваемой статики (nginx) / динамики (fpm) - 17% / 83%
Странички небольшие, статика тоже, общий объем данных на диске - 3gb.

Максимальное количество rps: 306
Но оно довольно редкое, общая статистика такая:
Запросы Процент
1 — 10 33.53%
11-50 64,68%
51-100 1,42%
101-150 0,26%
151-200 0,07%
201-250 0,014%
251-300 0,003%
300+ 0,0001%

Получается:
Треть дня - 10rps
Еще две трети - 11-100rps
Малая часть: 100-300

Распределение относительно равномерное - запросы растут с 18 по мск, и к 2 ночи падают до 1-50.
Снял метрики с php скриптов, любая страница генерируется за 15-25ms.
ttfb - 150-300ms (в зависимости от keep-alive) через cloudflare
Один php-fpm процесс занимает в среднем 20mb памяти и 10-20% cpu (top|ps)
База небольшая: 100mb 70%/30% (Данные, индексы) (Запросы используются экономно - кэш в приложении)

Попытался посчитать необходимое количество fpm воркеров:
avg: 50rps, 83% из которых php - 40rps, за 100 ms 4rps, удвоил, 8 воркеров должно быть за глаза, по памяти - 30mb (50% на утечку до рестарта) на 1, итого: 8 воркеров, 240mb.
min: 10rps, логика, аналогичная пункту выше, 2 воркера, 60mb
max: 300rps, 50 воркеров, 1.5gb (не много ли?)
p.s - Нет четкого понимания, данных моментов:
Подключился клиент, nginx получил заголовки, нужно отправить на fpm. С какого момента он инициализирует соединение с fpm воркером? Когда он только получил заголовки, или когда уже получил весь запрос от клиента, где тоже могут быть задержки?
fpm отработал - отправляет ли он сразу все в nginx и освобождается для следующего коннекта, или если появляется задержка с клиентом - nginx перестает получать данные от fpm заполнив свой буфер, следовательно fpm воркер будет занят дольше?
Если исходя из данных ответов nginx держит fpm воркер занятым минимально - то можно поделить количество воркеров еще на 3, и получить для максимальной нагрузки, примерно 18 воркеров, и 600mb оперативки.

Плюсую nginx, mysql, и получаю: 30gb ssd, 2 ядра, 2 гига оперативки, kvm.

Не слишком большие/маленькие характеристики я высчитал? Необходимо - оптимальное количество ресурсов,
чтобы не работать в холостую.
Буду благодарен за любые советы/помощь/расчеты?
  • Вопрос задан
  • 527 просмотров
Решения вопроса 1
@vitaly_il1
DevOps Consulting
Я вижу два варианта - или нагрузочное тестирование, которое позволит точно определить нужные параметры (https://loadimpact.com/ и т.п.),
или взять наугад (я бы начал с 8gb RAM, CPU менее критично) и поправлять на ходу в зависимости от результатов мониторинга.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanes
@Sanes
VDS это колхоз. Без тестирования ничего не поймете. То, что написано в тарифах, фактически может отличаться в разы у разных провайдеров.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы