Publicar contenido obsoleto

En esta página se proporciona información sobre cómo servir contenido obsoleto y caducado con Cloud CDN. Servir contenido obsoleto permite que la caché global de Google siga sirviendo contenido cuando no se pueda acceder a tu servidor de origen o cuando devuelva errores a Cloud CDN.

Estos son los motivos para hacerlo:

  • Prefieres servir contenido obsoleto a los usuarios en lugar de devolver errores.
  • Servir contenido obsoleto evita la latencia cuando la caché recibe una solicitud de contenido que acaba de caducar. En lugar de tener que esperar a que se produzca una reválida síncrona en el backend, la caché sirve el contenido obsoleto que acaba de caducar y, al mismo tiempo, activa una reválida independiente.

Para habilitar este comportamiento, tu backend puede especificar la directiva stale-while-revalidate en el encabezado Cache-Control de la respuesta. Cloud CDN servirá ese contenido desde la caché (si está disponible) durante el número de segundos especificado después de la hora de vencimiento de la entrada de caché. De forma asíncrona, Cloud CDN volverá a validar el contenido con el origen.

Cloud CDN lo habilita en tu nombre con el ajuste cdnPolicy.serveWhileStale. Este ajuste determina durante cuánto tiempo puede seguir sirviendo Cloud CDN una versión obsoleta después de que haya caducado la respuesta. Si no se especifica lo contrario en la respuesta, el valor predeterminado es 86400s (1 día).

Cloud CDN no admite la directiva stale-if-error. Esta directiva indica a la caché que no sirva contenido obsoleto a menos que la revalidación síncrona con el backend haya fallado con códigos de estado de error concretos.

Los valores predeterminados, mínimos y máximos son los siguientes:

  • Valor predeterminado: 86.400 segundos (un día)
  • Mínimo: 0 segundos (inhabilita la función)
  • Máximo: 604.800 segundos (una semana)

El contenido obsoleto se sirve hasta el límite especificado después de la hora de caducidad de la entrada de caché, que se define mediante los encabezados max-age, s-maxage o Expires. Para obtener más información, consulta Tiempos de vencimiento y solicitudes de validación.

Si una caché perimetral de Cloud CDN no tiene una copia en caché del objeto para servir contenido obsoleto o si el objeto ha alcanzado el TTL máximo de contenido obsoleto, Cloud CDN vuelve a validar el contenido de forma síncrona con el origen. Si el origen devuelve un error en ese momento, Cloud CDN devuelve el error del origen.

Registro y User-Agent

Las solicitudes asíncronas que realiza Cloud CDN se muestran en tu servidor de origen exactamente igual que las solicitudes de revalidación normales que se producen cuando no se sirve contenido obsoleto. La excepción es que se etiquetan con un encabezado User-Agent que contiene Cloud-CDN-Google.

Las solicitudes asíncronas también se registran por separado en Cloud Logging, por lo que una solicitud de usuario que se sirve obsoleta genera dos entradas de registro: la primera para el contenido que se ha servido al usuario y la segunda para la solicitud de revalidación al origen. Al igual que las revalidaciones síncronas, Cloud CDN puede enviar una solicitud condicional en algunas circunstancias o simplemente volver a solicitar el contenido de forma incondicional. En ambos casos, el código de respuesta registrado en Cloud Logging corresponde a la solicitud original a Cloud CDN. Por ejemplo, un 200 OK para una solicitud incondicional o un 304 Not Modified si la respuesta original del usuario era condicional.

Directiva de solicitud de max-stale del cliente

Los clientes pueden solicitar un tiempo de servicio obsoleto más corto especificando una directiva max-stale cache-control. Si se especifica, esta directiva controla la cantidad de obsolescencia que tolera el cliente.

Si el contenido almacenado en caché está más obsoleto que el valor max-stale del cliente, Cloud CDN vuelve a validar el contenido antes de servirlo.

El cliente no puede solicitar un valor de max-stale superior al valor configurado con la opción de configuración serve-while-stale y la directiva stale-while-revalidate cache-control del origen.

Antes de empezar

  • Consulta información sobre los modos de caché y el contenido estático.

  • Asegúrate de que Cloud CDN esté habilitado. Para obtener instrucciones, consulta el artículo Usar Cloud CDN.

  • Si es necesario, actualiza a la versión más reciente de la CLI de Google Cloud:

    gcloud components update
    

Publicar contenido obsoleto mientras se vuelve a validar

Consola

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en el nombre de su balanceador de carga de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y haz clic en Editar.
  5. Asegúrate de que la opción Habilitar Cloud CDN esté seleccionada.
  6. En la parte inferior de la ventana, haz clic en Configuraciones avanzadas.
  7. En Otras opciones de CDN, seleccione una de las siguientes opciones de Servir mientras está obsoleto:
    • 1 minuto
    • 5 minutos
    • 10 minutos
    • 30 minutos
    • 1 día (recomendado)
    • 7 días
  8. Haz clic en Actualizar.
  9. Vuelve a hacer clic en Actualizar.

gcloud

En el caso de los cubos de backend, usa el comando gcloud compute backend-buckets create o el comando gcloud compute backend-buckets update con la marca --serve-while-stale.

En el caso de los servicios de backend, usa el comando gcloud compute backend-services create o el comando gcloud compute backend-services update con la marca --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

Por ejemplo:

gcloud compute backend-services update my-backend-service
    --serve-while-stale=180s

API

En el caso de los segmentos de backend, usa la llamada a la API Method: backendBuckets.insert o Method: backendBuckets.update.

En el caso de los servicios de backend, usa la llamada a la API Method: backendServices.insert o Method: backendServices.update.

Usa una de las siguientes llamadas a la 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

Añade el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

Inhabilitar la publicación de contenido obsoleto

Consola

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en el nombre de su balanceador de carga de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y haz clic en Editar.
  5. Asegúrate de que la opción Habilitar Cloud CDN no esté seleccionada.
  6. En la parte inferior de la ventana, haz clic en Configuraciones avanzadas.
  7. En Otras opciones de CDN > Servir contenido obsoleto, selecciona Inhabilitar la opción de servir contenido obsoleto.
  8. Haz clic en Actualizar.
  9. Vuelve a hacer clic en Actualizar.

gcloud

En el caso de los segmentos de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con el valor de la marca --serve-while-stale definido como 0.

En el caso de los servicios de backend, usa el comando gcloud compute backend-services create o el comando gcloud compute backend-services update con el valor de la marca --serve-while-stale definido como 0.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --serve-while-stale=0

API

En el caso de los segmentos de backend, usa la llamada a la API Method: backendBuckets.insert o Method: backendBuckets.update.

En el caso de los servicios de backend, usa la llamada a la API Method: backendServices.insert o Method: backendServices.update.

Usa una de las siguientes llamadas a la 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

Añade el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "serveWhileStale": 0
}