image.png
突然朋友問了我個這樣的問題:明明設置了30天緩存時間劫扒,為啥還沒到30天就回源了?
相信很多朋友也有這種問題狸膏,首先回憶一下CDN的請求流程:
image.png
首次:客戶端 > CDN > CDN > 源站服務器 > CDN > CDN > 客戶端
后續(xù):客戶端 > CDN > 客戶端
首次請求因為未命中緩存所以要到源站服務器獲取資源沟饥,等CDN服務器將資源緩存在本地后,后續(xù)客戶端再來請求就由CDN服務器直接給客戶端了湾戳,不用再去源站贤旷。
既然都設置了30天的緩存時間,那理所應當是30天之后才會再次到源站服務器獲取資源砾脑。
其實這種說法不完全正確幼驶,30天是理想最大的過期時間,不出現(xiàn)意外的情況下韧衣,資源在CDN服務器上是可以緩存30天的盅藻。
但是意外總是有的,比如CDN服務器壞了畅铭,里面的數(shù)據(jù)都丟了氏淑。后面CDN服務器搞好重新上線時,里面什么緩存都沒有的硕噩,那你再次請求到CDN服務器是不是就會回源假残?
還有以下情況。
- 一個地區(qū)可能有多臺CDN服務器榴徐,你第一次請求的CDN服務器是A守问,下次可能請求到的CDN服務器可能是B匀归,然而CDN服務器B是沒有緩存的,那這次請求是不是也回源了耗帕?(至于為啥CDN服務器A有緩存穆端,CDN服務器B會沒有緩存,這個問題以后有機會再細講)
- CDN服務器的存儲空間有限仿便,已經(jīng)達到一定的閾值了体啰,CDN服務器要清理那些請求量較少的資源,將存儲空間騰出來給其他熱門資源使用嗽仪,等客戶端再次請求也觸發(fā)回源了荒勇。(可以理解為CDN服務器上的資源有末尾淘汰機制,就好比有些公司會淘汰掉那些業(yè)績不理想的人闻坚,讓出位置給更有能力的人)
- 資源設置了30天緩存時間沽翔,只有第一天請求了1次,后面幾天甚至大半個月都沒有再請求過窿凤,然后就一直占著CDN服務器上的存儲空間仅偎,也不產(chǎn)生請求量和流量,CDN服務器檢測到就會將這些資源給清理掉了雳殊,騰出存儲空間留給其他熱門資源使用橘沥。(說難聽點,這種就是占著茅坑不拉屎)
除了以上的原因還有其他的夯秃,不一一舉例了座咆。
那怎么才能避免出現(xiàn)上面的問題?
CDN服務器壞掉的問題仓洼,這個沒啥好的辦法介陶;其他三個問題,主要解決辦法是提升網(wǎng)站的請求量色建,但也不能徹底解決只能起到緩解而已斤蔓。
網(wǎng)站每天必須有一定的請求量和流量,讓資源保持熱度镀岛,不然資源就有可能被淘汰掉。