找回密码
 会员注册
查看: 34|回复: 0

如何提高CDN缓存命中率?

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-21 00:00:08 | 显示全部楼层 |阅读模式
点击蓝字关注我们CDN的缓存命中率的高低直接影响客户体验,而保证较高的命中率也成为了CDN用户的核心命题。在本文中我们就一起探讨CDN缓存命中率的概念、影响因素以及优化策略。1.什么是缓存命中率?熟悉CDN的小伙伴都知道,CDN的核心是节点缓存,通过在各个地理区域部署足够多的节点来提供缓存服务。客户端通过边缘节点能够直接访问缓存资源,避免频繁访问源站来达到加速的目的。缓存效果的衡量指标主要是缓存命中率,包括流量命中率和请求数命中率。◎流量命中率是指单位时间内的请求响应中的总命中字节数除以总响应字节数;◎请求数命中率是指单位时间内的命中请求数除以总请求数。两者从不同维度反映了缓存的命中情况。缓存命中率越高,越能够减少源站网络带宽的消耗,减少源站的压力,减少用户的访问延迟,加快响应速度。缓存命中在一次CDN的访问路径中,通常包含以下角色:用户-》浏览器-》CDN节点-》源站。其中浏览器和CDN节点都可以起到缓存资源的作用。当用户在浏览器输入一个地址后:浏览器会先在本地查找是否有符合条件并且未过期的资源,找到的话直接返回用户不发起请求;浏览器如果找到了本地资源但是无法确定是否过期,则向服务器发起缓存过期验证,服务器在确认缓存未过期的情况下返回304状态码,表示浏览器可以直接使用本地的缓存资源;服务器验证发现缓存已过期,直接将新的资源返回并响应200状态码,浏览器将新的资源按策略决定是否缓存到本地,并将其响应给用户;服务器如果是CDN节点,在缓存校验的过程中,如果发现本地没有资源则会按照一定策略访问集群内的其他节点,或者向上游节点请求资源,直至透传至源站。在将资源返回给用户的过程中,逐层节点会将其按照预设规则缓存到本地。通过上述的访问策略,当后续有用户访问同一个资源时,可以直接在本地或者是CDN节点上命中缓存,不请求源站。CDN访问中的缓存策略主要是通过HTTP头部来实现的,合理设置不同的头部,我们可以控制CDN节点和浏览器对资源不同的缓存行为。常见的缓存头部响应头Cache-Control:控制资源在CDN节点和浏览器的缓存行为,常见的值有:no-cache,no-store,public,max-age=N。在max-age=0,no-cache,no-store或private的情况下,CDN节点会关闭对该资源的缓存行为。Expires:表明该资源的有效期,超过该时间资源需要置为过期。Last-Modified:表明资源的最近修改时间,CDN节点强烈依赖该头部判断缓存一致性。ETag:表明资源的唯一标识符,生成和校验规则由服务器决定。Age:缓存资源在节点上的缓存时间。通过浏览器的调试模式,我们截取一个响应包说明上述头部的含义:上述资源的响应头部透露出很多的信息:Age:表明该资源已经在节点上缓存了518992秒;Cache-Control:告知缓存服务器和浏览器,该资源最大缓存时间2592000;ETag:表明该资源的唯一标识符是5e7c3f77-a89;Expires:表明该资源在时间点2021-07-0306:01:19后过期;Last-Modified:表明该资源的最近修改时间是2020-03-2605:36:55请求头If-Modified-Since:用于同服务器校验缓存版本,如果资源在该时间后有更新,服务器需要返回新的资源,否则返回304;If-None-Match:和ETag配合使用告知服务器浏览器缓存的资源标识符,如果有变化服务器需要返回新的资源,否则返回304。2.腾讯云CDN的缓存策略腾讯云CDN在提高基础缓存能力的基础上对缓存策略进一步优化,提高访问命中率,主要包括:海量资源储备腾讯云内容分发网络在中国境内拥有2000+个加速节点,境内总储备带宽110Tbps+。境内加速节点均为腾讯高规格、高安全性自建机房,享受运营商高质量网络,节点覆盖境内所有省份、自治区、直辖市。多级缓存架构腾讯云CDN在底层默认提供增加中间源的架构来提高缓存命中率,边缘层做广度覆盖,中间源提供更高的存储能力,只要任意一个CDN节点命中并响应请求,则算作命中节点缓存,必要时还可配置三级源进一步提升缓存能力。合并+集群回源在同一层节点上,腾讯云CDN还提供了合并回源+集群内部回源的功能,在一定时间内对同一个资源的请求合并成一个回源,以及对同个资源在内部集群做访问调度,收敛了回源请求,提高了资源命中率。底层分片存储在大文件断点续传下载的场景下,一个客户可能并不请求完整的文件。腾讯云CDN在大文件场景存储上进行优化,对文件底层分块存储,按需拉取文件,避免分片请求触发回源拉取整个文档。同时对于任意字节区间的range请求,节点会回源拉取覆盖请求字节区间的完整分片,后续同分片的其他字节请求可以直接命中缓存,优化存储和回源效率。缓存规则灵活配置腾讯云CDN控制台除了可以设置常规的加速节点缓存,还提供了诸如:头部缓存,状态码缓存,浏览器缓存,缓存建配置等多个缓存相关功能,用户可以在控制台自助定义资源的缓存规则。3.缓存命中率低的原因有哪些?当我们发现网站的访问速度较慢,或者源站的回源带宽较大时,在排除网站本身访问量增大的原因下,极有可能是网站命中率较低触发回源行为,这时我们可以通过以下方式来排查。首先登陆CDN控制台,在监控页面查看流量命中率详情;  查看带宽、流量趋势曲线,判断是否是流量突增导致命中率降低;在流量、请求详情页面查看TOPurl统计,同时检查节点缓存配置规则,判断TOP资源的访问能否命中对应的缓存策略。通过上述观察后如果判断命中率的下降不符合预期,我们可以检查域名配置来确定缓存策略是否合理。01.源站缓存头部是否配置正确如果节点缓存策略配置成遵循源站,在源站通过Cache-Control头部强制设置了不缓存资源时,会导致CDN节点缓存功能失效降低命中率。02.源站是否大量上线新资源如果源站新上资源较多,会触发较多的请求回源,降低流量命中率。03.刷新操作是否正常如果频繁刷新资源,CDN节点的缓存内容会被强制删除,同时不合理的使用目录刷新会造成大量资源缓存失效,短时间内降低命中率。04.源站是否出现异常如果源站出现故障,造成资源访问大量4xx,5xx时,每次请求都会触发回源降低命中率。05.缓存过期时间是否配置正确如果设置的CDN缓存时间过短,CDN节点会经常失效,导致频繁回源降低命中率。同时资源的缓存策略有优先级,实际命中策略可能不符合预期。06.过滤参数功能是否开启如果关闭了域名的过滤参数缓存功能,将按照全路径匹配缓存文件。同一份资源携带不同请求参数时,无法命中同一份缓存,降低命中率。07.Range回源是否开启如果关闭了Range回源功能,在range请求部分文件时,会导致回源拉取整个大文件,增加回源流量,降低命中率。08.网站访问量过低CDN节点对缓存有失效策略,如果资源热度较低可能被热点资源挤出缓存池,降低命中率。4.如何提高CDN缓存命中率?明白了缓存命中率降低的原因后,我们可以通过以下手段来提高资源的缓存命中率:设置节点缓存时间节点缓存时间是指配置资源在CDN服务节点缓存的时间,该配置直接影响CDN控制台上的缓存命中率统计值。在域名配置详情页,点击缓存配置选项卡,找到节点缓存过期配置,按需配置静态资源和动态资源的缓存时间,需要注意缓存策略按底部优先的规则生效。设置浏览器缓存时间浏览器缓存时间是指配置资源在浏览器本地缓存的时间,该配置虽然不能提升CDN控制台上的缓存命中率统计值,但是本质上也是提升了用户访问的实际命中率。在域名配置详细页,点击缓存配置选项卡,找到浏览器缓存过期配置,按需配置静态资源和动态资源的缓存时间。开启过滤参数在关闭过滤的场景下,同一个URL资源如果带上了不同的GET参数,会被CDN节点认定为不同的资源触发回源行为,在不影响其他资源的参数缓存行为下可以尝试开启过滤参数提高命中率。在域名配置详细页,点击【缓存配置】选项卡,找到【缓存键规则配置】。动静分离对于动态资源较多的域名,可以尝试将静态资源和动态资源分离,分别接入CDN静态加速和ECDN动态加速功能。合理使用刷新功能控制无效的刷新行为,尤其是目录刷新。对于访问量较大同时变更不频繁的资源,在下一个变更周期前,无需提交刷新任务。目录刷新会造成大量资源访问失效,触发回源,尽量减少使用。如果必须使用,需要刷新影响较少,层级较长的目录。提前预热在新版本上线或资源变更前,提前提取热点资源,使用CDN预热功能资源缓存到节点。在有条件的情况下增加CDN的切入访问量,避免缓存淘汰。开启range回源在源站支持range回源的情况下,在控制台开启分片回源配置功能,避免用户请求部分文件时触发回源拉取整个文件,能够有效提高大文件分发效率,提升响应速度,降低源站压力。点击阅读原文,阅读【流量命中率偏低的解决办法】summer扫码关注收获更多~我知道你在看哟
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 14:37 , Processed in 0.788293 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表