
image.png
突然朋友問了我個(gè)這樣的問題:明明設(shè)置了30天緩存時(shí)間,為啥還沒到30天就回源了?
相信很多朋友也有這種問題,首先回憶一下CDN的請(qǐng)求流程:

image.png
首次:客戶端 > CDN > CDN > 源站服務(wù)器 > CDN > CDN > 客戶端
后續(xù):客戶端 > CDN > 客戶端
首次請(qǐng)求因?yàn)槲疵芯彺嫠砸皆凑痉?wù)器獲取資源,等CDN服務(wù)器將資源緩存在本地后,后續(xù)客戶端再來請(qǐng)求就由CDN服務(wù)器直接給客戶端了,不用再去源站。
既然都設(shè)置了30天的緩存時(shí)間,那理所應(yīng)當(dāng)是30天之后才會(huì)再次到源站服務(wù)器獲取資源。
其實(shí)這種說法不完全正確,30天是理想最大的過期時(shí)間,不出現(xiàn)意外的情況下,資源在CDN服務(wù)器上是可以緩存30天的。
但是意外總是有的,比如CDN服務(wù)器壞了,里面的數(shù)據(jù)都丟了。后面CDN服務(wù)器搞好重新上線時(shí),里面什么緩存都沒有的,那你再次請(qǐng)求到CDN服務(wù)器是不是就會(huì)回源?
還有以下情況。
- 一個(gè)地區(qū)可能有多臺(tái)CDN服務(wù)器,你第一次請(qǐng)求的CDN服務(wù)器是A,下次可能請(qǐng)求到的CDN服務(wù)器可能是B,然而CDN服務(wù)器B是沒有緩存的,那這次請(qǐng)求是不是也回源了?(至于為啥CDN服務(wù)器A有緩存,CDN服務(wù)器B會(huì)沒有緩存,這個(gè)問題以后有機(jī)會(huì)再細(xì)講)
- CDN服務(wù)器的存儲(chǔ)空間有限,已經(jīng)達(dá)到一定的閾值了,CDN服務(wù)器要清理那些請(qǐng)求量較少的資源,將存儲(chǔ)空間騰出來給其他熱門資源使用,等客戶端再次請(qǐng)求也觸發(fā)回源了。(可以理解為CDN服務(wù)器上的資源有末尾淘汰機(jī)制,就好比有些公司會(huì)淘汰掉那些業(yè)績不理想的人,讓出位置給更有能力的人)
- 資源設(shè)置了30天緩存時(shí)間,只有第一天請(qǐng)求了1次,后面幾天甚至大半個(gè)月都沒有再請(qǐng)求過,然后就一直占著CDN服務(wù)器上的存儲(chǔ)空間,也不產(chǎn)生請(qǐng)求量和流量,CDN服務(wù)器檢測到就會(huì)將這些資源給清理掉了,騰出存儲(chǔ)空間留給其他熱門資源使用。(說難聽點(diǎn),這種就是占著茅坑不拉屎)
除了以上的原因還有其他的,不一一舉例了。
那怎么才能避免出現(xiàn)上面的問題?
CDN服務(wù)器壞掉的問題,這個(gè)沒啥好的辦法;其他三個(gè)問題,主要解決辦法是提升網(wǎng)站的請(qǐng)求量,但也不能徹底解決只能起到緩解而已。
網(wǎng)站每天必須有一定的請(qǐng)求量和流量,讓資源保持熱度,不然資源就有可能被淘汰掉。