coldwa.st
All guidesProgrammingWebDataToolsDatabasesHaskellConceptsCabal & buildsToolchainCompilerPerformanceEditor & HLS

Programacao · web · desempenho

O que e uma CDN?

Por ColdwastAtualizado 18 jul. 20268 min de leitura#cdn#performance#web
Um mapa do mundo com nos de rede ligados que representam uma rede de distribuicao global
Uma CDN mantem copias do teu conteudo em servidores por todo o mundo, de modo que cada visitante e servido a partir de uma maquina proxima dele.

Uma CDN (content delivery network, rede de distribuicao de conteudo) e um conjunto de servidores distribuidos por muitos locais que guardam copias do teu conteudo estatico - imagens, CSS, JavaScript, tipos de letra, videos - e servem cada visitante a partir de um servidor geograficamente proximo. O objetivo e simples: encurtar a distancia que um pedido tem de percorrer, para que as paginas carreguem mais depressa e o teu servidor principal trabalhe menos. Se o teu site esta alojado numa unica cidade, um visitante do outro lado do planeta ja nao tem de atravessar o mundo para cada ficheiro.

O problema que resolve

Quando o teu site vive num unico servidor, cada pedido - de cada pais - tem de chegar a essa unica maquina e voltar. A distancia custa tempo: quanto mais longe esta o visitante, mais latencia se acumula, e mais carregado fica o teu servidor a medida que o trafego cresce. Uma CDN responde a ambos os problemas colocando copias dos teus ficheiros mais perto das pessoas e retirando a maior parte da carga de pedidos da tua origem.

Servidores edge e pontos de presenca

Os servidores que uma CDN usa para colocar em cache e servir conteudo sao muitas vezes chamados servidores edge, situados na "borda" (edge) da rede, perto dos utilizadores, em vez de na tua origem central. Grupos destes ficam em centros de dados por todo o mundo, por vezes chamados pontos de presenca (PoP). Quando alguem pede um ficheiro, a CDN encaminha-o para um servidor edge proximo em vez da tua origem. Como esse servidor esta perto, a ida e volta e mais curta e a entrega mais rapida.

Cache hit, cache miss e a origem

O mecanismo central de uma CDN e a cache. A primeira vez que se pede a um servidor edge um ficheiro que ele nao tem, isso e um cache miss: o edge obtem o ficheiro do teu servidor de origem, envia-o ao visitante e guarda uma copia. O visitante seguinte nesse mesmo edge obtem um cache hit - o ficheiro ja esta la e e servido de imediato, sem tocar na origem de todo.

pedido -> servidor edge mais proximo
  cache HIT  -> serve a copia guardada (rapido, origem intacta)
  cache MISS -> obtem da origem, serve, depois guarda para a proxima

Por isso uma CDN acelera a entrega e alivia a origem: uma vez o conteudo em cache no edge, a maioria dos pedidos e servida sem nunca chegar ao teu servidor. Num pico de trafego, a rede edge absorve o grosso da carga.

Um servidor e um cabo de rede laranja com dados binários
Servidores edge em centros de dados de todo o mundo guardam copias em cache do teu conteudo, perto das pessoas que o pedem.

TTL e invalidacao: manter a cache atualizada

Uma copia em cache nao pode viver para sempre, ou os visitantes continuariam a ver uma versao antiga apos atualizares um ficheiro. Dois mecanismos tratam disto:

  • TTL (time to live): a cada item em cache e dada uma vida util, normalmente definida por cabecalhos de cache HTTP como Cache-Control. Quando o TTL expira, o edge trata o item como desatualizado e volta a verificar a origem antes de o servir de novo.
  • Invalidacao (purga): quando implementas uma alteracao e nao podes esperar pelo TTL, dizes a CDN para descartar ficheiros especificos da cache, de modo que o pedido seguinte obtenha a versao fresca da origem. Um truque comum que evita qualquer purga e o cache busting - mudar o nome do ficheiro ou acrescentar uma versao como parametro, por exemplo style.abc123.css, para que uma nova URL seja obtida fresca.

