CDN для ігор та асетів: зниження TTFB по світу
1) Що таке «швидко» для iGaming і де виграємо
Критичні UX-точки:- Лобі та медіа (іконки ігор, прев'ю, банери) - миттєвий рендер;
- Запуск слота/лайв-столу - мінімум редиректів і довантажень;
- Фіди/списки (каталоги ігор, правила, переклади) - дешеве кешоване JSON;
- Відео/мовлення (трейлери, HLS/DASH для стрімів);
- Статичні асети фронту (JS/CSS/шрифти).
- Global TTFB: ≤ 150-250 мс на статик, ≤ 300-400 мс на динаміку, що кешується на edge;
- Time-to-First-Spin (TTFS): ≤ 800 мс до першого запиту провайдера (після рендера лобі);
- p95 завантаження іконок: ≤ 200 мс.
2) Архітектура CDN-шару: «пиріг» продуктивності
1. Anycast PoP по світу: автопідбір найближчого майданчика, зниження RTT.
2. Tiered cache + Origin Shield: PoP → регіональний кеш → 1-2 shield-вузла перед origin, щоб гасити «промах-шторми».
3. Multi-origin: актив-актив або актив-стенбай (EU/US/APAC), health-перевірки і розумний роутинг.
4. Edge-функції: легка логіка до origin (A/B, гео, підписи, нормалізація URL/заголовків).
5. Private backbone CDN: мине «дике» інтернет-ядро в далеких регіонах.
3) Кеш-стратегії: що, де і на скільки
Принципи: immutable де можливо, короткі TTL для динаміки, SWR (stale-while-revalidate) під сплески, детерміновані ключі.
Матриця TTL (приклад):Важливо: для API-GET, які ви кешуєте, використовуйте Surrogate-Control (для CDN) і короткий'Cache-Control'( для браузера), щоб браузер не застоювався.
4) Заголовки і ключі кеша: мінімізуємо промахи
Кеш-ключ ='scheme + host + path + нормалізовані query + варіації'.
Нормалізуйте порядок query-параметрів, викиньте «сміття» ('utm _','fbclid'тощо).
Варіанти за заголовками: `Accept-Encoding` (Brotli/Zstd/Gzip), `Accept` (AVIF/WebP/JPEG), `DPR` (Client Hints), `Accept-Language`.
Референс заголовків (для immutable асетів):
Cache-Control: public, max-age=31536000, immutable
ETag: "sha256-<hash>"
Content-Encoding: br # та/або zstd/gzip, див. нижче
Vary: Accept-Encoding, Accept, DPR, Save-Data
Cache-Control: public, max-age=60, stale-while-revalidate=300
Surrogate-Control: max-age=300, stale-while-revalidate=6005) Стиснення та формати: менше байт - нижче TTFB
HTTP/3 + QUIC зменшує handshake-латентність, стійкий до втрати пакетів.
Brotli для текстових асетів (JS/CSS/JSON), рівні 5-7 (баланс CPU/вигоди).
Zstd (якщо підтримується CDN) для JSON/NDJSON - відмінна компресія при низькій затримці.
WebP/AVIF для зображень (автопідбір по'Accept').
Range-запити для відео/великих файлів, щоб не тягнути все.
6) Доставка через edge: префетч і «розумне» лобі
Префетч з лобі: як тільки картка гри у видимій зоні - вантажте іконку, правила, малий «манівест» провайдера.
Early Hints (103) і'preconnect'до CDN-хостів.
Edge-функція-прогрів: по події «поставили гру в топ» - прогрійте топ-іконки і конфіги в найближчих PoP ринків промо.
Adaptive payload: шліть полегшені списки (10-20 ігор) на мобілі в 3G/Save-Data.
7) Origin Shield і захист від «штормів промахів»
Увімкніть deduplicated fetch: одна поїздка до origin при сотнях паралельних промахів (coalescing).
Jitter TTL (± 20%) для «одночасного» закінчення великої множини ключів.
Canary-релізи: викочуйте нові каталоги/правила на 5-10% edge-трафіку до глобального інваліда.
Negative-cache (дуже короткий, 1-5 с) на'404/204'для турнірів перед стартом, щоб не «довбати» origin.
8) Гео-обмеження, ліцензії та безпека
Geo-fencing на edge для країн поза ліцензією - швидка і нейтральна відповідь (403).
Підписані URL/кокіки для приватного контенту (VIP-матеріали, бонус-ресурси).
Захист від hotlink і реферерів, WAF-правила на PoP для API-GET, які кешуєте (валідна схема JSON, ліміти по IP/ASN).
TLS 1. 3, HSTS, OCSP stapling на фронт-доменах CDN.
9) Версіонування та інвалідація
Content-hash в іменах файлів: `app. 
JSON/каталоги/банери: подієва інвалідація (webhook з CMS/адмінки) + авто-прогрів top-ключів.
Уникайте глобального purge; робіть точковий purge за префіксом/тегами.
10) Відео та стріми: HLS/DASH на CDN
Короткі сегменти (2-4 с) +'#EXT -X-PREFETCH '/Low-Latency HLS за підтримки.
Tiered cache між PoP для сегментів;'Cache-Control: public, max-age=3600`.
Пер-регіональні плейлисти (варіанти бітрейту) і локальні субтитри; Range-friendly.
11) Специфіка провайдерів ігор
Метадані провайдера (списки, ліміти, локалі) - кешований JSON з'SWR'.
Іконки та промо-медіа провайдера - re-host на своєму CDN-домені (щоб не страждати від їх повільного origin).
Пул доменів CDN (але без domain-sharding - HTTP/2/3 це не потрібно) - розділяйте великі відео/статик/API для ізоляції політики.
12) Приклад правил (псевдо, edge-функція)
js export default async (req) => {
//Нормалізація ключа req. url = normalizeQuery(req. url, ['lang','dpr','v']) ;//викид сміття
// Geofencing if (!isLicensed(req.geo. country)) return geoBlock();
//Signed URLs для приватних префіксів if (req. path. startsWith('/vip/')) verifySignatureOr403(req);
//Кеш політики if (req. path. match(/\.(js    css    woff2)$/) && hasHash(req. path)) {
setHeader('Cache-Control','public, max-age=31536000, immutable');
} else if (req. path. endsWith('/games. json')) {
setHeader('Cache-Control','public, max-age=60, stale-while-revalidate=300');
setHeader('Surrogate-Control','max-age=300, stale-while-revalidate=600');
}
//Компресія negotiateEncoding (['br','zstd','gzip']);
return fetchFromCacheThenOrigin(req);
}13) Спостережуваність CDN і SLO
RUM: збирайте'TTFB','LCP','first paint'по регіонах/мережах (мобайл vs Wi-Fi).
Edge-метрики: hit/miss, shield hit-ratio, промахи за префіксами, об'єм вихідного трафіку, коди'4xx/5xx'.
Алерти: падіння hit-ratio, зростання TTFB в регіоні, «шторм промахів», сплеск'429 '/бот-ASN.
Трейси: позначки'edge → shield → origin', щоб бачити, де «горить».
14) Вартість: Як не переплачувати
Кешуйте важке і гаряче (іконки/відео/каталоги) - знижує egress з origin.
Скоротіть кардинальність ключів (прибрати сміттєві query/UA-варіації).
Tiered cache і регіональні shield-вузли економлять бекенд-запити.
Стиснення (Brotli/Zstd) зменшує трафік; AVIF/WebP - маст-хев для картинок.
15) Чек-лист продакшн-готовності
- Anycast CDN з покриттям цільових ринків (EU, LatAm, MENA, APAC); включено HTTP/3.
- Immutable асети з контент-хешами;'Cache-Control: max-age=1y, immutable`.
- Каталоги/JSON - SWR + Surrogate-Control, TTL 30-300 с, точкова інвалідація з CMS.
- Tiered cache + Origin Shield, coalescing, TTL-jitter.
- Формати: AVIF/WebP, Brotli/Zstd, Range для відео.
- Edge-функції: нормалізація query, гео-фільтри, підписані URL, A/B.
- Гео-обмеження і WAF на PoP; HTTPS тільки (HSTS), TLS 1. 3.
- Спостережуваність: RUM TTFB/LCP, hit-ratio, регіональні алерти.
- Процедури прогріву перед промо/стрімом, канарські викладки.
- Документація ключів кешу, політика інвалідації і runbook «шторм промахів».
Резюме
Щоб реально знизити TTFB по світу, використовуйте Anycast + tiered cache + origin shield, робіть immutable для всього версіонованого, застосовуйте SWR для динамічних списків, ріжте байти (Brotli/Zstd, AVIR F/WebP), а на edge - нормалізуйте ключі, додайте гео-фільтри та підписи. Прогрівайте топ-ігри перед промо, міряйте TTFB/LCP через RUM і тримайте hit-ratio під контролем - так лобі відкривається моментально, ігри стартують без пауз, а origin залишається холодним і дешевим.
