GH GambleHub

Optymalizacja CDN i redukcji opóźnień

1) Cele i mapa opóźnień

Opóźnienie = DNS + TCP/TLS + TTFB (serwer/pochodzenie/pamięć podręczna) + dostarczanie treści (RTT × woluminy) + render klienta.
Optymalizacja = zmniejszenie liczby RTT, zmniejszenie bajtów i przesunięcie obliczeń/pamięci podręcznej bliżej użytkownika.

2) Architektura CDN

Anycast POP jest bliskim końcem węzła routingu BGP.
Warstwowe buforowanie/tarcza pochodzenia - warstwa pośrednia „parasol”, która zmniejsza burzę na pochodzenie.
Trasa geo-/regionalna - powiązanie najemcy/jurysdykcji (suwerenność danych, licencje).
Awaria - kopia zapasowa pochodzenia/regionu, próbki zdrowia i szybki przełącznik.

3) Pamięć podręczna: klucze, nagłówki, strategie

3. 1 klucze pamięci podręcznej

Domyślnie jest 'schemat + host + ścieżka +? zapytanie '.
Dodaj tylko parametry, które chcesz ('? v = ','? lang = ','? najemca = '). Reszta jest ignorowana.
'Vary' - minimalne: 'Accept-Encoding', 'Accept-Language' (w razie potrzeby), 'Authorization' zwykle łamie pamięć podręczną.

3. 2 Polityka

Statyki publiczne: „Cache-Control: public, max-age = 31536000, immutable” + rev (hash w nazwie).
Pół-dynamika (katalogi, zasady, FAQ): 's-maxage = 300, stale-while-revalidate = 600, stale-if-error = 86400'.
API-GET: użyj ETag/Last-Modified, 'SWR/SIE', włącz koalescencję (jedno żądanie dla gorącego klucza).
Prywatne: odpowiedzi osobiste - na obwodzie za pomocą krawędzi obliczeniowej (ESI/kv) lub pamięci podręcznej na lokatora.

3. 3 Anty-burza

Żądanie koalescingu - załamać jednoczesne błędne wnioski.
Serv- stale - podaj przestarzały obiekt, gdy pochodzenie nie powiodło się.
Przedłużenie ważności tła - aktualizacja w tle.

4) HTTP/2-3, TCP/TLS i wczesny powrót

HTTP/2: multipleks, kompresja nagłówka; limit 'max współistniejących strumieni', duże nagłówki.
HTTP/3 (QUIC): znaczny spadek TTFB mobilnego/wysokiej straty; mieć oko na Initial-rapids i Retry.
TLS 1. 3: 1-RTT uścisk dłoni; zszywanie OCSP; HSTS.
0-RTT: tylko dla idempotent 'GET' i jeśli rozważa się powtórzenie ryzyka.
103 Wczesne wskazówki: Wczesne 'Link: rel = preload' dla zasobów krytycznych.
Preconnect/DNS-prefetch: '<link rel = "preconnect" href = "https ://cdn. przykład">'.

5) Obliczanie krawędzi i „drobna personalizacja”

Na krawędzi: spis tytułów, utrwalenie geo/lokatora, oznaczenie A/B, łatwa personalizacja bez żądania pochodzenia.
Zasada: nie przechowywać PII w węzłach POP; agregaty pamięci podręcznej/dane publiczne.

6) Optymalizacja nośników i formatów

Obrazy: automatyczna konwersja do WebP/AVIF, rozmiar na krawędzi, 'srcset/sizes',' lazyload '.
Kompresja: Brotli dla tekstów (HTML/CSS/JS/JSON), gzip fallback.
Wideo: HLS/DASH, buforowanie segmentu CDN, 'preload = metadane', plakat.
Czcionki: subet + 'font-display: swap'; gospodarz z z długim pamięcią podręczną.
Krytyczny CSS: inline pierwszy ekran; Reszta to async.

7) wzory i buforowanie API

Idempotent GET - buforujemy za pomocą kluczy żądania (w tym wersji danych).
ETag: Mocne hash ładunku + 'If-None-Match'.
Sterowanie zastępcze (specyficzne dla CDN) w celu odróżnienia od klienta 'Cache-Control'.
Podpisane adresy URL - dla prywatnych środków statycznych/mediów.
GraphQL: normalizacja pamięci podręcznej klucza przez działanie/zmienne; używać pamięci podręcznej/rozdzielczej.
WebSockets: dla czasu rzeczywistego - skrócenie wiadomości, kompresja (permessage-deflate), położenie WS-shards bliżej użytkownika.

8) Przykłady konfiguracji

