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-revalidateen 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 directivastale-while-revalidateno 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
Lee sobre los modos de almacenamiento en caché y el contenido estático.
Asegúrate de que Cloud CDN esté habilitado. Para obtener instrucciones, consulta Usa Cloud CDN.
Si es necesario, actualiza a la última versión de Google Cloud CLI:
gcloud components update
Entrega contenido inactivo durante la revalidación
Consola
- En la consola de Google Cloud , ve a la página Balanceo de cargas.
- Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
- Haz clic en Editar.
- En Configuración de backend, selecciona un backend y, luego, haz clic en Editar.
- Asegúrate de que la opción Habilitar Cloud CDN esté seleccionada.
- En la parte inferior de la ventana, haz clic en Configuración avanzada.
- 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
- Haz clic en Actualizar.
- 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
- En la consola de Google Cloud , ve a la página Balanceo de cargas.
- Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
- Haz clic en Editar.
- En Configuración de backend, selecciona un backend y, luego, haz clic en Editar.
- Asegúrate de que la opción Habilitar Cloud CDN no esté seleccionada.
- En la parte inferior de la ventana, haz clic en Configuración avanzada.
- En Opciones de CDN adicionales > Entregar durante el estado de inactividad, selecciona Inhabilita la entrega mientras el dispositivo está inactivo.
- Haz clic en Actualizar.
- 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
}