刷新和预热的概念
刷新功能是指提交URL刷新或目录刷新请求后,该加速域名下的所有CDN节点里的缓存内容将会被强制过期,当用户再次向CDN节点请求资源时,CDN会直接回源站获取对应的资源返回给用户,并将其缓存。
(1)因为刷新会强制清除缓存,因此刷新功能会降低缓存命中率。
(2)刷新支持URL刷新和目录刷新。
(3)URL刷新使用限制为2000条/日/每账户,目录刷新使用限制为100个/日/每账户。
预热功能是指提交URL预热请求后,源站将会主动将对应的资源缓存到CDN节点,当用户首次请求时,就能直接从CDN节点缓存中获取到最新的请求资源,无需再回源站获取。预热功能会提高缓存命中率。
(1)预热只支持URL预热,不支持目录预热。
(2)同一个ID每天最多预热500个URL,每次最多只能提交100条。
点击【操作类型】可以选择"刷新"或者"预热"
源站更新以后CDN多久时间更新
CDN是否更新完全取决于CDN节点上的缓存是否过期了,如果缓存没有过期,那么CDN依然会返回缓存数据,因为CDN并不知道源站更新数据了。如果缓存过期了,那么客户端请求到CDN的时候,CDN因为没有缓存,就会回源向源站去获取数据,这个时候就获取到新的数据,进而依据缓存规则来把资源缓存下来。
如果用户没有在CDN上配置缓存规则,那么CDN是依赖于默认的缓存规则来缓存的,最大缓存时间不超过3600秒。如果用户有在CDN配置缓存规则,那么缓存过期时间就是依赖于用户配置的缓存规则的。
因此如果源站更新了资源,需要手动到CDN控制台去刷新缓存,或调用CDN的API/SDK接口去刷新缓存,一般情况下刷新是5分钟内生效。如果是调用API/SDK接口,可以考虑写一个自动化脚本。阿里云CDN为用户提供了Python示例脚本,帮助用户对文件或目录快速进行刷新和预热,具体可以参见刷新预热自动化脚本。
如何查看预热任务是否执行完成
在CDN控制台刷新预热功能界面单击【操作记录】,即可查看预热任务的执行状态。预热任务的状态为成功,表示预热任务提交成功,并不代表文件已经预热结束。执行如下命令,查看预热任务的执行状态
curl -I 'http://cdnoss.xxxxxxxxxx.com/test.json'
系统显示类似如下
(1)CDN缓存节点可分为L1节点(一级节点)和L2节点(二级节点),请求的流程是:客户端-->CDN_L1-->CDN_L2-->源站。CDN的L1节点是边缘节点,分布在靠近用户侧,L2节点分布在几个大区下,可以把L2节点理解为汇聚式节点,一个L2对应多个L1节点。预热功能是指提交URL预热请求后,CDN的L2节点作为一个客户端,主动向源站发起请求,将源站的资源缓存到CDN的L2节点上。
(2)CDN的HTTP响应头里有Via字段(如上图),Via的前半部分代表二级节点状态,其中的“H”表示命中,说明文件已经预热到二级节点,即预热成功了,不需要再回源站。
(3)Via的后半部分代表一级节点的状态,“M”表示一级节点上没有缓存,需要向二级节点回源。
影响预热完成时间的因素
预热完成的时间跟预热的资源大小、预热的URL数量、源站的性能、回源网络等因素有关。
(1)如前文所说,CDN是L1+L2的架构,预热是指L2节点回源。假设用户的CDN加速域名的调度域里有10个L2节点,那么预热一个URL,那么这10个L2节点就会同时向源站去请求这个资源。依次类推,如果同时预热100个URL,那就同时会有1000个请求去请求源站了。
(2)基于以上说明,因为预热会有并发的请求去请求源站,因此需要保证源站的性能、公网带宽等能满足,否则很可能会导致预热失败等情况。例如用户的源站带宽是5M,但是实际同时预热了大量的URL,造成大量来自CDN的预热请求,源站的带宽被打满,那么会导致CDN无法正常请求到数据,最终导致预热失败。
(3)另外请求资源的大小和数量也影响预热时间,比如预热1个5M的文件跟预热一个500M的文件,那时间肯定不一样。比如预热1个5M的文件,跟同时预热100个5M的文件,那时间也不一样。
基于以上说明,根据源站的性能情况,结合实际的业务情况,合理的预热可以到达更优的访问效果。