Capacity planning и FinOps: ресурсы, стоимость, прогнозирование
↑ Этап 8 · Senior: надёжность, безопасность, платформа
Зачем это на собесе
Управление ресурсами и стоимостью на уровне инфраструктуры: прогноз, rightsizing, FinOps-практики.
Capacity planning
Процесс: измерить → смоделировать → запланировать → проверить → пересмотреть.
- Метрики нагрузки (RPS, активные пользователи, события, размер данных) и ресурсы (CPU, память, диск/IOPS, сеть, соединения, лимиты облака/квоты).
- Связь «бизнес-метрика → ресурс» (юнит-экономика ёмкости): «1000 RPS = 8 vCPU, 12 ГБ; 1 млн заказов = 80 ГБ БД».
- Прогноз роста: тренд (линейный/экспоненциальный), сезонность, маркетинговые события, релизы; сценарии (базовый, оптимистичный, пик).
- Запас (headroom): под пик, отказ зоны (N+1/N+2), задержки масштабирования; целевая загрузка 50–70% пиковая по CPU.
- Нагрузочные тесты для проверки модели и поиска узких мест (k6, Gatling, Locust), тест отказов.
- Заказ/подготовка мощностей: сроки (облако — минуты, on-prem — недели/месяцы), квоты провайдера, лимиты IP/ENI/аккаунтов.
- Регулярный пересмотр (ежемесячно/ежеквартально), алерты на приближение к пределам.
Метрики для прогноза (Prometheus):
predict_linear(node_filesystem_avail_bytes{mountpoint="/var/lib/postgresql"}[7d], 60*86400) < 0 # диск закончится за 60 дней
avg_over_time(sum(rate(http_requests_total[5m]))[30d:1h]) # динамика RPS
quantile_over_time(0.95, (1 - avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])))[30d:1h]) # p95 загрузки CPUУзкие места (часто неочевидные): число соединений БД, файловые дескрипторы, порты NAT/conntrack, IOPS/пропускная способность дисков и сети, лимиты облачных API, пулы потоков, размер кэшей, индексы/таблицы, rate limits внешних сервисов, время cold-start, квоты IP-адресов, лимиты Kubernetes (pods per node, IPs per node).
Закон масштабирования: не линеен — есть насыщение (Amdahl, универсальный закон масштабируемости Гюнтера); определить точку, после которой рост нагрузки резко снижает производительность.
Автомасштабирование как часть плана
HPA/KEDA + Cluster Autoscaler/Karpenter, autoscaling groups, scale-to-zero для dev; запас на скорость реакции (прогрев, время старта нод), scheduled scaling на известные пики, лимиты max (защита от лавинного роста стоимости).
FinOps
Культура и практика управления облачными расходами вместе с инженерией и финансами: стоимость — метрика качества решений.
Фазы: Inform (видимость и распределение затрат), Optimize (снижение), Operate (процессы и управление).
Видимость
- теги/метки на всех ресурсах (
env,team,service,cost-center,owner); обязательность — политиками (SCP, Kyverno, Terraform checks); в Kubernetes — метки подов/namespace и распределение затрат (Kubecost/OpenCost); - отчёты и дашборды (AWS Cost Explorer/CUR, Yandex Billing, GCP Billing export в BigQuery), showback/chargeback по командам;
- Unit economics: стоимость на пользователя/заказ/транзакцию/запрос (а не только общий счёт);
- бюджеты, алерты, обнаружение аномалий расходов.
Оптимизация
| Рычаг | Описание |
|---|---|
| Rightsizing | подгонка типов/размеров под фактическое использование (метрики p95), уменьшение requests/limits, VPA-рекомендации |
| Выключение неиспользуемого | dev/test по расписанию (ночью, выходные), «осиротевшие» диски, снапшоты, IP, LB, NAT, неиспользуемые образы |
| Модели оплаты | Reserved/Savings Plans/committed use для стабильной базовой нагрузки (скидки 30–70%), Spot/Preemptible для stateless/batch/CI (до 90% дешевле; обработка прерываний, PDB, множество типов инстансов) |
| Автоскейлинг | платить за нужное, scale-to-zero, bin packing (Karpenter консолидация) |
| Хранение | lifecycle (hot → cold → archive), удаление старых данных/логов/бэкапов, правильный класс (gp3 вместо io2), сжатие, дедупликация, TTL |
| Сеть | egress и межзональный/межрегиональный трафик, NAT Gateway (VPC endpoints), CDN, сжатие, размещение связанных сервисов в одной зоне (баланс с HA) |
| Архитектура | кэширование, асинхронность, серверлесс для нерегулярных нагрузок, выбор managed против self-hosted, ARM (Graviton) ~20–40% дешевле, эффективные языки/рантаймы, AOT |
| Наблюдаемость | объём логов/метрик/трейсов (sampling, retention, кардинальность) — часто крупная статья расходов |
| Лицензии | open-source альтернативы, учёт лицензий ОС/БД |
| Kubernetes | requests близко к факту, плотность упаковки, ноды нужного размера, spot-пулы, выключение кластеров dev |
| Мультиоблако/провайдер | сравнение цен, переговоры, коммитменты |
Операционные процессы
- владельцы расходов (команды) видят и отвечают за свои затраты; регулярные FinOps-ревью (раз в месяц/квартал), цели по снижению/эффективности;
- cost как часть ревью архитектуры и PR (Infracost: оценка стоимости изменений Terraform в PR);
- guardrails: квоты, бюджеты, запрет дорогих типов без согласования, лимиты автоскейлинга;
- автоматизация: очистка, расписания, политики lifecycle, теги-энфорсмент;
- метрики FinOps: стоимость на единицу (unit cost), доля тегированных затрат (> 95%), покрытие коммитментами (60–80%), утилизация коммитментов и инстансов, waste (% неиспользуемого), тренд расходов к росту бизнеса.
Баланс стоимости, надёжности и скорости
- избыточная надёжность (multi-region, N+2) стоит дорого; уровень определяется SLO и бизнес-ценностью;
- «дёшево» ≠ эффективно: стоимость инженерного времени, риски простоя; оптимизировать сначала крупные статьи (обычно 20% ресурсов = 80% счёта);
- не ломать наблюдаемость и безопасность ради экономии.
On-premise
Capacity planning более жёсткий: закупка, стойки, питание, охлаждение, сеть, сроки поставки; запас 20–30%, амортизация, TCO (железо + энергия + люди + площадка + лицензии) против облака; гибридные сценарии (базовая нагрузка on-prem, пики в облаке — cloud bursting).
Артефакты и практика
- документ ёмкости сервиса: текущая нагрузка/ресурсы, лимиты и узкие места, прогноз, план масштабирования, ответственные;
- дашборды ёмкости и стоимости, алерты по прогнозам;
- capacity review перед большими событиями (запуск, маркетинг, сезон), нагрузочные тесты «Black Friday»;
- runbook масштабирования (как быстро добавить мощность, лимиты провайдера);
- учёт технического долга (неэффективный код дорогой в эксплуатации).
Вопросы с ответами
Как спрогнозировать потребность в ресурсах?
Собрать историю метрик нагрузки и ресурсов, связать бизнес-метрики с потреблением, построить тренд с учётом сезонности и событий, добавить запас на пики и отказ зоны, проверить нагрузочными тестами и регулярно пересматривать.
Какие основные рычаги снижения облачных расходов?
Rightsizing, выключение неиспользуемого и dev по расписанию, коммитменты для базовой нагрузки и spot для stateless/batch, автоскейлинг, lifecycle хранения, оптимизация сетевого трафика и объёма логов, теги и распределение затрат по командам.
Что такое unit economics в FinOps?
Стоимость инфраструктуры в пересчёте на бизнес-единицу (пользователь, заказ, запрос), позволяющая оценивать эффективность, а не только абсолютный счёт.