CDN缓存命中率较低可能的原因

2024-06-21 02:04

本文主要是介绍CDN缓存命中率较低可能的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景: 

网站使用CDN加速以后,大部分静态文件都将会被离用户较近的CDN边缘节点缓存,由此起到访问加速效果。如果用户访问的文件由CDN节点直接响应,无需回源,则称之为缓存命中。CDN缓存命中率越高,也就意味着加速效果越好,相应的回源量也会极大减少。

天翼云CDN控制台上【统计分析】模块,可以看到缓存流量命中率和请求命中率数据。缓存命中的流量除以总流量称之为流量命中率,缓存命中的请求数除以总请求数称之为请求命中率。只要在CDN边缘节点,或是在中间节点命中,均统计为缓存命中(CDN用户请求流向为:用户客户端->CDN边缘节点->CDN中间节点->源站)。如果命中率低,则较多用户的请求都会从CDN节点回源,不仅访问效果不佳,还会给源站造成较大压力。本文将介绍产生此类情况的可能原因。

可能原因

  1. 如果域名刚接入天翼云CDN加速,则用户首次访问文件时CDN节点均需要回源获取,此时缓存命中率较低,需要经过一段时间后才能逐步把大部分文件缓存至CDN节点,这个时间往往要经过两三天至一周左右。
  2. 如果域名已接入天翼云CDN较长时间,仍命中率较低,则可排查是否存在如下情况:

 

 

是否用户请求量过低导致

如果域名请求数总量较少,则即使有少量URL未命中,仍会对总体命中率影响较大。例如,5分钟内仅100个URL请求,其中20个是访问同个URL,但因为该URL在CDN设置了不缓存或缓存时间为0(等同于不缓存),导致每次请求都回源,则此时CDN缓存命中率最高不会超过80%。此外,因为CDN节点磁盘缓存空间有限,一般会有基于文件热度淘汰冷文件机制。如果该域名访问的资源热度极低,例如第一次访问后,下次用户访问同个资源是在一周以后,则在此期间该文件可能因为热度过低被淘汰掉,也会导致命中率较低。

是否用户请求确实比较分散,热度较低导致

域名总请求数和访问量居中,但用户请求确实比较分散,即不同地区不同用户访问的内容都不一样,没有太为集中的热点,这种用户访问特性也会导致命中率较低。该情况可以结合CDN控制台上【统计分析】模块的“热门URL”数据来进行确认,例如按天统计的热门URL排名TOP10的访问次数很少,访问占比不到1%,则该域名整体命中率较低是正常情况。

是否因缓存设置不合理导致

CDN控制台上有推荐的缓存规则设置,客户可以基于该规则进行适当调整。如果缓存规则设置不合理,也会导致缓存命中率较低。可以结合CDN控制台上【统计分析】模块中“热门URL(回源)”数据进行确认。例如,回源请求次数排名TOP的URL,是否存在实际是可缓存的,或是否存在加速URL中携带问号后参数但实际指向同个文件,因未设置去问号缓存导致重复回源(详情请见:CDN缓存key携带问号后参数导致缓存命中率低)。如存在上述情况,可通过CDN控制台【域名管理】模块中“缓存配置”-“缓存过期时间设置”进行调整优化,例如将实际可缓存的URL,设置为强制缓存一段时间,或将相应URL设置为去问号缓存。

 

这篇关于CDN缓存命中率较低可能的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079899

相关文章

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe