CDN dla gier i aktywów: TTFB odmawia na całym świecie
1) Co jest „szybkie” dla iGaming i gdzie wygrywamy
Krytyczne punkty UX:- Lobby i media (ikony gier, podglądy, banery) - natychmiastowy render;
- Uruchomienie gniazda/stołu na żywo - minimalne przekierowania i przeciążenia;
- Kanały/listy (katalogi gier, zasady, tłumaczenia) - tanie buforowane JSON;
- wideo/transmisja (przyczepy, HLS/DASH dla strumieni);
- Statyczne aktywa przednie (JS/CSS/czcionki).
- Globalny TTFB: ≤ 150-250 ms na statyczną, ≤ 300-400 ms na głośnik buforowany na krawędzi;
- Czas-to-First-Spin (TTFS): ≤ 800 ms na pierwszy wniosek dostawcy (po oddaniu lobby);
- 95 picon download: ≤ 200ms.
2) Architektura warstwy CDN: ciasto wydajnościowe
1. Anycast PoP na całym świecie: automatyczny wybór najbliższej strony, spadek RTT.
2. Wielopoziomowy cache + Origin Shield: PoP → regionalna pamięć podręczna → 1-2 węzły tarczy przed pochodzeniem, aby ugasić burze.
3. Wielokrotne pochodzenie: aktywa lub aktywa w gotowości (UE/USA/APAC), kontrole zdrowotne i inteligentne trasy.
4. Funkcje krawędzi: łatwa logika pochodzenia (A/B, geo, podpisy, normalizacja URL/nagłówka).
5. Prywatny kręgosłup CDN: przekazuje „dziki” rdzeń Internetu w odległych regionach.
3) Strategie pieniężne: co, gdzie i ile
Zasady: w miarę możliwości niezmienne, krótki TTL dla dynamiki, SWR (stale-while-revalidate) dla wybuchów, klawiszy deterministycznych.
Macierz TTL (przykład):Ważne: W przypadku pamięci podręcznej API użyj Surogate-Control (dla CDN) i krótkiego 'Cache-Control' (dla przeglądarki), aby zapobiec stagnacji przeglądarki.
4) Głowice i klucze pamięci podręcznej: zminimalizować braki
Klucz pamięci podręcznej = 'schemat + host + ścieżka + znormalizowane zapytanie + wariacje'.
Normalizować kolejność parametrów zapytania, wyrzucić „śmieci” ('utm _',' fbclid', itp.).
Opcje nagłówka: 'Accept-Encoding' (Brotli/Zstd/Gzip), 'Accept' (AVIF/WebP/JPEG), 'DPR' (Client Hints), 'Accept-Langage'.
Pozycja referencyjna (dla aktywów niezmiennych):
Cache-Control: public, max-age = 31536000, immutable
ETag: „sha256- <hash>”
Kodowanie treści: br # i/lub zstd/gzip, patrz poniżej
Różnica: Akceptuj kodowanie, Akceptuj, DPR, Zapisz dane
Cache-Control: public, max-age = 60, stale-while-revalidate = 300
Surogate-Control: max-age = 300, stale-while-revalidate = 6005) Kompresja i formaty: mniej bajtów - poniżej TTFB
HTTP/3 + QUIC zmniejsza opóźnienie uścisku dłoni, jest odporny na utratę pakietów.
Brotli dla aktywów tekstowych (JS/CSS/JSON), poziomy 5-7 (saldo/świadczenia CPU).
Zstd (jeśli obsługiwany przez CDN) dla JSON/NDJSON jest doskonałą kompresją przy niskim opóźnieniu.
WebP/AVIF dla obrazów (auto-fit przez 'Accept').
Zakres żądań dla wideo/dużych plików, aby nie ciągnąć wszystko.
6) Dostawa przez krawędź: Prefetch i inteligentne lobby
Prefetch z holu: jak tylko karta gry jest w widocznym obszarze, załaduj ikonę, zasady, mały „manivest” dostawcy.
Wczesne wskazówki (103) i „preconnect” do hostów CDN.
Krawędź-funkcja-rozgrzewka-up: na wydarzeniu „umieścić grę na szczycie” - rozgrzać górne ikony i konfiguracje w najbliższym promo rynku PoP.
Ładunek adaptacyjny: wysyłać lekkie listy (10-20 gier) na telefon komórkowy w 3G/Save-Data.
7) Tarcza pochodzenia i obrona przed „miss storms”
Włącz zdublowany fetch: jedna wycieczka do pochodzenia z setkami równoległych braków (koalescencji).
Jitter TTL (± 20%) dla „jednoczesnego” wygaśnięcia dużej liczby klawiszy.
Wydania kanaryjskie: Rozwiń nowe katalogi/zasady dotyczące 5-10% ruch krawędzi do globalnej osoby niepełnosprawnej.
Negatywne-cache (bardzo krótkie, 1-5 s) na '404/204' dla turniejów przed rozpoczęciem, aby nie „młotek” pochodzenia.
8) Ograniczenia geograficzne, licencje i bezpieczeństwo
Geogrodzenie na krawędzi dla krajów niebędących licencjobiorcami jest szybką i neutralną odpowiedzią (403).
Podpisane adresy URL/pliki cookie dla treści prywatnych (materiały VIP, zasoby bonusowe).
Ochrona przed hotlinkiem i poleceniami, zasady WAF dotyczące PoP dla API-GET, które buforujesz (ważny schemat JSON, limity IP/ASN).
TLS 1. 3, HSTS, zszywanie OCSP na domenach przednich CDN.
9) Wersioning i niepełnosprawność
Zawartość-hash w nazwach plików: 'app. 
JSON/katalogi/banery: niepełnosprawność zdarzeń (webhook z panelu CMS/admin) + automatyczne ocieplenie górnych klawiszy.
Unikaj globalnej czystki; zrób punkt oczyszczenia przez prefiks/tagi.
10) Filmy i strumienie: HLS/DASH na CDN
Krótkie segmenty (2-4) + '# EXT-X-PREFETCH '/Low-Latency HLS obsługiwane.
Pamięć podręczna wielopoziomowa między PoP dla segmentów; „Cache-Control: public, max-age = 3600”.
Listy odtwarzania dla poszczególnych regionów (opcje bitrate) i napisy lokalne; Przyjazny dla zasięgu.
11) Specyfika dostawców gier
Metadane dostawcy (listy, limity, lokalizacje) - buforowane JSON z 'SWR'.
Ikony i dostawca mediów promo - ponownie hostować na ich domenie CDN (aby nie cierpieć z powodu ich powolnego pochodzenia).
Pula domen CDN (ale bez shading domeny - HTTP/2/3 nie jest to konieczne) - oddzielne duże wideo/statyczne/API, aby odizolować politykę.
12) Przykład reguł (pseudo, funkcja krawędzi)
js eksport domyślny async (req) => {
Normalizuje klucz req. url = normalizeQuery (req. url, [„lang”, „dpr”, „v”]) ;//wysypisko śmieci
//Geofencing jeśli (! isLicensed (req.geo. ))) powrót geoBlock ();
//Podpisane adresy URL dla prywatnych prefiksów, jeśli (req. ścieżka. gwiazda Z ('/vip/')) verifySignatureOr403 (req);
//Policy cache if (req. ścieżka. match (/\. (js    css    woff2) $/) & Hash (req. ścieżka)) {
SetHeader („Cache-Control”, „public, max-age = 31536000, immutable”);
} inaczej, jeśli (req. ścieżka. endsWith ('/gry. json)) {
SetHeader („Cache-Control”, „public, max-age = 60, stale-while-revalidate = 300”);
SetHeader („Surrogate-Control”, „max-age = 300, stale-while-revalidate = 600”);
}
//Kompresja negocjacyjnaEnkodowanie (['br', 'zstd',' gzip ']);
powrót fetch( req);
}13) Obserwowalność CDN i SLO
RUM: Zbierać „TTFB”, „LCP”, „pierwsza farba” według regionu/sieci (mobile vs Wi-Fi).
Wskaźniki krawędzi: hit/miss, wskaźnik trafienia tarczy, braki przedrostka, wolumen ruchu wychodzącego, kody '4xx/5xx'.
Ostrzeżenia: spadek współczynnika trafienia, regionalny wzrost TTFB, "miss storm', '429' spike/ASN bot.
Ślady: krawędź znaków → tarcza → pochodzenie ', aby sprawdzić, gdzie „oparzenia”.
14) Koszt: Jak nie overpay
Cache ciężkie i gorące (ikony/wideo/katalogi) - zmniejsza wyjście z pochodzenia.
Zmniejsz kardynalność kluczy (usuń zapytania o śmieci/wariacje UA).
Poziomy pamięci podręcznej i regionalnych węzłów tarczy zapisać żądania backendu.
Kompresja (Brotli/Zstd) zmniejsza ruch; AVIF/WebP - maszt-ul do zdjęć.
15) Lista kontrolna gotowości do produkcji
- Anycast CDN z uwzględnieniem rynków docelowych (UE, Latam, MENA, APAC); w tym HTTP/3.
- Immutable assets with content hashes; „Cache-Control: max-age = 1y, immutable”.
- Katalogi/JSON - SWR + Surrogate-Control, TTL 30-300 s, punkt niepełnosprawności z CMS.
- Wielopoziomowa pamięć podręczna + tarcza pochodzenia, koalescencja, TTL-jitter.
- Formaty: AVIF/WebP, Brotli/Zstd, Zakres wideo.
- Funkcje krawędzi: normalizacja zapytań, filtry geo, podpisany adres URL, A/B.
- Geo-constraint i WAF na PoP; Tylko HTTPS (HSTS), TLS 1. 3.
- Obserwowalność: RUM TTFB/LCP, wskaźnik trafienia, wpisy regionalne.
- Procedury rozgrzewania przed promocją/strumieniem, obliczenia kanaryjskie.
- Kluczowa dokumentacja pamięci podręcznej, polityka niepełnosprawności i runbook "miss storm'.
Wznów streszczenie
Aby naprawdę zmniejszyć TTFB na całym świecie, użyj pamięci podręcznej Anycast + wielopoziomowej + tarczy pochodzenia, uczyń immutable dla wszystkich wersji, użyj SWR do list dynamicznych, cięcia bajtów (Brotli/Zstd, AVIF/WebP), a na krawędzi - znormalizować klucze, dodać filtry geo i podpisy. Rozgrzej najlepsze gry przed promo, zmierz TTFB/LCP przez RUM i utrzymać wskaźnik trafienia pod kontrolą - w ten sposób lobby otwiera się natychmiast, gry zaczynają się bez przerwy, a pochodzenie pozostaje zimne i tanie.