8. 1 NGINX (pochodzenie: przechowujemy API-GET)

nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}

8. 2 Szybko VCL (SWR, koalescencja, ignorowanie plików cookie)

vcl sub vcl_recv {
set req. hash_ignore_busy = true;   # coalescing if (req. url. qs ~ "^(?!.(lang    v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}

sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}

8. 3 Cloudflare (Przepisy transformacji, Zasady Cache, Early Hints - мсевда)

json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}

9) Sieci komórkowe i „niestabilny” Internet

Użyj HTTP/3 agresywnie; zmniejszyć rozmiar ścieżki krytycznej (HTML + krytyczny CSS <14 KB).
Priorytet H2/H3: Priorytet (HTML → CSS → JS → media później).
Polityka retray z jitter, idempotencja dla API.
Budżet wielkości i pakiet: podział kodów, odroczony JS, usunięcie niewykorzystanych CSS/JS.

10) Obserwowalność i SLO

RUM: TTFB, LCP, INP, CLS według regionu/ASN/najemców; p95/p99 dystrybucje.
Syntetyka: droga kontrolna "/zdrowie/cdn' przez POP-s.
Mierniki pamięci podręcznej: współczynnik trafienia ogółem i na klucz; wskaźnik pochodzenia; oszczędności koalescencji.
Alerty: spadek współczynnika trafienia, wzrost pochodzenia-wyjścia, degradacja H3-fraction, 5xx na tarczę.

11) Szczegóły dotyczące iGaming/Finance

Katalogi/kursy gier: short 's-maxage' + SWR; region-aware кла („najemca 'region' lang”).
Szczyty wydarzeń (mecze, rysunki): ocieplenie pamięci podręcznej (przed-ciepłe), „zamrażanie” ciężkich personalizacji, źródła lustrzane.
Płatność/szafka: nie przechowywać prywatnie, ale przyspieszyć przez H3 + krawędzi-TLS i zamknąć region.
Jurysdykcje: podzielone domeny/ścieżki na poszczególne regiony; "Różnica: X-Region 'control.

12) Antypattery

„Różni się:” na wszystko; klucz pamięci podręcznej zależy od zbędnych plików cookie/nagłówków.
Brak SWR/SIE → czarne ekrany dla awarii krótkiego pochodzenia.
Wyczyść pamięć podręczną „wszędzie” zamiast wskazywać niepełnosprawność za pomocą znaczników/kluczy.
Zasoby bez zmiany nazwy i z 'max-age = 0'.
Globalna odmowa pamięci podręcznej dla 'Autoryzacji' nawet tam, gdzie podaje się opinię publiczną.
Brak koalescencji → burza na pochodzenie.
Przedwczesna „ciężka” personalizacja na POP.

13) Lista kontrolna gotowości Prod

  • Anycast POP + wielopoziomowy/tarcza; kontrole zdrowotne i awaria pochodzenia.
  • Klucze pamięci podręcznej są minimalne; ignorowanie niepotrzebnych zapytań/plików cookie; „Kontrola zastępcza”.
  • SWR/SIE włączone, koalescencji aktywne; serving-stale na błędach.
  • HTTP/3 włączone; TLS 1. 3; 103 Wczesne wskazówki są skonfigurowane dla zasobów krytycznych.
  • Obrazy: AVIF/WebP, rozmiar na krawędzi; Brotli do tekstów.
  • API-GET ETag/Last-Modified; idempotencja/rekolekcje; nie buforować profili prywatnych.
  • Preconnect do domen statycznych; krytyczny CSS inline.
  • Wskaźniki: wskaźnik trafienia, pochodzenie-wyjście, TTFB/LCP p95, H3-share, według regionu/najemcy.
  • Plan nagrzewania pamięci podręcznej przed wydarzeniami; niepełnosprawność punktowa (tagi).
  • Zmienne/klucze/dokumentacja TTL; odtwarzanie incydentów (spadek współczynnika trafienia).

14) TL; DR

Utrzymuj wędrówkę do źródła do minimum: wielopoziomowy/tarcza + odpowiednie cache-keys + SWR/SIE + koalescencji. Włącz HTTP/3/TLS 1. 3, użyj 103 wczesnych wskazówek i preconnect. Kompresja i konwersja nośników na krawędzi, inline krytyczny CSS. Dla API - ETag, schludne 'Vary', idempotencja i rozsądne buforowanie 'GET'. Zmierz współczynnik trafienia, TTFB/LCP p95, wyjście pochodzenia i rozgrzać pamięć podręczną z wyprzedzeniem w szczytach.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.