Visão geral

Aumentar a Taxa de acerto do cache (CHR) com o CloudFront melhora a performance de uma aplicação Web e reduz a carga em sua origem. A CHR é a proporção entre solicitações HTTP atendidas pelo cache do CloudFront e o número total de solicitações. As solicitações atendidas pelo cache do CloudFront se beneficiam de uma melhor latência (por exemplo, do tempo até o último byte), tornando o CHR um bom indicador da descarga de origem e da performance da aplicação. O CHR de uma distribuição do CloudFront pode ser monitorado usando a métrica CloudWatch Taxa de acertos de cache. Para aumentar a CHR, você pode otimizar a configuração de cache no CloudFront, habilitar o Origin Shield e otimizar o comportamento da sua aplicação.

Criar sites de baixa latência com o Amazon CloudFront

Aumentar o tempo de vida do cache (TTL)

Você pode controlar por quanto tempo um objeto é armazenado em cache no CloudFront usando o cabeçalho Cache-Control enviado por sua origem, limitado pelas configurações de Tempo de vida em Políticas de cache. O aumento dos TTLs tem um impacto positivo na CHR e, consequentemente, é recomendável:

  • Configurar cabeçalhos Cache-Control na origem para controlar melhor o TTL no CloudFront e aproveitar o cache do navegador.
  • Armazenar ativos estáticos em cache como objetos imutáveis (por exemplo, Cache-Control: max-age=31536000, immutable) e criar uma versão de seu caminho de URL (por exemplo, /static/app.1be87a.js).
  • Implementar ETAGs em seus objetos para se beneficiar de solicitações HTTP condicionais para sua origem.
  • Encontrar o equilíbrio certo para conteúdo mais dinâmico, como HTML, entre armazenamento em cache (TTL alto) e o quanto a aplicação tolera conteúdo obsoleto (TTL baixo).

Otimize as configurações da chave de cache

As configurações da chave de cache usando Políticas de cache determinam se o CloudFront reutiliza ou não um objeto em cache para uma solicitação HTTP. Uma configuração de chave de cache otimizada resulta em uma relação de 1 para 1 entre chaves de cache exclusivas e objetos exclusivos. Considere uma aplicação Web que serve o mesmo /about.html, independentemente dos parâmetros de consulta anexados (por exemplo, /about.html?utm_medium=social). Se a chave de cache estiver configurada para incluir o parâmetro de consulta utm_medium, o CloudFront armazenará em cache diferentes URLs (por exemplo, /about.html?utm_medium=social e /about.html?utm_medium=email) usando duas chaves de cache distintas. Isso resulta em duas falhas de cache na origem, mesmo que ambas as solicitações sejam exatamente para o mesmo arquivo na origem, o que está abaixo do ideal.

A primeira prática recomendada para otimizar as configurações da chave de cache é incluir exclusivamente na chave de cache atributos de solicitação que variem as respostas de origem. Para conseguir isso, é recomendável:

  • Configurar Comportamentos de cache separados para objetos que exigem configurações de chave de cache diferentes.
  • Se os parâmetros de consulta, cabeçalhos ou cookies variarem nas respostas na origem, inclua apenas aqueles que realmente o façam (por exemplo, cookie user_id em vez de todos os cookies).
  • Usar Políticas de cabeçalho de resposta no CloudFront para gerenciar o CORS, em vez de adicionar cabeçalhos do CORS (por exemplo, Origin, Access-Control-Request-Method, Access-Control-Request-Headers) à chave de cache e gerenciar o CORS no nível da origem.
  • Transferir o controle de acesso ao CloudFront usando URLs assinados, o CloudFront Functions ou o Lambda@Edge, em vez de adicionar cabeçalho de autorização à chave de cache e gerenciá-la no nível da origem.
  • Usar a Política de solicitação de origem no CloudFront para encaminhar atributos HTTP à origem em vez de adicioná-los à chave de cache.

A segunda melhor prática é normalizar um atributo de solicitação antes de adicioná-lo à chave de cache para reduzir a cardinalidade de seus valores possíveis, cada um resultando em uma chave de cache exclusiva. Para conseguir isso, é recomendável:

  • Enviar parâmetros de consulta, quando usados, na mesma ordem e com a mesma formatação
  • Usar cabeçalhos gerados pelo CloudFront, como CloudFront-Is-Mobile-Viewer, para identificar um tipo de dispositivo em vez de adicionar o cabeçalho User-Agent à chave de cache.
  • Usando o CloudFront Functions para aplicar normalizações avançadas, como: reordenar e reduzir maiúsculas e minúsculas de parâmetros de consulta; veicular uma versão diferente de uma página da Web com base na existência de um cookie, em vez de adicionar o cookie à chave de cache; reduzir a variação de respostas que variam de acordo com os países, quando a mesma resposta pode ser enviada para um grupo de países; reduzir ainda mais a cardinalidade da codificação de aceitação quando a compactação é necessária, ou a cardinalidade da codificação de aceitação quando a compactação é necessária, ou a cardinalidade da codificação de aceitação de cardinalidade dos cabeçalhos de detecção de dispositivos do CloudFront quando vários são usados.

Habilitar o Origin Shield

Por padrão, o CloudFront reduz o número de falhas de cache na origem usando duas camadas de cache de alto nível: uma camada no nível PoP e outra camada no nível do Regional Edge Cache (REC). Um PoP do CloudFront está nominalmente associado a um dos mais de 10 RECs globalmente. Quando uma solicitação resulta em uma falha de cache no nível do PoP, o CloudFront verifica o cache do REC associado para atender à solicitação e, somente se não estiver armazenado em cache nesse REC, o CloudFront encaminha a solicitação para a origem. Os RECs são isolados uns dos outros para manter a alta disponibilidade e, consequentemente, não compartilham seus caches. Como resultado, quando objetos populares são solicitados de diferentes locais ao redor do mundo, o CloudFront envia várias solicitações para os mesmos objetos para a origem a partir de vários RECs.

Para reduzir o número de solicitações encaminhadas para a origem, você pode ativar o Origin Shield no CloudFront, que é uma terceira camada de alto nível de armazenamento em cache entre o RECs e sua origem. Em vez de solicitar objetos diretamente da origem, os RECs primeiro tentam atender às solicitações do cache do Origin Shield.

Otimize o comportamento das aplicações

Considere as alterações no nível da aplicação que possam influenciar positivamente a taxa de acerto do cache. Os exemplos incluem:

  • Reduzindo a cardinalidade dos objetos atendidos pela sua aplicação. Quando sua aplicação produz várias representações do mesmo ativo, por exemplo, tamanhos diferentes de uma imagem para caber em telas diferentes, considere limitar o número aos valores possíveis de largura e altura.
  • Aproveitamento do cache do navegador. Isso pode ser feito usando o cabeçalho Cache-Control enviado por sua origem. Você pode diferenciar TTLs entre o CloudFront e o navegador usando as diretivas max-age com s-maxage no cabeçalho Cache-Control ou usando o cabeçalho Cache-Control para o navegador e controlando os TTLs do CloudFront usando políticas de cache.
  • Use solicitações de intervalo de bytes em seus clientes para baixar apenas o que é necessário.

Recursos

Esta página foi útil para você?