Оптимізація витрат на інфраструктуру
Коротке резюме
Фінансова ефективність інфраструктури впирається в три речі:1. Прозора вимірюваність (теги, showback/chargeback, $/одиницю цінності).
2. Інженерна дисципліна (rightsizing, авто-скейл, правильні класи сховищ/кешів/мереж).
3. Архітектурні рішення (куди «витікають» байти і мілісекунди).
Мета - знизити TCO при збереженні SLO і швидкості розробки.
Бізнес-метрики та unit-economics
$/1000 RPS - вартість обробки 1000 запитів на ключових маршрутах.
$/мс p95 - вартість зниження хвоста затримок на 1 мс (важливо для конверсії).
$/гравець/місяць або $/депозит - для iGaming/фінтех.
TCO = compute + storage + network egress + managed-сервіси + ліцензії + підтримка.
Капіталізація технічного боргу: фіксуйте, скільки коштує «непочинена» латентність/витоку логів.
- Якщо API коштує $120/год і віддає 60k RPS при цільовому p95, то $/1000 RPS ≈ $2/год. Будь-яка оптимізація повинна порівнюватися з цією «ціною одиниці».
Інвентаризація та тегування
Теги обов'язкові: `env`, `owner`, `product`, `service`, `region`, `cost-center`, `tier`.
Showback/Chargeback: щотижневі звіти по командах/сервісах.
Контроль «нічийних» ресурсів: без тегів - не розгортаємо, не продовжуємо.
sql
SELECT env, product, service,
SUM(cost_usd) AS cost_month,
SUM(rps) AS rps_month,
SUM(cost_usd)/NULLIF(SUM(rps)/1000,0) AS usd_per_1k_rps
FROM finops_daily
WHERE usage_date BETWEEN:from AND:to
GROUP BY 1,2,3;
Rightsizing і класи інстансів
CPU/Memory профілі: знімайте профілі під навантаженням; знижуйте запити/ліміти до «робочої точки» CPU 50-70%.
Розмір інстансів: часто вигідніше N маленьких замість M великих (краще bin-packing + CA).
ARM-інстанси: дешевше при порівнянній продуктивності, якщо стек сумісний.
Гарячі/холодні пули: тримайте невеликий warm-запас замість постійного «жиру».
Знижки та моделі споживання
Reserved/Savings Plans/Committed Use: бронюйте стійку базу (40-70% економії).
Spot/Preemptible: для некритичних/асинхронних задач, CI, аналітики, кеш-воркерів.
Mix-стратегія: база - reserved, піки - on-demand, фон - spot.
Авто-скейлінг та еластичність
HPA/KEDA за SLO-сигналами (latency, queue lag, RPS), а не тільки за CPU.
Cluster Autoscaler з warm pools і image pre-pull для швидких стартів.
Scale-down з гістерезисом, щоб не «пиляти» кластери (анти-флаппінг).
Мережа і egress - тихий «пожирач» бюджету
CDN/tiered-cache/origin-shield знижують egress з origin.
Стиснення (Brotli/gzip), webp/avif, диф-API (передавати тільки змінені поля).
Групуйте виклики до зовнішніх API, використовуйте keepalive/retry-budget.
Менше чатів всередині DC: event-driven, батчинг, агрегація подій.
Сховища та дані
Класи зберігання: гаряче (NVMe), тепле (gp2/gp3), холодне (S3/Glacier/архів).
Lifecycle-політики: автоматичний переклад «старих» об'єктів на дешеві класи.
Стиснення/партіонування в DWH, TTL на тимчасові таблиці/снапшоти.
Відмова від надмірної реплікації: розумний RF, економні snapshot-політики.
Кешування: Redis/Memcached для hot-set замість «дорогих» читань з БД.
Логи, метрики, трейси - платити з розумом
Семплювання логів (rate-limit за рівнем/шаблоном), «структурні» логи замість балаканини.
Tail-based sampling для трас (зберігаємо «хвости» p99 і помилки, решта - агресивно ріжемо).
Downsampling метрик: агрегація в push-гейтах, зберігання high-res тільки 7-14 днів.
Фільтрація PII - знижує і ризики, і обсяг.
Архітектура і «вартість мілісекунди»
HTTP/2/3 + resumption: менше handshake → менше CPU/egress/латентність.
Ключ кешу і TTL: високий hit-ratio - прямі гроші (менше origin і DB).
gRPC/протобаф для сервіс-сервіс: менше байтів.
Batch/stream для фонових завдань; ідемпотентність → менше ретраїв.
Вибір БД: не зберігайте «все в одній» - дешеві KV/кеші для частих читань, аналітика - в колонночном DWH.
Схеми даних: короткі поля/стислі типи, контроль кардиналітету індексів.
DR, резерви та мульти-регіон
Мета по бізнесу: RTO/RPO → вартість DR. не переплачуйте за актив-актив, якщо достатньо актив-пасив.
Зберігайте холодні резервні копії в дешевому класі, репліка - диференціальна.
Єдиний пакет РоР/регіонів: кожна зона тягне ≥60% піку → витримуємо відмову сусіда без «золотої» надмірності.
Оточення та CI/CD
Автосплячка стейджингів/прев'ю-оточень, авто-TTL.
Runner-и CI на spot, кеш артефактів, обмеження паралелізму.
Тест-дані компактні, генерація on-the-fly, а не зберігання гігабайт.
Управління постачальниками та ліцензіями
Переглядайте обсяги та прайс-типи раз на квартал.
Конкурентний бекап-провайдер - аргумент в торзі.
Ліцензії (АПМ/безпека): розраховуйте $ за корисний сигнал, а не за «всі логи світу».
Процеси та управління
FinOps-церемонії: щотижневий звіт по командах, щомісячний Cost Review (топ-10 «витоків», action items).
Guardrails: квоти на проект/неймспейс, бюджет-альберти, заборона розгортати ресурси без тегів.
Blameless пост-морем по «цінових інцидентів» (витік логів, runaway autoscale).
IaC: всі ліміти, класи, TTL - в репозиторії, PR-рев'ю.
Чек-лист економії
- Теги/шоубек/чарджбек включені, «нічийних» ресурсів немає.
- Rightsizing за профілями, ARM/інші типи оцінені.
- Коміт-знижки закривають базу, spot - фон/аналітика/CI.
- HPA/KEDA по SLO-метрикам, CA з warm-пулами.
- CDN/tiered-cache, стиснення, ключ кеша без «шуму».
- Сховища: класи, lifecycle, TTL, кеші для hot-set.
- Логи/трейси: семплювання, tail-based, PII-фільтри.
- DR по RTO/RPO, холодні бекапи в дешевому класі.
- Оточення з авто-TTL, CI на spot.
- FinOps-ритми і guardrails в IaC.
Типові помилки
«Оптимізація без метрик»: немає $/1000 RPS → не можна порівняти варіанти.
Відключені/невикористані ресурси висять місяцями.
Зберігання «всього» в гарячому класі, відсутність lifecycle.
Логи як «чорна діра»: 100% ingest, 0% вживання.
Авто-скейл по CPU без урахування latency/черг → переплата і SLO-регрес.
Занадто агресивний DR без бізнес-обґрунтування.
Мікросервіси «для галочки» - зростання міжсервісного трафіку і накладних.
Міні-плейбуки
1) Швидкий аудит рахунку (48 годин)
1. Зріз по топ-10 сервісах/регіону. 2) По кожному - $/1000 RPS, hit-ratio CDN, egress.
2. Викотити TTL/кеш-ключі, вимкнути «галасливі» логи. 4) Включити lifecycle на S3/об'єкти.
2) Зниження egress на 25%
1. Tiered-cache+shield, `stale-while-revalidate`. 2) Стиснути зображення в webp/avif.
2. Диф-API і gzip/brotli на текст. 4) Перевірити повторні запити/ретраї.
3) Зріз витрат на БД
1. Топ-запити (p95/IO) → індекси/батчування. 2) Hot-set в Redis.
2. Архівація старих даних (TTL), read-replicas на дешевому сторі.
4) Припинення «пилки» скейла
1. Збільшити stabilization/cooldown. 2) MinReplicas> 0 на піку.
2. Передпрогрів конектів/TLS. 4) Зрізати зайві ретраї.
Приклад «економного» Nginx (стиснення, кеш, SWR)
nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=EDGE:512m max_size=50g inactive=7d;
server {
listen 443 ssl http2 reuseport;
Compression brotli on; brotli_comp_level 5; gzip on;
Static: year, immutable location/assets/{
add_header Cache-Control "public, max-age=31536000, immutable" always;
try_files $uri =404;
}
Semi-dynamics: s-maxage + SWR location/catalog/{
proxy_cache EDGE;
add_header Cache-Control "public, s-maxage=600, max-age=120, stale-while-revalidate=900, stale-if-error=86400" always;
proxy_ignore_headers Set-Cookie;
proxy_pass https://origin_catalog;
}
}
Специфіка для iGaming/фінтех
Піки (матчі/турніри): заздалегідь підняти'minReplicas'і прогріти CDN/TLS, але тримати headroom точково - тільки на гарячих шляхах (каталоги, лобі, матчі), решта - в деград-режим.
Платежі/PSP: кеш довідників (BIN, ліміти), ідемпотентність знижує вартість дублів, окремий egress-пул для білих списків провайдерів.
Антифрод/боти: «сірі» маршрути і дешеві челенджі на краю замість дорогої глибокої перевірки по кожному запиту.
Лайв-контент/провайдери: кеш на краю + обмеження частоти оновлень; CDN-контракти переглядати до великих івентів.
Підсумок
Оптимізація витрат - це не разова чистка, а постійний FinOps-процес: вимірюйте цінність ($/одиницю), автоматизуйте економні рішення (кеш/TTL/семплювання), використовуйте знижки і правильні класи ресурсів, тримайте еластичність під SLO і не ускладнюйте архітектуру там, де вона не окупається. Так ви знизите TCO, зберігши швидкість продукту і стійкість платформи.