web-dev-qa-db-fra.com

À quoi sert un TTL 0 dans CloudFront utile?

Il y a quelques semaines, Amazon a annoncé avoir réduit la période d'expiration du contenu:

Amazon CloudFront réduit la période d'expiration minimale du conten

Tellement que vous pouvez réellement définir maintenant TTL dans CloudFront à 0. Donc ma question est, pourquoi pourrait-il être utile d'avoir une distribution CloudFront avec TTL set à 0. Pour moi, cela signifie pas de mise en cache du tout, donc chaque demande qui parvient à CloudFront finira par atteindre l'origine.

Qu'est-ce que je rate?

74
jatorre

Cette nouvelle fonctionnalité de Amazon CloudFront est en fait extrêmement utile pour de nombreux cas d'utilisation, car frapper l'Origin fonctionne un peu différemment qu'il n'y paraît à première vue et n'est pas nécessairement un problème, au contraire; bien que cette fonctionnalité ait déjà été publiée plus tôt, elle s'accompagne de la version récente de Amazon CloudFront - Support for Dynamic Content , par exemple pour la question posée:

Durée de vie variable (TTL) - Dans de nombreux cas, le contenu dynamique ne peut pas être mis en cache ou peut être mis en cache pendant une très courte période de temps, peut-être juste quelques secondes. Dans le passé, le minimum de CloudFront TTL était de 60 minutes car tout le contenu était considéré comme statique. Le nouveau minimum TTL valeur est de 0 seconde. Si vous définissez TTL pour une origine particulière sur 0, CloudFront mettra toujours en cache le contenu de cette origine. Il fera ensuite une demande GET avec un en-tête If-Modified-Since , donnant ainsi à l'Origin une chance de signaler que CloudFront peut continuer à utiliser le contenu mis en cache s'il n'a pas changé à l'origine . [le mien est souligné]

En d'autres termes, l'utilisation d'un TTL de 0 signifie principalement que CloudFront délègue l'autorité de contrôle du cache à l'origine, c'est-à-dire que le serveur d'origine décide si oui ou non, et si pendant combien de temps CloudFront met en cache le Objets; veuillez noter spécifiquement qu'une demande GET avec un en-tête If-Modified-Since ne signifie pas nécessairement que l'objet lui-même est récupéré de l'origine, mais que l'origine peut (et devrait) retourner le code d'état HTTP 304 - Non modifié le cas échéant:

Indique que la ressource n'a pas été modifiée depuis la dernière demande. [...] Son utilisation permet d'économiser de la bande passante et du retraitement sur le serveur et le client, car seules les données d'en-tête doivent être envoyées et reçues par rapport à la intégralité de la page en cours de retraitement par le serveur, puis renvoyée en utilisant plus de bande passante du serveur et du client. [c'est moi qui souligne]

Voir l'excellent Caching Tutorial de Mark Nottingham pour plus de détails sur les mécanismes et les avantages du contrôle du cache HTTP, une partie vraiment importante et efficace de l'architecture HTTP.

Comprendre comment toutes ces parties fonctionnent ensemble peut être un peu difficile, en conséquence, le tableau de la section Spécification de la durée minimale pendant laquelle CloudFront met en cache les objets pour les distributions de téléchargement dans Spécification de la durée de conservation des objets un cache Edge CloudFront (expiration d'objet) tente de résumer les effets lorsqu'il est appliqué dans le contexte de CloudFront avec ou sans TTL = 0 spécifiquement.

149
Steffen Opel

Notez qu'Amazon ne dit pas "TTL est 0", il dit "Minimum TTL est 0". Et c'est très différent. La description ci-dessus est très souhaitable mais il n'y a aucune garantie que Cloudfront le fait réellement.

Dans mes expériences en ce moment, je peux voir une image en cache rester pendant quelques minutes dans Edge alors que mon origine a déjà changé.

Donc, je pense que dire "Minimum TTL est 0" est probablement plus comme "Amazon n'a pas l'intention stricte de garder cela dans un cache", et peut-être "et il se rechargera souvent").

Pour les applications comme les CMS, où l'internaute publie du nouveau contenu, je pense que TTL-0 n'est toujours pas suffisant. Vous devez toujours invoquer des invalidations à partir du CMS ou utiliser des chemins différents pour différents numéros de version.

3
polx

CloudFront peut être utilisé en combinaison avec le gestionnaire de certificats pour ajouter la prise en charge HTTPS aux sites Web S3. Vous voudrez peut-être cela, mais aucune mise en cache.