CDN y almacenamiento en caché edge
CDN y caché edge
1) Objetivos
CDN (Content Delivery Network) reduce la latencia y la carga de origen: almacena en caché contenido estático y condicionalmente dinámico en los nodos edge, proporciona escala, estabilidad y seguridad (DDoS/WAF), agrega lógica edge (reescritura de respuestas/consultas, autenticación, A/B).
2) Modelo de caché y claves
Ключ кеша = `scheme + host + path +?(selected query params) + headers (Vary)`
Se recomienda:- Normalizar query ('utm _' excluir, dejar 'v', 'lang', 'country', etc.).
- Minimizar 'Variar' (por ejemplo, 'Variar: Aceptar-Encoding, Aceptar-Lenguaje'), evitar 'Variar:'.
- Para la API, una clave de la ruta + ID de versión (semver, hash, build id) + query/headers (por ejemplo, 'X-Tenant').
- Para páginas personalizadas: segmentación edge (por cookie/geo) o Skip-Cache.
3) Políticas y encabezados de TTL
Encabezados básicos:- `Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=60, stale-if-error=300`
- 'Surrogate-Control' (si se admite) es una política independiente para CDN que no es un navegador.
- 'ETag '/' Last-Modified' - consultas condicionales (304) y ahorro de tráfico.
- Para privado: 'Cache-Control: private, no-store' si no se puede almacenar en caché.
- APIs que permiten caché: 'Cache-Control: public, s-maxage = 60' + clave por versión.
El enfoque recomendado es: recursos «eternos» (con fingerprint en el nombre del archivo) → 'max-age = 31536000, immutable'; «páginas/JSON» → corto TTL + SWR.
4) Discapacidad: purge/soft-purge
Purge by URL: punto por punto.
Purge by tag/key: limpieza grupal (utilice 'Surrogate-Key: products: 42 category: food').
Soft-purge: marca el contenido como «obsoleto», edge regala stale antes de recibir una nueva versión.
Calentamiento «cálido»: después de deployas, tire las páginas principales de las regiones.
5) Patrones de rendimiento edge
Stale-While-Revalidate: respuesta rápida con una copia «obsoleta» + actualización de fondo.
Prefetch de recursos críticos (preload, preconnect, dns-prefetch).
Compression: gzip/br (para texto), zstd si se admite CDN.
HTTP/2/3 (QUIC): multiplexación y menor latencia.
Resumen de sesión TLS y stapling OCSP en el perímetro.
6) Imágenes y videos
Image optimization at edge: resize/format negotiation (`Accept: image/avif,webp`), авто-WebP/AVIF, DPR-варианты.
Lazy-load и responsive (`srcset`, `sizes`).
Video: HLS/DASH, fragmented MP4, origin-shield (caché central) para reducir las «tormentas».
Servicios de thumbnail y URLs señalizadas para imágenes privadas.
7) Seguridad perimetral
WAF: reglas OWASP, bloqueo de países/ASN, rate-limits con clave (IP + cookie + token).
DDoS: L3/4 scrubbing, verificadores L7, JS-challenge/turnstile.
URL/cookies firmadas para recursos privados (videos/informes): TTL + HMAC/EdDSA.
Geo-fencing y cumplimiento (por ejemplo, prohibición de regiones).
8) Edge-compute (lógica en el borde)
Casos:- Personalización sin interrupción de la memoria caché: segmentos (A/B), geo, idioma en edge y contenido en caché.
- Reescritura de respuestas/títulos, redirecciones, splits AB.
- Autenticación de tokens: validación de firma JWT, enlace a clave.
- Canarias por cookie/percent: parte del tráfico está en el nuevo backend.
Ejemplos de tecnología: Cloudflare Workers/Objetos duraderos, Fastly Compute @ Edge, AWS Lambda @ Edge.
9) Multi-CDN y perímetro global
Razones: cobertura, SLA, costo, restricciones regionales, aislamiento de incidentes.
GSLB/Traffic Steering: por geo/latency/errores reales; health-checks de varios puntos de vantage.
Esquema único de claves/encabezados (Surrogate-Key), reglas de purge sincronizadas.
Origin-shield es común a todos los CDNs para no «golpear» el origin en casos de discapacidad.
10) Lógica y métricas
Recopilar:- Hit ratio (cache, CDN → edge/origin), byte hit ratio.
- Latency p50/p95/p99, error-rate por código/ruta.
- Fetches de origen: RPS/bytes/errores (protección contra errores excesivos).
- Gráficos regionales (por POP/ASN/país).
- Integre con Observabilidad: Prometheus (pull a través de exportadores), Grafana/OTel (push de edge-logs).
11) SEO и SPA/SSR
Páginas SEO con SWR y TTL corto - rápido y «fresco».
Sitemap/robots - Almacenar en caché durante mucho tiempo, pero permitir soft-purge.
Service Worker: caché offline, prefetch de rutas críticas, actualizaciones de destino.
12) Ejemplos de configuraciones y encabezados
12. 1 perfiles Cache-Control
Estática con 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 (escaparate en caché):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (origin) - normalización de 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 y llaves
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 firmada
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 - Opciones 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) Datos privados y API
Nunca almacene en caché las respuestas privadas sin aislar la clave (PE/PE).
Use las Cookies Signed/Headers y 'Vary: Authorization' sólo con un control estricto (de lo contrario, cache-bust).
Alternativa segura: separe la capa pública (almacenada en caché) y las incuchas privadas (composición ESI/edge).
14) Geo/reglas de contenido
Restricciones de licencia: geo-deny en edge, playsholder en lugar de bloquear origin.
Banners de edad/regulación: render en edge (no perforar caché).
15) Anti-patrones
'no-cache, no-store' para todo el sitio → pérdida del efecto CDN.
'Vary' por titulares inestables (por ejemplo, 'User-Agent') → cardinalidad.
Borre toda la memoria caché cada vez que salga.
TTL corto sin SWR → «tormenta» en origin.
Las páginas personales se almacenan en caché sin segmentación/claves de token.
Ningún escudo de origen → múltiples errores paralelos.
16) Lista de verificación de implementación (0-45 días)
0-10 días
Categorizar recursos: estática (immutable )/HTML/API.
Habilitar gzip/br, HTTP/2/3, normalización de query, 'Surrogate-Key'.
Introduzca SWR/IFE y la purgación básica.
11-25 días
Optimización edge de imágenes (resize/format), origin-shield.
URL firmada para medios privados, WAF/DDoS-perfiles.
Dashboards: hit ratio, origin fetches, p95 por POP.
26-45 días
Estrategia Multi-CDN o GSLB, pesos canarios en el perímetro.
Edge-compute para segmentación/AV/geo, soft-purge por claves.
Auto-calentamiento e integración de purge en CI/CD.
17) Métricas de madurez
Byte hit ratio ≥ 85% para estática, ≥ 60% para altavoz HTML/condicional.
Origin RPS es estable en picos (sin «tormentas»).
p95 TTFB se ha reducido ≥ un 30% en las principales regiones.
% de respuestas stale en incidentes> 90% (el usuario casi no se dio cuenta).
Automatización completa de las llaves de purge en la pipeline de lanzamiento.
18) Conclusión
Un contorno CDN eficaz son las claves/TTL/variantes, la disciplina de la discapacidad y la lógica edge. Agregue SWR/IFE, origin-shield, optimización de medios y seguridad estricta (WAF firmados por URL). Estandarice las métricas e integre el purge en CI/CD, y obtendrá un perímetro rápido, económico y resistente, listo para cargas máximas y cisnes negros.