突然朋友问了我个这样的问题:明明设置了30天缓存时间,为啥还没到30天就回源了?
相信很多朋友也有这种问题,首先回忆一下CDN的请求流程:
image.png首次:客户端 > CDN > CDN > 源站服务器 > CDN > CDN > 客户端
后续:客户端 > CDN > 客户端
首次请求因为未命中缓存所以要到源站服务器获取资源,等CDN服务器将资源缓存在本地后,后续客户端再来请求就由CDN服务器直接给客户端了,不用再去源站。
既然都设置了30天的缓存时间,那理所应当是30天之后才会再次到源站服务器获取资源。
其实这种说法不完全正确,30天是理想最大的过期时间,不出现意外的情况下,资源在CDN服务器上是可以缓存30天的。
但是意外总是有的,比如CDN服务器坏了,里面的数据都丢了。后面CDN服务器搞好重新上线时,里面什么缓存都没有的,那你再次请求到CDN服务器是不是就会回源?
还有以下情况。
- 一个地区可能有多台CDN服务器,你第一次请求的CDN服务器是A,下次可能请求到的CDN服务器可能是B,然而CDN服务器B是没有缓存的,那这次请求是不是也回源了?(至于为啥CDN服务器A有缓存,CDN服务器B会没有缓存,这个问题以后有机会再细讲)
- CDN服务器的存储空间有限,已经达到一定的阈值了,CDN服务器要清理那些请求量较少的资源,将存储空间腾出来给其他热门资源使用,等客户端再次请求也触发回源了。(可以理解为CDN服务器上的资源有末尾淘汰机制,就好比有些公司会淘汰掉那些业绩不理想的人,让出位置给更有能力的人)
- 资源设置了30天缓存时间,只有第一天请求了1次,后面几天甚至大半个月都没有再请求过,然后就一直占着CDN服务器上的存储空间,也不产生请求量和流量,CDN服务器检测到就会将这些资源给清理掉了,腾出存储空间留给其他热门资源使用。(说难听点,这种就是占着茅坑不拉屎)
除了以上的原因还有其他的,不一一举例了。
那怎么才能避免出现上面的问题?
CDN服务器坏掉的问题,这个没啥好的办法;其他三个问题,主要解决办法是提升网站的请求量,但也不能彻底解决只能起到缓解而已。
网站每天必须有一定的请求量和流量,让资源保持热度,不然资源就有可能被淘汰掉。
网友评论