¿Para qué sirve un TTL 0 en CloudFront?


80

Hace algunas semanas Amazon anunció que ha bajado el plazo de caducidad del contenido:

Amazon CloudFront reduce el período mínimo de vencimiento del contenido

Tanto que ahora puede establecer TTL en CloudFront en 0. Entonces, mi pregunta es, ¿por qué podría ser útil tener una distribución de CloudFront con TTL configurado en 0? Para mí, esto significa que no hay almacenamiento en caché, por lo que cada solicitud que llega a CloudFront terminará golpeando el origen.

¿Qué me estoy perdiendo?

Respuestas:


167

Esta nueva característica de Amazon CloudFront es en realidad extremadamente útil para muchos casos de uso, porque encontrar el origen funciona un poco diferente de lo que parece a primera vista y no es necesariamente un problema, al contrario; Si bien esta función ya se lanzó anteriormente, todo viene junto con el lanzamiento reciente de Amazon CloudFront - Soporte para contenido dinámico , por ejemplo, para la pregunta en cuestión:

Tiempo de vida variable (TTL) : en muchos casos, el contenido dinámico no se puede almacenar en caché o no se puede almacenar en caché durante un período de tiempo muy corto, tal vez solo unos segundos. En el pasado, el TTL mínimo de CloudFront era de 60 minutos, ya que todo el contenido se consideraba estático. El nuevo valor TTL mínimo es 0 segundos. Si configura el TTL para un origen en particular en 0, CloudFront aún almacenará en caché el contenido de ese origen. Luego, realizará una solicitud GET con un encabezado If-Modified-Since , lo que le dará al origen la oportunidad de indicar que CloudFront puede continuar usando el contenido en caché si no ha cambiado en el origen . [énfasis mío]

En otras palabras, usar un TTL de 0 significa principalmente que CloudFront delega la autoridad para el control de la caché en el origen, es decir, el servidor de origen decide si o no, y durante cuánto tiempo CloudFront almacena en caché los objetos; tenga en cuenta específicamente que una solicitud GET con un encabezado If-Modified-Since no significa necesariamente que el objeto en sí se recupera del origen, sino que el origen puede (y debe) devolver el código de estado HTTP 304 - No modificado donde corresponda :

Indica que el recurso no se ha modificado desde la última solicitud. [...] El uso de esto ahorra ancho de banda y el reprocesamiento tanto en el servidor como en el cliente, ya que solo los datos del encabezado deben enviarse y recibirse en comparación con la totalidad de la página que el servidor procesa nuevamente y luego se envía nuevamente usando más ancho de banda del servidor y del cliente. [énfasis mío]

Consulte el excelente tutorial de almacenamiento en caché de Mark Nottingham para obtener detalles sobre la mecánica y los beneficios del control de la caché HTTP, una parte realmente importante y efectiva de la arquitectura HTTP.

Comprender cómo funcionan todas estas partes en conjunto puede ser un poco difícil, por lo que la tabla de la sección Especificación del tiempo mínimo que CloudFront almacena en caché los objetos para distribuciones de descarga dentro de Especificar cuánto tiempo permanecen los objetos en una caché de CloudFront Edge (Vencimiento del objeto) intenta resumir los efectos cuando se aplica en el contexto de CloudFront con o sin TTL = 0 específicamente.


3
Esta es una respuesta fantástica. ¡Entendido!
jatorre

3
¡Gracias Steffen! Una respuesta absolutamente completa y bien escrita. ¡AWS debería poner esto en sus DOCS! ¡decir ah!
asherrard

2
Muy bien explicado. Seriamente. +10 por la simplicidad y terminologías utilizadas.
Shivkumar Mallesappa

5

Tenga en cuenta que Amazon no dice "TTL es 0", está diciendo "El TTL mínimo es 0". y eso es muy diferente. La descripción anterior es muy deseable, pero no hay garantía de que Cloudfront realmente lo haga.

En mis experiencias en este momento, puedo ver que una imagen en caché permanece durante unos minutos en el borde mientras mi origen ya lo ha cambiado.

Entonces, creo que decir "El TTL mínimo es 0" probablemente sea más como "Amazon no tiene una intención estricta de mantener esto en un caché", y tal vez "y se volverá a buscar a menudo".

Para aplicaciones como CMS, donde el usuario de la web publica contenido nuevo, creo que TTL-0 todavía no es suficiente. Aún debe invocar invalidaciones del CMS o emplear diferentes rutas para diferentes números de versión.


2

CloudFront se puede utilizar en combinación con el administrador de certificados para agregar compatibilidad con HTTPS a los sitios web de S3. Es posible que desee esto, pero cero almacenamiento en caché.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.