GH GambleHub

Cache CDN e ottimizzazione TTL

Breve riepilogo

La cache CDN è un acceleratore + scudo tra l'utente e l'origin. Funziona bene quando:

1. La chiave cache (cache key) è stabile e non contiene rumore.

2. Criteri di carico TTL: «s-maxage »/« max-age» + «stale-while-revalidate/if-error».

3. Disabilità guidata da tag/prefissi + purge morbide.

4. Incluse tiered-cache/origin-shield e negative-cache.

5. C'è osservabilità: hit-ratio per strati, p95 TTFB, quota di restituzione 304.

Header di base e cosa significano

`Cache-Control`:
  • «max-age = » - TTL per il browser.
  • «s-maxage = » - TTL per CDN/proxy (sovrappone «max-age»).
  • «stale-while-revalidate = » - Restituiamo a quelli obsoleti, contemporaneamente aggiorniamo.
  • «stale-if-error = » - Restituisci l'ultimo errore origin.
  • «immutabile» - La risorsa non cambia (adatta per gli assetti versionati).
  • «ETAG »/« Last-Modified» - condizioni per 304, risparmiando byte/CPU origin.
  • «Vary» è un elenco di titoli che influenzano la chiave della cache (usare discretamente!).
  • «Surrogate-Control» - Cache-Control avanzato per CDN (se supportato).
  • «Expires» è obsoleto, ma è ancora considerato dai clienti.
Esempio (statica, anno):

Cache-Control: public, max-age=31536000, immutable
Esempio (mezza dinamica con obsolescenza sicura):

Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."

Chiave cache: progettazione e normalizzazione

L'obiettivo è che le stesse richieste finiscano nello stesso oggetto.

Regolazione URL: maiuscole, doppie slash, trailing slash, ordine dei parametri query.
Ignora «rumore»: «utm _», «fbclid», «gclid», tag rife casuali.
Varietà limitata: solo titoli reali («Accept-Encoding», talvolta «Accept», «Accept-Language» per i locali).
Device-class: se necessario, utilizzare 2-3 classi (mobile/desktop/tablet), non i rami user-agente infiniti.
Contesto Auth: per impostazione predefinita, non memorizzare il contesto privato; Utilizzare signed-URWS/cookies-bypass o separare percorsi pubblici/privati.

Stile fastly (pseudo):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

TTL per tipo di contenuto

TipoTTL CDN (`s-maxage`)Browser («max-age»)Opzionale
Assetti versiati ('/app. a1b2. js`)1 anno1 anno`immutable`; disabilità non necessaria
Directory/landing1-10 min30-120 c`stale-while-revalidate=10–30 мин`
Immagini (resine)10-60 min5-15 minVary по `Accept` (webp/avif)
API GET (cache)10-120 c0-30 sSolo idipotenti; 'stale-if-error' 5-60 min
Errori 500/timeout00Negative-cache 30-120 s (livello CDN), non cache 401/403/POST

Criteri di invalidità

By URL/Preferix: «Pulire tutto sotto »/static/2025-11-05/«».
By Tag/Key: «Togliere tutto» catalog «e» product: 123 «».
Soft purge: contrassegnare come obsoleto, non cancellare l'oggetto - più veloce del riempimento.
Event-driven: CI/CD o admine-evento chiama webhook «invalidate tags».

Raccomandazione: combinare entrambe le tattiche: versioning dei percorsi per asset + tag-purge per contenuti/pagine.

Tiered-cache, origin-shield и prewarm

Tered-cache - I livelli CDN regionali hanno meno richieste di origin.
Origin-shield: un POP a origin «scudo» - migliora la località e l'hit-ratio.
Prewarm (pre-fetch) - Scalda gli URL/cache hot prima dell'ivent/release.
Negative-cache: annulla in breve tempo 5xx/Timeout (30-120 s) per evitare di essere abbattuto da una tempesta di retrai origin.

Api Kesh quando è possibile

Solo GET/HEAD e idipotenti.
Chiave: percorso + query sostanziale (ad esempio, '? category =... & page =...').
Valida: 'ETag '/' Last-Modified'e's-maxage'.
Filtri utente: inserisci la personalizzazione su client/edge-funzione o usi signed-richiesti + risposta pubblica.

Esempio (API, 30 s + SWR):

Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"

Protezione da avvelenamento cache (cache poisoning)

Regolazione rigida degli URL/titoli; l'elenco bianco dei parametri in chiave.
Ritaglia intestazioni/duplicati sospetti («X-Forwarded», «Accept»).
Vincolo «Vary» e controllo delle dimensioni e delle intestazioni.
Separazione domini: privato/admine su un nome separato senza cache.
Convalida delle risposte: non memorizzare 4xx nella cache (tranne 404 per gli statici), non memorizzare pagine personalizzate senza criteri espliciti.

Compressione e formati

Brotli per testo (js/css/json), gzip - fallback; gli assetti pre-compressi sono validi.
Immagini: webp/avif dove è supportato; Usate «Vary: Accept» + derivati derivati.
Range-richiesti per video/audio: CDN memorizza la cache.
Content-Negotion - Tenere basso il cardinale chiave (device-class invece di UA crude).

Osservabilità e SLO

Metriche chiave

Hit-ratio (by bytes/requests) на edge/tier/shield.
p50/95/99 TTFB per regione e tipo (statico/API).
Fill-rate/Origin egress - Quanto va all'origin.
304 rate e la dimensione media della risposta.
Errore budget: parte «stale-if-error »/« SWR» delle erogazioni; frequenza purge.

Esempi SLO

«p95 TTFB» statico regionale di 120-150 ms, API GET di 200-250 mc.
Edge hit-ratio statico è al 90%, mezza dinamica al 60%.
La percentuale di risposte da un ramo stale quando si verifica un errore è 0. Cinque per cento in 30 giorni.

Scorciatoie Config

Nginx (reverse-proxy prima del CDN o nel self-PoP)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN:512m max_size=100g inactive=7d;

map $args $clean_args {
"~(^    &)(utm_    gclid    fbclid) """; # default $ args simplified example;
}

server {
listen 443 ssl http2;
set $cache_key "$scheme$request_method$host$uri?$clean_args    $http_accept    $http_accept_encoding";
location /static/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_ignore_headers Set-Cookie;
add_header Cache-Control "public, s-maxage=86400, max-age=3600, stale-while-revalidate=600" always;
proxy_pass https://origin_static;
}

location /api/public/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_cache_valid 200 30s;
add_header Cache-Control "public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600" always;
proxy_set_header If-None-Match $upstream_http_etag;
proxy_pass https://origin_api;
}
}

