Entrega contenido inactivo

En esta página, se brinda información sobre cómo entregar contenido inactivo y vencido con Cloud CDN. La entrega de contenido inactivo permite que la caché global de Google continúe entregando contenido cuando el servidor de origen es inaccesible o devuelva errores a Cloud CDN.

Estos son algunos de los motivos por los que deberías hacerlo:

  • Prefieres entregar contenido inactivo a los usuarios en lugar de devolverles errores.
  • La entrega de contenido inactivo evita la latencia cuando la caché recibe una solicitud de contenido que acaba de vencer. En lugar de tener que esperar una revalidación síncrona para el backend, la caché entrega el contenido inactivo que acaba de vencer, mientras activa una revalidación independiente.

Cloud CDN ofrece los siguientes dos métodos para controlar durante cuánto tiempo se puede entregar 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 entrega el contenido inactivo durante la cantidad especificada de segundos después de la hora de vencimiento de la entrada de caché. Durante este período, 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: Es un parámetro de configuración de Cloud CDN que indica una duración máxima, después de que la respuesta haya vencido, durante la cual Cloud CDN puede seguir entregando una versión inactiva. Esto se configura con la opción serve-while-stale. Si la directiva stale-while-revalidate no está presente en la respuesta, se usa este parámetro de configuración. Si no se especifica un valor, se usa el valor predeterminado, 86400s (1 día).

Cloud CDN no admite la directiva stale-if-error. Esta directiva le indica a la caché que evite entregar contenido inactivo, a menos que la revalidación síncrona con el servidor de origen haya fallado con códigos de estado de error particulares.

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

  • Predeterminado: 86,400 segundos (un día)
  • Mínimo: 0 segundos (se inhabilita la función)
  • Máximo: 604,800 segundos (una semana)

El contenido inactivo se entrega hasta el límite especificado después del vencimiento de la entrada de caché, que se define con los encabezados max-age, s-maxage o Expires. Para obtener más información, consulta Fechas de vencimiento y solicitudes de validación.

Si una caché perimetral de Cloud CDN no tiene una copia almacenada en caché del objeto para entregar contenido inactivo o si el objeto alcanzó el TTL de inactividad máximo, Cloud CDN vuelve a validar de forma síncrona el contenido con el origen. Si el origen devuelve un error en ese momento, Cloud CDN devuelve el error de origen.

Logging y usuario-agente

Las solicitudes asíncronas que realiza Cloud CDN aparecen para el servidor de origen exactamente como las solicitudes de revalidación normales que se producen cuando no se entrega contenido inactivo. La excepción es que están etiquetadas 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 entrega inactiva genera dos entradas de registro: la primera para el contenido que en realidad se entrega 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 solo volver a solicitar el contenido sin excepciones. En cualquier caso, el código de respuesta registrado en Cloud Logging corresponde a la solicitud original a Cloud CDN; por ejemplo, 200 OK para una solicitud sin excepciones o 304 Not Modified si la respuesta original del usuario fue condicional.

Directiva de solicitud del cliente max-stale

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

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

El cliente no puede solicitar un valor max-stale mayor que el configurado con la opción serve-while-stale y la directiva de control de caché stale-while-revalidate desde el origen.

Antes de comenzar

Entrega contenido inactivo durante la revalidación

Consola

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

    Ir a Balanceo de cargas

  2. Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y, luego, 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 Configuración avanzada.
  7. En Opciones de CDN adicionales, selecciona una de las siguientes opciones para Entregar durante el estado de inactividad:
    • 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

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

Para los servicios de backend, usa el comando gcloud compute backend-services create o 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 buckets de backend, usa la llamada a la API Method: backendBuckets.insert o Method: backendBuckets.update.

Para 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

Agrega el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

Inhabilita la entrega de contenido inactivo

Consola

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

    Ir a Balanceo de cargas

  2. Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y, luego, 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 Configuración avanzada.
  7. En Opciones de CDN adicionales > Entregar durante el estado de inactividad, selecciona Inhabilita la entrega mientras el dispositivo está inactivo.
  8. Haz clic en Actualizar.
  9. Vuelve a hacer clic en Actualizar.

gcloud

Para buckets de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con el valor de marca --serve-while-stale establecido en 0.

Para los servicios de backend, usa el comando gcloud compute backend-services create o gcloud compute backend-services update con el valor de la marca --serve-while-stale establecido en 0.

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

API

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

Para 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

Agrega el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "serveWhileStale": 0
}