我是 CDN 新手,正在尝试使用 CloudFront。我已经设置好了一切,一切似乎都运行良好。我可以在页面上创建静态图像并通过我的 CloudFront 发行版访问它。我使用的是自定义源(即不是 s3 存储桶)。
不过,我担心从性能角度来看,我的情况可能会更糟。我有一个测试页面,在使用和不使用 CDN 的情况下,加载了大约 20 张相同的图像。查看 Firebug 中的网络面板,第一次加载此页面时,直接从原始服务器加载的图像加载速度要快得多。在后续页面加载中,CDN 的优势变得显而易见——在 3-5 次刷新后,CDN 的表现优于原始服务器。
因此,我可以看到,在我们网站上一个一直受到访问的热门页面上,这将带来好处。我应该期待好处,因为我在西雅图(离亚马逊不远),我的服务器在加州。
问题是,如果我离开页面几分钟然后重新加载,一切又回到原点,CloudFront 比原始服务器更糟糕。这是预料之中的吗?CDN“缓存”中的内容会这么快丢失吗?
我的设置中是否有可能损害了性能?或者 CDN 是否只会对目前平均每隔几秒访问一次的内容产生净积极影响?
(从 AWS 论坛交叉发布,因为我已经被 SO 的周转时间宠坏了)
更新:
如果您对 CloudFront 性能有疑问,下面有两个不错的答案值得一看。不过,我最近发现没有提到针对我的具体问题的一个解释。由于疏忽,我将 TTL 保留为 5 分钟。由于我还使用了自定义源,因此需要额外往返权威名称服务器以将其解析为实际的 Amazon CloudFront 域。现在 TTL 设置已恢复为 12 小时,似乎长时间加载的情况很少发生。
答案1
Cloudfront 在回复中设置了一个标头,例如“X-Cache:来自 cloudfront 的命中”。据推测,如果您的文件不在您所指向的节点的缓存中,它会说“未命中”。
您的文件可能不够流行,因此即使 24 小时还未过去,它们也会被更受欢迎的内容从 CloudFront 的缓存中弹出。IO 过载或特定 CloudFront 节点内部的某些其他情况也可能导致访问缓慢。与 Akamai 或 LimeLight 相比,Cloudfront 非常便宜。最坏情况下的性能和保证的服务水平是使用更昂贵播放器的两个原因。
我会做一个测试,在生产中只将一个流行文件放入云端,然后使用定期测试来查看 CloudFront 是否指示命中(也记录总交易时间)。
答案2
这是可能的。但是,CDN 的一个目的是可扩展性。您可以预期,无论您一次处理 100 次访问还是一次处理 100 万次访问,CDN 都能发挥相同的性能。
就您的设置而言,我无法根据您提供的信息得知任何信息,但我认为上述观点正是 CDN 如此有价值的原因。如果您正在创建一个流量不大的网站,那么最好不要使用 CDN。但是,如果您的流量很大,CDN 将减轻您的 Web 服务器的负载,因为您将媒体的服务转移到另一台服务器。最后一点,好的 CDN(亚马逊的 CDN 就是)将使用其广泛的网络从最靠近请求者的位置提供您的内容。在许多情况下,他们可以从请求者的 ISP 提供内容,这意味着加载时间非常快。
希望有所帮助。
答案3
我理解错了吗?缓存控制不是管理边缘位置从 S3 重新加载内容之前内容在边缘位置的存活时间吗?所以无论您使用 S3 还是您自己的来源,它们肯定与您的情况相关吗?不是吗?
这亚马逊常见问题解答说:“问:Amazon CloudFront 会在边缘站点保留我的文件多长时间?默认情况下,如果未设置缓存控制标头,则每个边缘站点在收到请求时,都会在上次检查源文件更改后超过 24 小时后检查文件的更新版本。这称为“有效期”。通过在源文件中设置缓存控制标头,您可以将此有效期设置为最短 1 小时或任意长。Amazon CloudFront 使用这些缓存控制标头来确定需要多久检查一次源文件以获取该文件的更新版本。如果您的文件不经常更改,最佳做法是设置较长的有效期并实施版本控制系统来管理文件更新。”
[我认为最后一句话的意思是“如果你将其设置为 50 年然后又想更改文件,那就太不走运了”。]
使用 CDN 的主要目的难道不是托管静态内容吗?如果是这样,使用比一天长得多的 TTL 会有帮助吗?对于几乎所有内容(所有图像和 CSS),我使用 Cache-Control =“max-age=604800, public, must-revalidate”(即 1 周)。根据我的经验,如果我将新版本上传到 S3,文件肯定需要长达一周的时间才能更改。
希望这能有所帮助。[顺便说一句:关于您更笼统的观点,我也想知道 CDN 是否像您想象的那样有助于提高性能。我即将把整个网站(包括 CDN)移到超快的专用服务器上,并进行一些测试以找出答案。]
答案4
使用 CDN 的原因是如果你期望
- 静态内容 - 不频繁或受控更新
- 放眼全球
- 经常访问
我们的网站访问频率和您的情况一样低,但我们设置了监控服务,可向世界各地的网站发出请求。因此,它可保持 CDN 缓存处于热状态。我还想分享我们的案例,这是一个简单的案例,可展示 CDN 功能。
此外,我们预计每月收费 2.2 美元,而 godaddy 服务器收费 7 美元(无法处理激增)