开发者社区> 问答> 正文

阿里云CDN缓存命中率低 , 频繁回源是什么原因?

阿里云CDN缓存命中率低 , 频繁回源是什么原因?

展开
收起
Lee_tianbai 2021-01-05 14:10:43 1696 0
1 条回答
写回答
取消 提交回答
  • CDN 在静态资源加速场景的应用,是将静态资源缓存在距离客户端最近的 CDN 节点上。用户访问该资源时,直接从缓存中获取资源,避免通过较长的链路回源。如 果 CDN 缓存命中率低,则会导致源站压力大,静态资源访问效率低。因此,CDN 缓存命中率的高低直接影响用户体验,而保证较高的缓存命中率也成为了 CDN 的核 心课题。可以针对导致 CDN 缓存命中率低的具体原因,选择对应的优化策略,来 优化 CDN 的缓存命中率。我们可以通过 CDN 返回的 Response Header 里的 X-Cache 字段来判断是否命中缓存

    image.png X-Cache 字段:MISS 表示未命中缓存,是回源处理的;HIT 表示命中了 CDN 的缓存,直接读取的缓存数据。 X-Swift-CacheTime 字段:表示 CDN 节点上的允许缓存时间,即该文件可以 在 CDN 节点上缓存多久,如果是 0 表示该请求无法缓存。 通常的一些现象和优化方案如下: (1) 首次访问资源慢,第二次访问正常 首次访问会比直接访问源站相对还慢些,因为第一次 CDN 节点没有缓存,要回 源取数据。此情况推荐使用【预热】功能,将源站的内容主动预热到 CDN 节点上, 用户首次访问可直接命中缓存,提高加载速度。 (2) 资源访问量较低,文件热度不够,CDN 收到请求较少无法有效命中缓存 CDN 节点作为所有使用 CDN 的用户公用的节点资源,因此 CDN 配置的缓存 规则表示了该资源在 CDN 上的缓存最长时间,如果您的 CDN 加速域名流量较低, 则可能提前从 CDN 节点的缓存中清除。即缓存按照热度属性采取末尾淘汰制。热度 是指文件在节点上被访问的频率,文件热度不够,被提前剔除。 (3) 缓存配置不合理,缓存时间过短,CDN 节点频繁回源。 ● 当 CDN 未配置缓存规则时,如果静态文件未返回响应头 Etag 和 Last-modified,则该静态文件不能缓存在 CDN 节点上。优化方案是需要源站配置这两个 响应头,或者考虑在 CDN 侧配置缓存规则。 ● 当 CDN 未配置缓存规则时,CDN 用的是默认缓存策略,缓存时间很短,最 长不超过 3600 秒,因此容易造成频繁过期回源的情况,建议可以根据业务情 况到 CDN 侧设置合理的缓存时间。 ● 当源站配置了一些强制不缓存的 Cache-Control 的响应头时,即使您配置了 缓存规则,CDN 也不会对该资源进行缓存,因为这些响应头在 CDN 缓存规 则中的优先级较高。以下有 "s-maxage=0"、"max-age=0"、"no-cache"、 "no-store"、"private"、"Pragma: no-cache" 中的任一种,都会导致 CDN 无法缓存,需要源站侧去修改这些响应头,比如修改成 Public 等可以被缓存 的响应头。参考文档:设置 Nginx 缓存策略、Apache 缓存策略的设置。 (4)URL 带可变参数 访问资源的 URL 带参,并且参数不断变化,当用不同的 URL 去访问 CDN 的 时候,CDN 会认为这是一个新请求(即便这两个不同的 URL 其实是访问到了同一个 文件,并且该文件已经缓存在节点上),还是会回源去拉取所请求的内容,建议开启 【过滤参数】功能。 (5)大文件 Range 回源 对于一些大文件,建议开启 Range 回源来优化回源

    2021-01-05 14:20:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载