【发布时间】:2012-09-28 18:42:34
【问题描述】:
我似乎在文档中看不到明显的答案。
当我在 S3 上更新文件并启用 CloudFront 时,S3 是否会向 CloudFront 发送失效信号?还是更新文件后需要自己发送?
【问题讨论】:
标签: amazon-s3 amazon amazon-cloudfront
我似乎在文档中看不到明显的答案。
当我在 S3 上更新文件并启用 CloudFront 时,S3 是否会向 CloudFront 发送失效信号?还是更新文件后需要自己发送?
【问题讨论】:
标签: amazon-s3 amazon amazon-cloudfront
S3 不会向 CloudFront 发送任何失效信息。默认情况下,CloudFront 将在从源检索数据时设置的缓存控制标头指定的最长时间内保存信息(如果愿意,它可能会提前从缓存中删除项目)。
您可以通过创建失效批处理来使缓存条目失效。这将花费您的钱:每月的第 1000 个请求是免费的,但除此之外,每个请求的费用为 0.005 美元 - 如果您每天使 1000 个文件无效,则每月将花费您 150 美元(除非您可以使用通配符功能)。您当然可以使用 Amazon Lambda 函数触发此事件以响应 s3 事件。
另一种方法是在对象更改时使用不同的路径(实际上是分代缓存键)。同样,您可以将查询参数附加到 url 并在您希望 cloudfront 获取新副本时更改该查询参数(为此,您需要告诉 CloudFront 使用查询字符串参数 - 默认情况下它会忽略它们)。
如果您只进行不频繁(但较大)的更改,另一种方法是简单地创建一个新的云端分发。
【讨论】:
据我所知,所有的 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)中,缓存失效是可能的(手动过程)并且是免费的,但我们很少这样做,因为我们会相应地对资产进行版本控制。
【讨论】:
Cache-Control 标头。