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.

Cloud CDN ofrece los dos métodos siguientes para controlar el tiempo que se puede servir un objeto inactivo mientras se envía una solicitud de revalidación al origen:

  • En el origen: puedes especificar la directiva Cache-Control: stale-while-revalidate en el encabezado de respuesta. Cloud CDN respeta esta directiva y sirve el contenido obsoleto durante el número de segundos especificado después de la hora de caducidad de la entrada de la caché. Durante este periodo, Cloud CDN envía de forma asíncrona una solicitud al origen para revalidar y actualizar el contenido.

  • A través de la política: se trata de un ajuste de configuración de Cloud CDN que determina la duración máxima, una vez que ha caducado la respuesta, durante la cual Cloud CDN puede seguir sirviendo una versión obsoleta. Esta opción se configura con la opción serve-while-stale. Si la directiva stale-while-revalidate no está presente en la respuesta, se utiliza este ajuste. Si no se especifica ningún valor, se usa el valor predeterminado 86400s (1 día).

Cloud CDN no admite la directiva stale-if-error. Esta directiva indica a la caché que evite servir contenido obsoleto a menos que la revalidación síncrona con el servidor de origen 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 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 aparecen 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 max-staledel 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 (opción recomendada)
    • 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 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
}