Edge-cashi et POP
1) Qu'est-ce que POP et pourquoi le « bord »
POP (Point of Presence) est un nœud de réseau de diffusion de contenu (CDN/edge) géographiquement proche de l'utilisateur. Edge-cache - une couche de stockage des réponses directement dans le POP qui réduit :- Latence (moins de RTT avant le client).
- Charge et coût sur origin (offload).
- Trafic entre régions/nuages (egress-economics).
Edge n'est pas seulement un cache. Les POP modernes prennent en charge le routage L7, les filtres WAF/bot, le rate-limit, A/B/Canaries, la transformation et le calcul edge (scripts/fonctions).
2) architectures edge-cache
2. 1 Plat vs multi-niveaux (tiered)
Plat : chaque POP va à l'origin. Simple, mais cher pour l'origin.
Tiered/Shield : POP → Shield POP (cache central) → origin. Shield accumule les erreurs de cache, crée un « parapluie » pour l'origin.
2. 2 Segments régionaux
Séparez les domaines de mise en cache par région/juridiction (RGPD/localisation des données).
Option : « EU-only POPs » et « Global POPs », clés séparées/règles.
2. 3 Anycast + laticy/geo-aware itinérance
Anycast amène le client au POP le plus proche par BGP.
Geo/latency-aware bascule entre RR/pools régionaux sur des mesures RTT/erreurs actives.
3) Clés de cache, 'Vary', TTL et fraîcheur
3. 1 Conception de clés
Normaliser les requêtes : trier les paramètres query, supprimer le bruit (utm, ref).
Incluez les axes sémantiques : 'tenant', 'locale', 'version du schéma' ('v = 3'), mais évitez PII.
Pour le contenu privé - séparer le cache public et privé (voir § 7).
3. 2 Contrôle de la mise en cache (HTTP)
Titres :- `Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60, stale-if-error=120`
- « ETag »/« Last-Modified » pour les GET conditionnels (304).
- Vary : minimisez la cardinalité ('Accept-Encoding', 'Accept-Language', parfois 'Autorisation '/' Cookie' pour les chemins privés).
- Micro-cache pour « presque-haut-parleur » : 1-5 secondes + SWR.
3. 3 Stratégies Stale
SWR (stale-while-revalidate) : nous donnons une réponse obsolète et mettons à jour l'arrière-plan.
SIE (stale-if-error) : en cas d'erreur, origin utilise le cache avant 'SIE' -TTL.
Soft/Hard TTL : durée douce (peut être stale), dure (pleine faille).
4) Handicap : comment renouveler le « bord »
4. 1 Par clé et par tag
PURGE/BAN par URL/préfixe - grossier, mais rapide.
Surrogate-Key/Tags : attribuez des tags aux objets ('article : 42', 'category : 7'), basculez sur la tag - handicap de masse sans trop d'URL.
4. 2 Handicaps d'événements
Si vous modifiez les données en origin, publiez les événements (Kafka/NATS) → les edge-invalides appellent BAN/PURGE/soft-expire.
4. 3 Versioning d'artefacts
Pour la statique - content-hash dans le nom du fichier.
Pour l'API, modifiez la version de la clé ('v = 4') en cas de modifications incompatibles.
5) Protection origin et performance
5. 1 Origin shielding
Activez le Shield POP comme seul point d'échec → réduit plusieurs fois la tempête selon l'origin.
5. 2 Coalescing/single-flight
Sur le bord, une requête « perce » le cache en cas d'échec ; les autres attendent (pas de stampede de rattrapage).
5. 3 Rate-limit/Queue/Shedding на edge
En cas de surcharge - réinitialisez les demandes peu prioritaires/anonymes dans POP plutôt que sur origin.
5. 4 Signed URL / Signed Cookie
Origin est caché derrière edge. Accès au contenu privé - par des liens/cookies signés avec TTL et des attributs (IP/Geo/Path) afin de ne pas distribuer « à tout le monde ».
6) Transport et transformation
6. 1 HTTP/2–3 и QUIC
HTTP/2 : multiplexage, heder-compression.
HTTP/3/QUIC : moins de blocages HOL et mieux sur les canaux perdus → moins de p95/p99 TTFB.
6. 2 Compressions et images
Brotli pour le texte, AVIF/WebP pour les images, image-resizing sur le bord (responsive sizes, DPR).
Options de cache par format/taille : les clés incluent 'width/format' (ou 'Vary : Accept'/Client-Hints).
6. 3 TLS/0-RTT (prudent)
Le repérage des sessions accélère l'installation, 0-RTT peut être vulnérable au replay → activer uniquement pour les GET idempotent.
7) Public vs privé edge-cache
7. 1 Public
« Cache-Control : public, s-maxage =... » et minimum « Vary ».
Convient pour catalogue, nouvelles, images, statiques CDN.
7. 2 Privé/personnalisé
Options :- Ne pas mettre en cache au niveau chared : 'Cache-Control : private' (cache du navigateur).
- Clé-segmentation : incluez tenant/user-id (ou token-hash) dans la clé et marquez comme privé-partagé (attention au stockage et PII).
- Cookies signés et Edge-auth : cache est public, mais l'accès par signature (options avec l'état de session encrypté sur le bord).
8) Edge-compute (Workers/Functions)
Fonctions faciles sur POP : réécriture de chemin/en-têtes, A/B-split, normalisation des clés, logique SWR, prefetch des ressources voisines.
API locale KV/Cache sur POP pour les opérations millisecondes.
Contraintes : temps court/mémoire, absence de connexions à longue durée de vie, travail attentif avec PII/régionalité.
Pseudo-exemple (Workers-like)
js export default {
async fetch(req, env) {
const key = normalize(req);
let res = await caches. default. match(key);
if (res) return withHitHeader(res, "HIT");
res = await fetch(req, { cf: { cacheEverything: true }});
const ttl = computeTTL(res);
eventWaitUntil(caches. default. put(key, res. clone(), { expirationTtl: ttl }));
return withHitHeader(res, "MISS");
}
}
9) Exemples de configurations
9. 1 Nginx: micro-cache + SWR
nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:200m inactive=30m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }
server {
location /api/list {
proxy_cache api;
proxy_cache_key "$scheme://$host$uri$is_args$args";
proxy_cache_valid 200 2s; # micro-cache proxy_cache_use_stale error timeout updating;# SIE + SWR proxy_cache_background_update on;
add_header X-Edge-Cache $upstream_cache_status;
proxy_pass http://origin_pool;
}
}
9. 2 Varnish: surrogate keys и BAN
vcl sub vcl_recv {
if (req. method == "BAN") {
if (req. http. Surrogate-Key) {
ban("obj. http. Surrogate-Key ~ " + req. http. Surrogate-Key);
return (synth(200, "Banned"));
}
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "article:42 tag:author:7";
set resp. http. Cache-Control = "public, s-maxage=300, stale-while-revalidate=60";
}
9. 3 Envoy (filtre edge-cache)
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. http. cache. simple_http_cache. v3. SimpleHttpCacheConfig
9. 4 Comportement CloudFront-style (croquis)
Behavior A : '/images/' - long TTL, compression, vary selon les formats.
Behavior B : '/api/' est un court TTL, SWR, cookie signé, WAF/bot de protection.
Origin Shield est activé, les statuts 500/502/504 → « stale-if-error ».
10) Observabilité, SLO et rapports
10. 1 Métriques
cache_hit_ratio (par POP/région/route), byte_hit_ratio.
origin_offload = 1 − (origin_requests / edge_requests).
TTFB/TTL par quantiles, stale_responses_total, revalidations_total.
stampede_prevented_total, coalesced_waiters.
shield_hit_ratio (avec tiered), origin_egress_bytes (coût).
10. 2 Logs/Tracs
Logs avec les étiquettes 'HIT/MISS/STALE/UPDATING/BYPASS', clé, TTL, POP, tenant.
Dans les tracés distribués, notez la source ('edge', 'origin') et la cause (revalidate/stale/error).
10. 3 exemples de SLO
«Для `/api/list`: p99 TTFB ≤ 250 мс, edge hit ≥ 70%, byte-hit ≥ 80%, origin error-offload ≥ 90%».
La proportion de réponses « stale-if-error » est ≤ 1 % par jour.
11) Sécurité, vie privée, conformité
WAF/bot-management - sur edge pour filtrer jusqu'à origin.
Régionalité des données : ne stockez les artefacts privés que dans des POP valides ; utilisez des clés régionales spécifiques et ACL.
Signatures et jetons sur edge, ne donnez pas de réponses privées à partir d'un cache public.
Minimisation des PII : ne pas inclure les données personnelles dans les clés ; crypter le cookie ; TTL courts pour la personnalisation.
12) Recettes types
12. 1 « Presque dynamique » (bandes/listes)
Micro-cache 1-3 avec + SWR sur edge, shield inclus, single-flight, negative-cache pour les résultats vides 1-5 s.
12. 2 Nuages d'images/médias
Edge Resise/formatage (WebP/AVIF), options de cache par 'width/format', TTL longue, handicap par balises de contenu.
12. 3 API avec personnalisation
'Cache-Control : cookie privé 'ou signé + clé-segmentation (tenant), court TTL, SWR pour les parties « quasi publiques » de la réponse.
12. 4 Grandes ventes/piques
Chauffage des ressources clés (prewarm), augmentation de la TTL par statique, SWR/SIE agressif, limites d'origin strictes incluses dans le bouclier.
13) Anti-modèles
Sans 'Vary' avec des réponses différentes → fuites/données incorrectes.
L'énorme « Vary » → cardinalité → bas hit.
Cache partagé pour prod/experiments → pollution.
Il n'y a pas de vol unique → une tempête de défauts sur l'origin.
SWR sans restriction → course de renouvellement et avalanche de demandes de validation.
Edge-cache de réponses privées en tant qu'incidents publics → de sécurité.
L'absence de tiered/shield dans la charge worldwide → la surchauffe de l'origin.
14) Chèque de mise en œuvre
- Cartographier la couverture POP, inclure anycast + latency-routing.
- Sélectionnez les stratégies tiered/shield et single-flight/coalescing.
- Concevoir les clés et Vary (cardinalité minimale, sans PII).
- Configurez TTL/SWR/SIE (soft/hard TTL) et negative-cache.
- Activer l'URL/cookie signé, cacher l'origin, activer les filtres WAF/bot.
- Organiser un handicap : Surrogate-Key/BAN + event-driven.
- Soulevez les métriques hit/byte-hit/offload/TTFB et les dashboards per-POP.
- Échauffement avant les pics, runbooks pour tempête/surcharge.
- Tests de confidentialité/régionalité, vérification des clés et des politiques.
- SLO/budget erroné pour edge et critères de TTL/SWR auto-twicks.
15) FAQ
Q : Comment choisir un TTL sur le bord ?
R : Éloignez-vous de l'obsolescence admissible et de l'objectif hit-ratio. Pour « presque-dynamique » - 1-5 avec + SWR ; pour les guides/images - minutes/heures avec handicap par événements/étiquettes.
Q : Quand le Shield POP est-il nécessaire ?
R : Avec le trafic global ou les clés chaudes : le shield réduit considérablement les défauts sur l'origin et stabilise les ondes de « rattrapage ».
Q : Comment mettre en cache les réponses autorisées ?
R : Soit 'private' (navigateur), soit public avec cookie/URL signé et segmentation de clé (sans PII), soit généralement bypass pour les données personnelles critiques.
Q : Que faire de la HTTP/3 ?
A : Inclure : Particulièrement gagné par le canal mobile/perte. Contrôlez la compatibilité proxy et fallback sur le HTTP/2.
16) Résultats
Edge-Cashi et le réseau POP sont les fondements de plates-formes rapides et économiques. Le succès est déterminé par la bonne clé et « Vary », le TTL/SWR/SIE raisonnable, l'invalidité par tags/événements, tiered/shield protection origin, ainsi que l'observation (hit/offload/TTFB) et la discipline sécurité/vie privée. Suivez la liste de contrôle - et le « bord » deviendra votre accélérateur, pas une source de surprises.