CDN și cache de margine
CDN și cache de margine
1) Obiective
CDN (Content Delivery Network) reduce latența și încărcarea pe origine: cache-uri statice și conținut dinamic condiționat pe nodurile de margine, oferă scară, stabilitate și securitate (DDoS/WAF), adaugă logica de margine (rescrierea răspunsurilor/cererilor, autentificare, A/B).
2) Modelul și cheile cache
Ключ кеша = 'schemă + gazdă + cale +? (parametri de interogare selectați) + antete (Vary)'
Recomandat:- Normalizați interogarea ("utm _' exclude, lăsați" v "," lang "," country "etc.).
- Minimizaţi 'Vary' (de exemplu, 'Vary: Accept-Encoding, Accept-Language'), evitaţi 'Vary:'.
- Pentru API - cheie de la identificatorul de traseu + versiune (semver, hash, build id) + interogare/anteturi necesare (de exemplu, „X-Tenant”).
- Pentru pagini personalizate - edge-segmentare (prin cookie/geo) sau Skip-Cache.
3) Politici și antete TTL
Titluri de bază:- 'Cache-Control: public, max-age = 300, s-maxage = 3600, stale-în timp ce-revalidat = 60, vechi-dacă-eroare = 300'
- „Surrogate-Control” (dacă este acceptat) este o politică separată pentru alte CDN-uri decât browser-ul.
- „ETag ”/„ Last-Modified” - cereri condiționate (304) și economii de trafic.
- Pentru privat: „Cache-Control: privat, nu-magazin”, dacă nu cache.
- API-uri care permit memoria cache: 'Cache-Control: public, s-maxage = 60' + versiune cheie.
Abordare recomandată: resurse „eterne” (cu amprentă digitală în numele fișierului) → „max-age = 31536000, imuabil”; „pagini/JSON” → scurt TTL + SWR.
4) Dizabilitate: purjare/purjare moale
Purjare prin URL: pointwise.
Purjați după etichetă/cheie: epurări de grup (utilizați 'Surrogate-Key: produse: 42 categorie: alimente').
Soft-purge: marchează conținutul „învechit”, marginea dă vechi până când este primită o nouă versiune.
Încălzirea „caldă”: după desfășurare, trageți paginile principale din regiuni.
5) Modele de performanță Edge
Stale-While-Revalidate: răspuns rapid cu „învechit” copie + actualizare de fundal.
Prefetch de resurse critice (preîncărcare, preconnect, dns-prefetch).
Compresie: gzip/br (pentru text), zstd dacă CDN este acceptat.
HTTP/2/3 (QUIC): multiplexare și mai puțină latență.
Reluarea sesiunii TLS și capsarea OCSP pe perimetru.
6) Imagini și videoclipuri
Optimizarea imaginii la margine: redimensionarea/negocierea formatului ('Accept: image/avif, webp'), авто -WebP/AVIF, DPR- варианты.
Lazy-load и responsive („srcset”, „dimensiuni”).
Video: HLS/DASH, MP4 fragmentat, scut de origine (cache central) pentru a reduce furtunile.
Servicii de miniatură și URL-uri semnate pentru imagini private.
7) Securitatea perimetrului
WAF: Regulile OWASP, blocarea țării/ASN, limitele ratei cu cheie (IP + cookie + token).
DDoS: spălare L3/4, dame L7, provocări JS/turnichet.
URL-uri/cookie-uri semnate pentru resurse private (video/rapoarte): TTL + HMAC/EdDSA.
Geografie și conformitate (de exemplu, interzicerea regiunilor).
8) Edge-calcul (logică la margine)
Cazuri:- Personalizare fără a rupe memoria cache: segmentele (A/B), geo, limba pe margine și conținutul sunt cache.
- Rescrierea răspunsurilor/titlurilor, redirecționări, împărțiri AB.
- Autentificare pe bază de token: verificare semnătură JWT, cheie obligatorie.
- Canare prin cookie/procent: o parte a traficului către noul backend.
Exemple de tehnologie includ lucrătorii Cloudflare/obiecte durabile, Fastly Compute @ Edge, AWS Lambda @ Edge.
9) Multi-CDN și perimetrul global
Motive: acoperire, SLA, costuri, restricții regionale, izolarea incidentelor.
GSLB/Direcție de trafic: pe geo/latență/erori reale; controale de sănătate din mai multe puncte de vedere.
O singură schemă cheie/antet (Surrogate-Key), reguli sincronizate de epurare.
Scutul de origine este comun tuturor CDN-urilor pentru a nu „lovi” originea cu handicap.
10) Logare și măsurători
Colecta:- Raportul lovit (cache, CDN → margine/origine), raportul lovit de octet.
- Latența p50/p95/p99, rata de eroare prin cod/traseu.
- Preluare origine: RPS/octeți/erori (protecție împotriva ratărilor redundante).
- Grafice regionale (de POP/ASN/țară).
- Integrați cu Observabilitate: Prometheus (trageți prin exportatori), Grafana/OTel (împingeți din jurnalele de margine).
11) SEO и SPA/SSR
Paginile SEO cu SWR și TTL scurt sunt rapide și proaspete.
Sitemap/roboți - ne cache pentru o lungă perioadă de timp, dar permite soft-purge.
Service Worker: caching offline, prefetch de căi critice, actualizări direcționate.
12) Configurații de probă și antete
12. 1 Profiluri cache-control
Static cu amprentă digitală:
Cache-Control: public, max-age=31536000, immutable
HTML/RSS:
Cache-Control: public, max-age=60, s-maxage=600, stale-while-revalidate=60, stale-if-error=600
Surrogate-Control: max-age=600, stale-while-revalidate=120
API (storefront cache):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (origine) - normalizare interogare/antete
nginx map $arg_utm_source $utm_skip { default 1; "" 0; }
map $args $normalized_args {
default "";
"~(^ &)v=([a-z0-9]+)(& $)" "v=$2";
}
proxy_cache_key "$scheme://$host$request_uri?$normalized_args";
add_header Surrogate-Key "product:{{id}} category:{{cat}}";
12. 3 Fastly VCL - moale-purjare și chei
vcl sub vcl_recv {
set req. hash += req. http. host req. url. path;
set req. hash += querystring. decode(req. url, "v,lang");
if (req. method == "PURGE") {
if (req. http. Fastly-Soft-Purge) { softpurge; } else { purge; }
return (synth(200, "purged"));
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "product:42 category:food";
}
12. 4 Cloudflare Workers - URL-uri semnate
js export default {
async fetch(req, env) {
const url = new URL(req. url);
if (url. pathname. startsWith("/private/")) {
const token = url. searchParams. get("token");
if (!token! verify(token, env. SIGNING_KEY)) return new Response("Forbidden", { status: 403 });
}
return fetch(req);
}
}
12. 5 Lambda @ Edge - Opțiuni geo
js exports. handler = async (event) => {
const req = event. Records[0].cf. request;
const country = req. headers['cloudfront-viewer-country']?.[0]?.value 'US';
if (country === 'DE') req. headers['accept-language'] = [{ key:'Accept-Language', value:'de' }];
return req;
};
13) Date private și API
Nu cache răspunsuri private fără izolarea cheie (per-utilizator/per-token).
Utilizați cookie-uri semnate/anteturi și 'Vary: Autorization' only cu control strict (altfel - cache-bust).
Alternativă sigură: separați stratul public (cache) și incluziunile private (compoziția ESI/muchie).
14) Reguli geo/conținut
Restricții de licențiere: geo-negare pe muchie de cuțit, înlocuitori în loc să blocheze originea.
Bannere de vârstă/reglementare - randare pe margine (nu punch cache).
15) Anti-modele
'no-cache, no-store' pentru întregul site → pierderea efectului CDN.
"Vary 'on antete instabile (de exemplu," User-Agent ") → cardinalitate.
Ștergeți întreaga memorie cache pe fiecare versiune.
TTL-uri scurte fără SWR → furtună la origine.
Paginile personale sunt cache fără segmentare/token chei.
Lipsa scutului de origine → mai multe ratări paralele.
16) Lista de verificare a implementării (0-45 zile)
0-10 zile
Categorizați resursele: imuabile/HTML/API.
Activați gzip/br, HTTP/2/3, normalizarea interogărilor, 'Surogate-Key'.
Introduceți SWR/IFE și purjare de bază.
11-25 zile
Optimizare Edge-imagine (redimensionare/format), scut de origine.
URL-uri semnate pentru medii private, profiluri WAF/DDoS.
Tablouri de bord: raportul de succes, preluarea originii, p95 de POP.
26-45 zile
Strategia multi-CDN sau GSLB, greutăți canare pe perimetru.
Edge-calcul pentru segmentare/AB/geo, soft-purge de chei.
Încălzirea automată și integrarea purjării în CI/CD.
17) Valorile maturității
Byte hit ratio ≥ 85% pentru static, ≥ 60% pentru HTML/dinamica condițională.
Origine RPS stabil la vârfuri (fără „furtuni”).
p95 TTFB redus cu ≥ 30% în regiunile majore.
% din răspunsurile vechi pentru incidente> 90% (utilizator abia observat).
Automatizarea completă a cheilor de purjare în conductele de eliberare.
18) Concluzie
Circuitul CDN eficient este tastele/TTL/opțiuni, disciplina handicap, și logica margine. Adăugați SWR/IFE, scut de origine, optimizare media și securitate puternică (WAF, URL-uri semnate). Standardizați valorile și integrați purjarea în CI/CD - și obțineți un perimetru rapid, economic și stabil, gata pentru sarcini maxime și lebede negre.