雲計算

CDN刷新和預熱常見問題

刷新和預熱的概念

刷新功能是指提交URL刷新或目錄刷新請求後,該加速域名下的所有CDN節點裡的緩存內容將會被強制過期,當用戶再次向CDN節點請求資源時,CDN會直接回源站獲取對應的資源返回給用戶,並將其緩存。
(1)因為刷新會強制清除緩存,因此刷新功能會降低緩存命中率。
(2)刷新支持URL刷新和目錄刷新。
(3)URL刷新使用限制為2000條/日/每賬戶,目錄刷新使用限制為100個/日/每賬戶。

預熱功能是指提交URL預熱請求後,源站將會主動將對應的資源緩存到CDN節點,當用戶首次請求時,就能直接從CDN節點緩存中獲取到最新的請求資源,無需再回源站獲取。預熱功能會提高緩存命中率。
(1)預熱只支持URL預熱,不支持目錄預熱。
(2)同一個ID每天最多預熱500個URL,每次最多隻能提交100條。

點擊【操作類型】可以選擇"刷新"或者"預熱"
56EAF24E-C4C2-41D8-8B52-861695C2243F.png


源站更新以後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'

系統顯示類似如下
TB1oFf2JFXXXXa9XXXXXXXXXXXX.png
(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的文件,那時間也不一樣。

基於以上說明,根據源站的性能情況,結合實際的業務情況,合理的預熱可以到達更優的訪問效果。

Leave a Reply

Your email address will not be published. Required fields are marked *