2012-05-16 1 views
57

Il y a quelques semaines Amazon a annoncé qu'ils ont réduit la période d'expiration du contenu:À quoi sert un TTL 0 dans CloudFront?

Amazon CloudFront Lowers Minimum Content Expiration Period

Tant et si bien que vous pouvez réellement définir maintenant TTL CloudFront à 0. Donc, ma question est, pourquoi pourrait-il être utile avoir une distribution CloudFront avec TTL mis à 0. Pour moi, cela signifie pas de mise en cache du tout, de sorte que chaque requête qui arrive à CloudFront finira par frapper l'origine.

Qu'est-ce qui me manque?

Répondre

117

Cette nouvelle fonctionnalité de Amazon CloudFront est en fait extrêmement utile pour de nombreux cas d'utilisation, parce que frapper l'origine fonctionne un peu différent 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, tout cela vient avec la publication récente de Amazon CloudFront - Support for Dynamic Content, par ex. pour la question à:

Variable Time-To-Live (TTL) - Dans de nombreux cas, le contenu dynamique est soit pas cacheable ou cacheable pendant une période de temps très court, peut-être que quelques-uns secondes. Dans le passé, la durée de vie minimale de CloudFront était de 60 minutes, car tout le contenu était considéré comme statique. La nouvelle valeur minimale TTL est 0 seconde. Si vous définissez le TTL pour une origine particulière sur 0, CloudFront mettra toujours en cache le contenu de cette origine. Il sera alors faire une requête GET avec un If-Modified-Since, donnant ainsi l'origine une chance de signal CloudFront peut continuer à utiliser le contenu mis en cache si elle n'a pas changé à l'origine. [Souligné]

En d'autres termes, en utilisant un TTL de 0 principalement des moyens, que les délégués de CloudFront l'autorité de contrôle du cache à l'origine, à savoir le serveur d'origine décide si oui ou non, et si pour combien de temps CloudFront met en cache les objets. S'il vous plaît noter en particulier, qu'une requête GET avec un If-Modified-Since ne signifie pas nécessairement que l'objet lui-même est récupéré à partir de l'origine, et non l'origine peut (et doit) retourner le HTTP status code 304 - Not Modified le cas échéant:

Indique que la ressource n'a pas été modifiée depuis la dernière demande. [...] L'utilisation de cette bande passante permet d'économiser et de retraitement sur le serveur et client, seules les données d'en-tête doivent être envoyés et reçus en par rapport à l'ensemble de la page étant re-traitée par le serveur , puis envoyé à nouveau en utilisant plus de bande passante du serveur et du client. [Souligné]

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

Comprendre comment toutes ces parties travaillent ensemble peut être un peu difficile, en effet, par conséquent la table dans la section Spécification du temps minimum CloudFront Caches objets pour téléchargement Distributions dans Specifying How Long Objects Stay in a CloudFront Edge Cache (Object Expiration) tente de résumer les effets lorsqu'il est appliqué dans le contexte de CloudFront avec ou sans TTL = 0 spécifiquement.

+2

C'est une réponse fantastique. Je l'ai! – jatorre

+2

Merci Steffen! Une réponse absolument complète et bien écrite. AWS devrait mettre cela dans leurs DOCS !!! Ha! – asherrard

+1

Très bien expliqué. Sérieusement. +10 pour la simplicité et les terminologies utilisées. –

3

Notez que Amazon ne dit pas "TTL is 0", il dit "Minimum TTL is 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 fasse réellement. Dans mes expériences en ce moment, je peux voir une image en cache rester pendant quelques minutes dans le bord alors que mon origine a déjà changé. Donc, je pense que dire "Minimum TTL is 0" est probablement plus comme "Amazon n'a pas l'intention stricte de garder cela dans un cache", et peut-être "et il se refera souvent".

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