CDN e edge-cajado
CDN e edge-cajado
1) Alvos
O CDN (Conteúdo Delivery Network) reduz a latência e a pressão sobre origin: armazena conteúdo dinâmico estático e condicional em nódulos edge, fornece escala, sustentabilidade e segurança (DDoS/WAF), adiciona uma lógica edge (reescrever respostas/solicitações, autenticação, A/B).
2) Modelo de cachê e chaves
Ключ кеша = `scheme + host + path +?(selected query params) + headers (Vary)`
Recomendado:- Normalizar query ('utm _' excluir, deixar 'v', 'lang', 'country' etc.).
- Minimizar 'Vary' (por exemplo, 'Vary: Accept-Encoding, Aceitt-Language'), evitar 'Vary:'.
- API - chave da rota + ID da versão (semver, hash, build id) + query/headers (por exemplo, 'X-Tenant').
- Para páginas personalizadas, é edge-segmentação (por cookie/geo) ou Skip-Cache.
3) Políticas TTL e títulos
Títulos básicos:- `Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=60, stale-if-error=300`
- «Surrogate-Control» (se suportado) é uma política separada para CDN diferente do navegador.
- 'ETag '/' Last-Modificed' - solicitações condicionadas (304) e poupança de tráfego.
- Para privado, 'Cachê-Controle: Private, no-store', se não puder ser armazenado.
- As API que permitem o armazenamento em dinheiro são 'Cachê-Controle: público, s-maxage = 60' + chave de versão.
Abordagem recomendada: recursos «eternos» (com fingerprint em nome de arquivo) → 'max-age = 31536000, imutável'; «páginas/JSON» → um TTL + SWR curto.
4) Deficiência: purge/soft-purge
Purge by URL: pontual.
Purge by tag/key: limpeza em grupo (use 'Surrogate-Key: products: 42 category: food').
Soft-purge: marca conteúdo «obsoleto», edge stale até a nova versão.
Aquecimento «quente»: Depois do pouso, dê as páginas principais das regiões.
5) Edge-pattern de desempenho
Stale-While-Revalidate: resposta rápida com cópia «obsoleta» + atualização de fundo.
Prefetch recursos críticos (proload, precisnect, dns-prefetch).
Composto: gzip/br (para texto), zstd se o CDN for suportado.
HTTP/2/3 (QUIC): multiplexe e menos latidão.
O TLS sessão resumpition e o OCSP stapling no perímetro.
6) Imagens e vídeos
Image optimization at edge: resize/format negotiation (`Accept: image/avif,webp`), авто-WebP/AVIF, DPR-варианты.
Lazy-load и responsive (`srcset`, `sizes`).
Vídeo: HLS/DASH, fragmented MP4, origin-shield para reduzir «tempestades».
Serviços Thumbnail e signed OUTs para imagens privadas.
7) Segurança do perímetro
WAF: regras OWASP, bloqueio de países/ASN, rate-limits com chave (IP + cookies + token).
DDoS: L3/4 agrubbing, L7-Cheque, JS-Challengs/turnstyle.
URL/cookies assinados para recursos privados (vídeos/relatórios): TTL + HMAC/EdDSA.
Geo-fencing e complacência (por exemplo, proibição de regiões).
8) Edge-compute (lógica na borda)
Malas:- Personalização sem perfuração de cachê: segmentos (A/B), geo, linguagem em edge e conteúdo em dinheiro.
- Reescrever respostas/títulos, rediretos, splits AB.
- Autenticação de toques: verificação da assinatura JWT, referência à chave.
- Canary por cookie/percent: parte do tráfego é para o novo backend.
Os exemplos de tecnologia são Cloudflare Workers/Durable Objects, Gastly Compute @ Edge, AWS Lambda @ Edge.
9) Multi-CDN e perímetro global
Razões: cobertura, SLA, custo, restrições regionais, isolamento de incidentes.
GSLB/Traffic Steering: por geo/latency/erros reais; health-checks de vários pontos vantage.
Um único esquema de chaves/cabeçalhos (Surrogate-Key), regras de purge sincronizadas.
Origin-shield é comum a todos os CDN para não «bater» origin em deficiências.
10) Logação e métricas
Recolha:- Hit ratio (cache, CDN → edge/origin), byte hit ratio.
- Latency p50/p95/p99, error-rate por código/rota.
- Origin fetches: RPS/bytes/erros (proteção contra falhas redundantes).
- Gráficos regionais (por POP/ASN/país).
- Integre-se ao Observabilidade: Prometheus (pull via exportadores), Grafana/OTel (push de edge-logs).
11) SEO и SPA/SSR
Páginas SEO com SWR e TTL curto - rápido e «fresco».
Sitemap/robots - Escondendo por muito tempo, mas admita soft-purge.
Service Worker: armazenamento em dinheiro offline, perfetch caminhos críticos, atualizações de destino.
12) Exemplos de configurações e cabeçalhos
12. 1 Perfis Cachê-Controle
Estática com 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 em dinheiro):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (origin) - normalização 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 Gastly VCL - soft-purge e chaves
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 assinados
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ções 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) Dados privados e API
Nunca cante respostas privadas sem isolar a chave (para-usuário/para-token).
Use o Signed Cookies/Headers e 'Vary: Autorization' apenas com controle rigoroso (senão, cache-bust).
Uma alternativa segura é separar a camada pública (a ser armazenada) e os insumos privados (ESI/edge-composição).
14) Geo/regras de conteúdo
Restrições de licença: geo-deny em edge, playshalders em vez de bloquear origin.
Os banners etários/reguladores são renders por edge (não furar o dinheiro).
15) Anti-pattern
'no-cachê, no-store' para todo o site → perda de efeito CDN.
'Vary' em cabeçalhos instáveis (por exemplo, 'Usuário-Agente') → a cardealidade.
Limpar todo o cachê a cada lançamento.
TTL curto sem SWR → «tempestade» no origin.
As páginas pessoais são armazenadas sem segmentação/chave de token.
Falta de origin-shield → várias falhas paralelas.
16) Folha de cheque de implementação (0-45 dias)
0-10 dias
Categorizar recursos: estática/HTML/API.
Ativar gzip/br, HTTP/2/3, normalização query, 'Surrogate-Key'.
Digite SWR/IFE e purge básico.
11 a 25 dias
Edge-otimização de imagens (resize/formato), origin-shield.
URL assinados para mídia privada, perfis WAF/DDoS.
Dashboards: hit ratio, origin fetches, p95 POP.
26-45 dias
Multi-CDN ou estratégia GSLB, peso canário no perímetro.
Edge-compute para segmentação/AV/geo, soft-purge por chave.
Aquecimento automático e integração purge em CI/CD.
17) Métricas de maturidade
Byte hit ratio ≥ 85% para estática, ≥ 60% para dinâmica HTML/condicional.
Origin RPS é estável em picos (sem «tempestades»).
O p95 TTFB foi reduzido em ≥ 30% nas principais regiões.
% das respostas stale em incidentes> 90% (o usuário quase não notou).
Automação completa purge-a-chave no lançamento-pipline.
18) Conclusão
Um circuito CDN eficiente são chaves/TTL/opções, disciplina de deficiência e lógica edge. Adicione SWR/IFE, origin-shield, otimização de mídia e segurança rigorosa (WAF, URL assinados). Normalize as métricas e integre o purge em CI/CD - e você terá um perímetro rápido, econômico e sustentável preparado para as cargas de pico e os cisnes pretos.