我正在为一个广泛分布的网络部署 CloudFront 发行版。我使用自己的服务器作为源,并将缓存过期时间配置为自定义值(例如 24 小时)。对于产生高流量的国家/地区使用的边缘以及请求更频繁的资源,一切都运行顺畅,但我认为对于来自流量较低的国家/地区的(大部分)请求而言,情况并非如此。
由于网络拥有数万个资源,并且考虑到流量的有机(长尾)特性,其中大多数资源每天每个边缘仅被访问 3-4 次。在这种情况下,如果我的理解正确的话,第一个请求的性能很差(它是从源获取的),而其余 2-3 个请求则受益于云端。在这种情况下,大约 30% 的流量未使用任何 CDN 缓存。
有没有办法强制边缘自主地不管用户是否要求,都要刷新一组对象,以保持它们“就绪”?我知道这会对每月账单产生影响,但目前我关注的是性能,所以我们假设成本在这里并不重要。
答案1
如果我没看错的话,您需要预热缓存。目前没有预热缓存的官方方法。
但是,您可以使用以下列表http://blog.domenech.org/2013/10/amazon-web-services-cloudfront-edgelocation-codes.html预热。
对于d709c28ax59vf.cloudfront.net
,它将是:
- d709c28ax59vf.ams1.cloudfront.net
- d709c28ax59vf.ams50.cloudfront.net
- ...
您可以编写一个脚本来使用标头预热这些域Host: d709c28ax59vf.cloudfront.net
。