Conteudo estatico vs conteudo dinamico

As CDN brilham com o conteudo estatico: ficheiros iguais para todos e que mudam raramente, como imagens, folhas de estilo, scripts e downloads. Estes colocam-se em cache de forma limpa e podem ser servidos do edge durante muito tempo. O conteudo dinamico - um painel personalizado, ou uma resposta que depende de quem tem sessao iniciada - e mais dificil de colocar em cache, porque a resposta difere em cada pedido. As CDN modernas ainda ajudam aqui com funcionalidades como reutilizacao de ligacao e a execucao de pequenos pedacos de logica no edge, mas o ganho classico e maior continua a ser colocar em cache os recursos estaticos perto dos utilizadores.

Que mais faz habitualmente uma CDN

Alem da cache, a maioria das CDN inclui extras uteis. Costumam terminar o TLS (HTTPS) no edge e aplicar compressao para que os ficheiros viajem mais pequenos e cifrados. Muitas tambem adicionam protecao contra enxurradas de trafego e absorvem a carga que de outro modo atingiria a tua origem. Entre as CDN reais e muito usadas estao Cloudflare, Fastly e Akamai; para bibliotecas de codigo aberto, CDN publicas como jsDelivr servem pacotes diretamente de uma rede edge global.

Onde uma CDN encaixa com o teu alojamento

Uma CDN nao substitui o teu alojamento - fica a frente dele. O teu servidor ou VPS continua a ser a origem que guarda os ficheiros reais e executa a tua aplicacao; a CDN coloca em cache e entrega copias das partes cachaveis. Tambem se combina naturalmente com um proxy reverso a frente da tua app: o proxy encaminha e termina o TLS na tua origem, enquanto a CDN trata da camada edge global. Continuas a precisar de um alojamento de origem solido por baixo de tudo.

FAQ

Uma CDN substitui o meu alojamento? Nao. O teu alojamento e a origem que armazena os ficheiros reais e executa a tua app. Uma CDN coloca em cache e serve copias das partes estaticas cachaveis a partir de servidores perto dos teus visitantes. Precisas de ambos: uma origem fiavel mais a camada edge a frente dela.

Qual e a diferenca entre um cache hit e um cache miss? Um hit significa que o servidor edge ja tem o ficheiro pedido em cache e serve-o de imediato. Um miss significa que nao o tem, por isso obtem o ficheiro da tua origem, serve-o e guarda uma copia para que o pedido seguinte seja um hit.

O que e o TTL? Time to live: durante quanto tempo um item em cache e considerado fresco, normalmente definido por cabecalhos de cache HTTP. Quando o TTL expira, o edge volta a verificar a origem antes de servir o item de novo, de modo que as atualizacoes acabam por chegar a todos.

Uma CDN pode colocar em cache conteudo dinamico? Em parte. O conteudo que difere por utilizador e dificil de colocar em cache diretamente, mas as CDN aceleram-no na mesma com reutilizacao de ligacao, compressao e logica no edge. O ganho maior e mais simples continua a ser colocar em cache recursos estaticos como imagens, CSS e JavaScript perto dos utilizadores.

Guia independente, mantido pela comunidade. coldwa.st e um site de recursos de programacao; este artigo e um texto explicativo original sobre CDN a nivel introdutorio. Os mecanismos descritos (caching no edge, cache hit e miss, TTL, invalidacao) sao conceitos padrao da distribuicao web; os produtos nomeados sao CDN bem conhecidas citadas a titulo ilustrativo.
Recomendado

O servidor de origem por tras da tua CDN

Uma CDN coloca em cache copias do teu conteudo, mas continua a precisar de um verdadeiro servidor de origem que guarde os ficheiros fonte e execute a tua app. A Infomaniak - um fornecedor suico que respeita a privacidade - oferece VPS e servidores cloud para usares como essa origem, e depois colocas uma CDN a frente para servir os recursos estaticos a partir do edge.

Ver Infomaniak Cloud →

Link de afiliado - ajuda a manter estes guias gratuitos.