Esta página fornece informações sobre como disponibilizar conteúdo desatualizado e expirado com o Cloud CDN. A disponibilização de conteúdo desatualizado permite que o cache global do Google continue disponibilizar o conteúdo quando o servidor de origem estiver inacessível ou retornando erros para o Cloud CDN.
Os motivos para fazer isso são os seguintes:
- Você prefere disponibilizar conteúdo desatualizado para os usuários em vez de retornar erros aos usuários.
- A disponibilização de conteúdo desatualizado evita latência quando o cache recebe uma solicitação de conteúdo que acabou de expirar. Em vez de ter que esperar por uma revalidação síncrona para o back-end, o cache disponibiliza o conteúdo desatualizado que acabou de expirar enquanto aciona uma revalidação separada.
Para ativar esse comportamento, o back-end pode especificar a diretiva
stale-while-revalidate no cabeçalho Cache-Control de resposta. O Cloud CDN
em seguida disponibilizará esse conteúdo pelo cache (se disponível) pelo número especificado de segundos
após o prazo de validade da entrada no cache. De maneira assíncrona, o Cloud CDN
revalidará o conteúdo com a origem.
O Cloud CDN permitirá isso em seu favor com a
configuração cdnPolicy.serveWhileStale. Essa configuração determina quanto tempo, após a expiração da
resposta, o Cloud CDN pode continuar a disponibilizar uma versão
desatualizada. Se isso não for especificado na resposta, será 86400s (1 dia).
O Cloud CDN não é compatível com a diretiva stale-if-error. Essa
diretiva instrui o cache a evitar a disponibilização de conteúdo desatualizado, a menos que a revalidação
síncrona com o back-end tenha falhado com códigos de status de erro específicos.
Os valores padrão, mínimo e máximo são os seguintes:
- Padrão: 86.400 segundos (um dia)
- Mínimo: 0 segundo (desativa o recurso)
- Máximo: 604.800 segundos (uma semana)
O conteúdo desatualizado é disponibilizado até o limite especificado após o prazo de validade da entrada
no cache, que é definido pelo cabeçalhos
max-age, s-maxage e Expires. Para mais informações, consulte Prazos de validade e solicitações de
validação.
Se um armazenamento em cache de borda do Cloud CDN não tiver uma cópia armazenada em cache do objeto para disponibilizar conteúdo desatualizado ou se o objeto tiver atingido o TTL máximo desatualizado, o Cloud CDN revalidará o conteúdo de maneira síncrona com a origem. Se a origem retornar um erro naquele momento, o Cloud CDN retornará o erro de origem.
Geração de registros e user agent
As solicitações assíncronas feitas pelo Cloud CDN aparecem para o servidor
de origem exatamente como as solicitações de revalidação normais que ocorrem quando não é disponibilizado conteúdo
desatualizado. A exceção é que elas são marcadas com um cabeçalho User-Agent
contendo Cloud-CDN-Google.
As solicitações assíncronas também são registradas separadamente no Cloud Logging. Portanto, uma solicitação
de usuário desatualizada gera duas entradas de registro: a primeira para o
conteúdo realmente disponibilizado ao usuário e a segunda para a solicitação de revalidação
à origem. Assim como as revalidações síncronas, o Cloud CDN pode enviar uma
solicitação condicional em algumas circunstâncias
ou apenas solicitar novamente o conteúdo de forma não condicional. Em ambos os casos, o código de
resposta registrado no Cloud Logging corresponde à solicitação original para o
Cloud CDN. Por exemplo, um 200 OK para uma solicitação não condicional ou um
304 Not Modified se a resposta original do usuário for condicional.
Diretiva de solicitação max-stale do cliente
Os clientes podem solicitar um tempo de serviço desatualizado mais curto ao especificar uma diretiva de
controle de cache max-stale. Se especificado, essa diretiva controla o tempo de
inatividade que o cliente tolera.
Se o conteúdo armazenado em cache for mais antigo do que o valor de max-stale do cliente,
o Cloud CDN revalidará o conteúdo antes de disponibilizá-lo.
O cliente não pode solicitar um valor de max-stale maior que o valor
configurado com a opção de configuração serve-while-stale e a
diretiva de controle de cache stale-while-revalidate da origem.
Antes de começar
Leia sobre modos de cache e conteúdo estático.
Verifique se o Cloud CDN está ativado. Para instruções, consulte Como usar o Cloud CDN.
Se necessário, atualize para a versão mais recente da CLI do Google Cloud:
gcloud components update
Exibir conteúdo desatualizado durante a revalidação
Console
- No console do Google Cloud , acesse a página Balanceamento de carga.
- Clique no nome do balanceador de carga de aplicativo externo.
- Clique em Editar.
- Em Configuração de back-end, selecione um back-end e clique em Editar.
- Verifique se a opção Ativar o Cloud CDN está selecionada.
- Na parte inferior da janela, clique em Configurações avançadas.
- Em Opções adicionais do CDN, selecione uma das seguintes opções
para Disponibilizar durante a inatividade:
- 1 minuto
- 5 minutos
- 10 minutos
- 30 minutos
- 1 dia (recomendado)
- 7 dias
- Clique em Atualizar.
- Clique em Atualizar novamente.
gcloud
Para buckets de back-end, use o comando gcloud compute backend-buckets
create ou
o comando gcloud compute backend-buckets
update
com a sinalização --serve-while-stale.
Para serviços de back-end, use o comando gcloud compute backend-services
create ou
o comando gcloud compute backend-services
update
com a sinalização --serve-while-stale.
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
--serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
--serve-while-stale=SECONDS
Exemplo:
gcloud compute backend-services update my-backend-service
--serve-while-stale=180s
API
Para buckets de back-end, use a chamada de API Method: backendBuckets.insert ou Method: backendBuckets.update.
Para serviços de back-end, use a chamada de API Method: backendServices.insert ou Method: backendServices.update.
Use uma das seguintes chamadas de API:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
Adicione o seguinte snippet ao corpo da solicitação JSON:
"cdnPolicy": {
"serveWhileStale": SECONDS
}
Desativar a disponibilização de conteúdo desatualizado
Console
- No console do Google Cloud , acesse a página Balanceamento de carga.
- Clique no nome do balanceador de carga de aplicativo externo.
- Clique em Editar.
- Em Configuração de back-end, selecione um back-end e clique em Editar.
- Certifique-se de que Ativar o Cloud CDN não esteja selecionado.
- Na parte inferior da janela, clique em Configurações avançadas.
- Em Opções adicionais do CDN > Disponibilizar durante a inatividade, selecione Desativar a veiculação durante a inatividade .
- Clique em Atualizar.
- Clique em Atualizar novamente.
gcloud
Para buckets de back-end, use o comando gcloud compute backend-buckets
create ou
gcloud compute backend-buckets
update com o valor da sinalização --serve-while-stale definido como 0.
Para serviços de back-end, use o comando gcloud compute backend-services
create ou
o comando gcloud compute backend-services
update
com o valor da sinalização --serve-while-stale definido como 0.
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
--serve-while-stale=0
API
Para buckets de back-end, use a chamada de API Method: backendBuckets.insert ou Method: backendBuckets.update.
Para serviços de back-end, use a chamada de API Method: backendServices.insert ou Method: backendServices.update.
Use uma das seguintes chamadas de API:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
Adicione o seguinte snippet ao corpo da solicitação JSON:
"cdnPolicy": {
"serveWhileStale": 0
}