Avvoy (SWR + negative-cache, concept)

yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. cache. simple_http_cache. v3. SimpleHttpCacheConfig
Cache-Control/Surrogate-Control Header Cache Policies
We cache 5xx errors briefly via route/retry policy + local_rate_limit

Heder per assetti «veloci»


Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br

Heder per mezza dinamica (directory)


Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept

FinOps Come la cache risparmia denaro

Egress origin ↓, meno carichi CPU/DB → sotto i costi di infrastruttura.
Meno richieste fino a backend paganti (search/index/image).
Target metrica: $/riduzione p95 e $/riduzione egress di 1 GB - Monitorare l'effetto post-accelerazione.

Specifico per iGaming/Fintech

Cataloghi provider/asset: percorsi versionati + TTL annuo.
Landing eventi/tornei: 1-5 min «s-maxage» + «SWR» per 10-30 min; tag-purge durante l'aggiornamento.
Pagine liv (coefficienti/tabelle): cache parziale dei blocchi JSON, TTL brevi (5-30 s), per blocchi personali - render client.
PSP/endpoint di pagamento: No cache, rigoroso'no-store '; nella cache solo le tabelle di riferimento (BIN, states).
Antibot: cache statica/GET, percorsi «grigi» per ASN sospette; Non permetteré Vary "per i titoli rumorosi.

Assegno foglio di implementazione

  • La chiave della cache è la normalizzazione dell'URL, l'elenco delle query consentite, 'Vary', solo in base a quanto desiderato.
  • Percorsi pubblici/privati separati; privato - «no-store» e bypass CDN.
  • Immessi scale TTL per tipo di contenuto; configurato'SWR/if-errore '.
  • Configurato tiered-cache + origin-shield; attivato negative-cache 5xx (breve).
  • C'è un tag/URL purge, soft purge; integrazione con CI/CD.
  • Compressione abilitata (br/gzip), formati di immagine Web e range-risposte.
  • Metrici: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; Gli alert per i fallimenti.
  • Playbook: riscaldamento della cache prima dei picchi, emergenza purge, degrado origin.

Errori tipici

Un assetto senza versioni con un grande TTL ha usato le bande «piegate» degli utenti.
L'eccessivo'Vary '(«User-Agente», per tutti i titoli) ha → un'esplosione di radicalità e un basso hit-ratio.
Cache 4xx/401/403/privacy.
L'assenza di negative-cache è una valanga di richieste di origin degradato.
Niente tag-purge, purge di massa e «tempesta» re-fill.
La chiave cache include le impostazioni UTM/ref rumorose.
TTL troppo breve per la statica → un carico eccessivo per CDN e origin.

Mini playbook

1) Riscaldamento della cache prima dell'evento

1. Raccoglie la top-N URL per → 2) Prefetch parallelo (rate-limited) per regione → 3) Verifica hit-ratio ↑ e p95 ↓.

2) Emergenza soft-purge catologi

1. Invia «PURGE »/tag-clear 2) Il CDN dà stale e lo sfondo allunga freschi 3) Controlla l'assenza di spine sull'origin.

3) Errore origin

1. 'stale-if-error'salva X ore (2) Abilita lo striscione «lavorazioni» su edge 3) Per il ripristino - target warm-up.

Totale

Forte strategia CDN = chiave di cache corretta + TTL sensibili con SWR/if-errore + disabilità guidata + tiered/shield + osservabilità. Fissare la politica negli heder e negli heder, misurare gli hit-ratio e i p95, pianificare il riscaldamento sotto i picchi - e gli utenti avranno sempre una risposta rapida e l'origin sarà ancora vivo anche nell'ora più calda.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.