Amazon S3是否向CloudFront发送失效信号?

时间:2012-10-08 13:43:23

标签: amazon-s3 amazon amazon-cloudfront

我似乎无法在文档中看到明显的答案。

当我在S3上更新文件并且启用了CloudFront时,S3是否会向CloudFront发送失效信号?或者我需要在更新文件后自己发送它?

2 个答案:

答案 0 :(得分:22)

S3不会向CloudFront发送任何无效信息。默认情况下,CloudFront将保留信息,该信息最长时间为从原始数据中检索数据时设置的高速缓存控件标头所指定的最大时间(如果感觉相同,它可能会先从其高速缓存中删除项目)。

您可以通过创建无效批处理来使缓存条目无效。这将花费您的资金:每月的前1000个请求是免费的,但除此之外每个请求的成本为0.005美元 - 如果您每天使1000个文件无效,则每月花费150美元(除非您可以使用通配符功能)。您当然可以使用Amazon Lambda函数触发此事件以响应s3事件。

另一种方法是在对象更改时使用不同的路径(实际上是分代缓存键)。类似地,您可以将一个查询参数附加到网址,并在希望cloudfront获取新副本时更改该查询参数(为此,您需要告诉CloudFront使用查询字符串参数 - 默认情况下它会忽略它们)。

另一种方法是,如果您只进行不常见(但很大)的更改,只需创建一个新的云端分发。

答案 1 :(得分:3)

据我所知,所有CDN都是这样工作的。

这就是为什么你通常使用像foo-x.y.z.ext之类的东西在CDN上版本资产。我不会使用foo.ext?x.y.z,因为某些浏览器和代理从未使用?QUERY_STRING缓存资产。

一般情况下,您可能需要检查一下: https://developers.google.com/speed/docs/best-practices/caching

它包含许多最佳实践,并详细说明了该做什么以及如何运作。

关于S3和Cloudfront,我对高速缓存失效并不是很熟悉,但是Frederick Cheung所提到的都是正确的。

某些提供商还允许您直接清除缓存,但由于CDN的性质,这些更改几乎从不是即时的。另一种方法是设置较小的TTL(到期标头),以便更频繁地刷新资产。但我认为这也违背了CDN的目的。

在我们的案例中(Edgecast),缓存失效是可能的(手动过程)并且是免费的,但我们很少这样做,因为我们相应地对资产进行了版本化。