CDN et edge-cache
CDN et edge-cache
1) Objectifs
Le CDN (Content Delivery Network) réduit la latence et la charge sur l'origin : il met en cache le contenu statique et conditionnellement dynamique sur les nœuds edge, assure l'échelle, la résilience et la sécurité (DDoS/WAF), ajoute la logique edge (réécriture des réponses/requêtes, authentification, A/B).
2) Modèle de cache et clés
Ключ кеша = `scheme + host + path +?(selected query params) + headers (Vary)`
Recommandé :- Normaliser query ('utm _' supprimer, laisser 'v', 'lang', 'country', etc.).
- Minimiser 'Vary' (par exemple 'Vary : Accept-Encoding, Accept-Language'), éviter 'Vary :'.
- Pour l'API, la clé de la route + l'ID de version (semver, hash, build id) + les query/headers souhaités (par exemple, « X-Tenant »).
- Pour les pages personnalisées, la segmentation edge (par cookie/géo) ou Skip-Cache.
3) Politiques et titres de TTL
Titres de base :- `Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=60, stale-if-error=300`
- « Surrogate-Control » (si pris en charge) est une stratégie distincte pour le CDN autre que le navigateur.
- « ETag »/« Last-Modified » - demandes conditionnelles (304) et économies de trafic.
- Pour le privé : 'Cache-Control : private, no-store' si vous ne pouvez pas le mettre en cache.
- API qui permettent le cache : 'Cache-Control : public, s-maxage = 60' + clé par version.
Approche recommandée : ressources « éternelles » (avec fingerprint dans le nom de fichier) → « max-age = 31536000, immutable » ; « pages/JSON » → court TTL + SWR.
4) Handicap : Purge/soft-purge
Purge par URL : point.
Purge par tag/key : nettoyage de groupe (utilisez 'Surrogate-Key : products : 42 category : food').
Soft-purge : marque le contenu « obsolète », edge donne stale avant d'avoir une nouvelle version.
Échauffement « chaud » : après le déploi, videz les principales pages des régions.
5) Modèles de performance Edge
Stale-While-Revalidate : réponse rapide par copie « obsolète » + mise à jour en arrière-plan.
Prefetch des ressources critiques (preload, preconnect, dns-prefetch).
Compression : gzip/br (pour les textes), zstd si le CDN est pris en charge.
HTTP/2/3 (QUIC) : multiplexage et latence réduite.
TLS session resumption et OCSP stapling sur le périmètre.
6) Images et vidéos
Image optimization at edge: resize/format negotiation (`Accept: image/avif,webp`), авто-WebP/AVIF, DPR-варианты.
Lazy-load и responsive (`srcset`, `sizes`).
Vidéo : HLS/DASH, MP4 fragmentée, origin-shield (cache central) pour réduire les « tempêtes ».
Services Thumbnail et URL signées pour les images privées.
7) Sécurité du périmètre
WAF : règles OWASP, blocage pays/ASN, taux-limites avec clé (IP + cookie + token).
DDoS : scribbing L3/4, checker L7, challenges JS/turnstile.
URL/cookies signés pour les ressources privées (vidéos/rapports) : TTL + HMAC/EdDSA.
Géo-fencing et conformité (par exemple, interdiction des régions).
8) Edge-compute (logique sur le bord)
Mallettes :- Personnalisation sans claquement de cache : segments (A/B), géo, langue sur edge, et contenu - cache.
- Réécrire les réponses/titres, redirect, AB-split.
- Authentification token : vérification de la signature JWT, référence à la clé.
- Canary par cookie/percent : une partie du trafic est vers le nouveau backend.
Exemples de technologies : Cloudflare Workers/Durable Objects, Fastly Compute @ Edge, AWS Lambda @ Edge.
9) Multi-CDN et périmètre mondial
Causes : couverture, SLA, coût, contraintes régionales, isolement des incidents.
GSLB/Traffic Steering : par géo/latence/erreurs réelles ; health-checks de plusieurs points de vantage.
Schéma de clé/en-tête unique (Surrogate-Key), règles de purge synchronisées.
L'origin-shield est commun à tous les CDN afin de ne pas « frapper » l'origin en cas de handicap.
10) Loging et métriques
Collecter :- Hit ratio (cache, CDN → edge/origin), byte hit ratio.
- Latitude p50/p95/p99, taux d'erreur par code/itinéraire.
- Origine fetches : RPS/octets/erreurs (protection contre les erreurs redondantes).
- Graphiques régionaux (POP/ASN/pays).
- Intégrer avec Observability : Prometheus (pull via exportateurs), Grafana/OTel (push from edge logs).
11) SEO и SPA/SSR
Pages SEO avec SWR et court TTL - rapide et « frais ».
Sitemap/robots - nous mettons en cache longtemps, mais admettez soft-purge.
Service Worker : mise en cache hors ligne, prefetch des chemins critiques, mises à jour ciblées.
12) Exemples de configurations et titres
12. 1 Profils Cache-Control
Statique avec fingerprint :
Cache-Control: public, max-age=31536000, immutable
HTML/SSR:
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 (vitrine cache) :
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (origin) - normaliser query/headers
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 - soft-purge et clés
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 signées
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 - options géo
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) Données privées et API
Ne jamais mettre en cache les réponses privées sans isoler la clé (per-user/per-token).
Utilisez les cookies signés/Headers et « Vary : Autorisation » uniquement sous contrôle strict (sinon, cache-bust).
Alternative sûre : séparez la couche publique (cache) et les encodages privés (ESI/edge-composition).
14) Géo/règles de contenu
Restrictions de licence : geo-deny sur edge, playholders au lieu de verrouiller origin.
Bannières d'âge/de régulation - rendu sur edge (ne pas percer le cache).
15) Anti-modèles
« no-cache, no-store » pour l'ensemble du site → perte d'effet CDN.
« Vary » par les titres instables (par exemple, « User-Agent ») → cardinalité.
Effacer le cache entier à chaque sortie.
Court TTL sans SWR → « tempête » sur origin.
Les pages personnelles sont mises en cache sans segmentation/clé token.
L'absence d'origin-shield → de multiples erreurs parallèles.
16) Chèque de mise en œuvre (0-45 jours)
0-10 jours
Catégoriser les ressources : statique (immutable )/HTML/API.
Activer gzip/br, HTTP/2/3, normaliser query, 'Surrogate-Key'.
Entrez SWR/IFE et purge de base.
11-25 jours
Optimisation Edge des images (resize/format), origin-shield.
URL signée pour les médias privés, profils WAF/DDoS.
Dashboards : hit ratio, origin fetches, p95 par POP.
26-45 jours
Multi-CDN ou stratégie GSLB, poids canaris sur le périmètre.
Edge-compute pour la segmentation/AV/geo, soft-purge par clé.
Auto-échauffement et intégration de purge dans CI/CD.
17) Métriques de maturité
Byte hit ratio ≥ 85 % pour la statique, ≥ 60 % pour la dynamique HTML/conditionnelle.
L'Origin RPS est stable aux pics (pas de « tempêtes »).
p95 TTFB réduit de ≥ 30 % pour les grandes régions.
Taux de réponse stale pour les incidents> 90 % (l'utilisateur n'a presque pas remarqué).
Automatisation complète des clés de sortie.
18) Conclusion
Une boucle CDN efficace est la clé/TTL/options, la discipline de l'invalidité et la logique edge. Ajoutez SWR/IFE, origin-shield, optimisation des médias et sécurité stricte (WAF, URL signée). Standardisez vos métriques et intégrez-les dans CI/CD - et vous obtiendrez un périmètre rapide, économique et stable, prêt pour les charges de pointe et les « cygnes noirs ».