全部產品
Search
文件中心

:CDN快取命中率較低排查方法

更新時間:Jun 30, 2024

阿里雲CDN控制台上顯示的快取命中率一直不高,且來源站點收到較多來自CDN的回源請求,可能會導致內容載入速度變慢,對來源站點造成一定的負載壓力。排查快取命中率低的問題時,可以按照本文介紹進行排查和最佳化。

詳細資料

如果發生快取命中率過低的情況意味使用者的每次請求都會通過CDN回源,公網鏈路的不穩定可能導致加速的效果反而變差。如何解決命中率過低的問題,可以通過預熱URL、配置資源緩衝規則、過濾URL中可變參數最佳化快取命中率,具體操作請參見提高CDN快取命中率。首先參見以下操作分析具體原因。

控制台查看命中率和流量情況

CDN控制台中的命中率和流量的說明及分析如下:

  1. CDN控制台統計的快取命中率僅僅是CDN L1節點的命中率,實際L1節點的快取資料也是從CDN L2節點擷取,並不會從來源站點擷取資料,所以真實的CDN命中率是略高於CDN控制台顯示的命中率。

    說明
    • CDN資料流向為:用戶端>CDN的L1節點>CDN的L2節點>來源站點。

    • 快取命中率資料可以在控制台監控查詢 > 資源監控下的命中率頁簽擷取。

      image

  2. 查看提交的CDN加速網域名稱的流量情況。在加速網域名稱流量不高的情況下,即便MISS狀態的URL不多,但是對命中率的統計計算影響很大。例如,某CDN加速網域名稱一共對外提供了10個可以訪問的URL,其中有一個URL來源站點上設定了no-cache,導致不緩衝,在其他URL訪問都命中的情況下,命中率也僅有90%。

    說明

    CDN加速網域名稱的流量頻寬可以在CDN控制台概覽頁擷取。

    image

  3. 檢查業務QPS是否正常。CDN的緩衝規則預設是按照配置的緩衝時間進行緩衝,但節點的磁碟空間是有限的,在高頻使用者訪問的情況下,快取檔案會按照冷檔案的冷熱程度汰換,訪問頻率較低的檔案會被訪問熱點的檔案汰換掉造成回源。遇到這種情況一般都是只有十幾個QPS的網域名稱,建議您對自己網域名稱下的資源進行預熱,保證資源被節點命中。

緩衝配置檢查

檢查是否因部分參數配置不合理導致快取命中率低,具體操作如下:

  1. 檢查是否開啟強制Range回源,詳情請參見配置Range回源。此功能開啟後,所有回源請求將按照設定的Range size切片回源。 Range的功能也有兩面性,對於來源站點是大檔案(超過50 MB) 的情境,Range分區可以有效降低大檔案下載時遇到的網路擁塞,以及來源站點為窄帶的情況。但如果來源站點的檔案平均size相對較小,比如在10M以內的檔案,開啟強制Range回源沒有最佳化效果,反而降低回源的效率,擴大回源,使命中率降低。

  2. 檢查CDN的加速URL中是否帶有可變參數。當您的業務經常使用uri帶有變數,並且不同使用者請求都有不同的parameter變數時,CDN會按照URL hash後的值儲存,每一條不同的uri都會觸發回源,CDN就變成透傳的組件失去了緩衝的意義。遇到這種情況,建議可以開啟CDN忽略參數功能,將uri"?"以後的資源去掉後再進行CDN緩衝,詳情請參見忽略參數

    但如果來源站點或者使用者對"?"後的參數強依賴,建議切換到全站加速(DCDN)產品,通過智能選路回源更靈活,CDN是固定邊緣節點、中心節點雙層回源,對於強依賴"?"變數的訪問效果略低於全站加速(DCDN),智能選路是動態網路品質檢測規劃回源路徑,可能是邊緣節點直接回源,也可以是邊緣節點回到中心節點再回源。

    說明

    例如URL地址為http://example.aliyundoc.com/1.txt?timestamp=14378923,其中timestamp值為時間戳記,每次訪問此值均不同。CDN針對第一次訪問的URL,即之前未預熱的URL,無論該URL是否符合CDN的緩衝規則,由於節點上還沒有這個檔案,第一次訪問肯定都是MISS狀態。但是timestamp參數會變化,所以每次訪問都是一個全新的URL,則每次都返回MISS狀態,從而影響命中率。

  3. 檢查來源站點是否開啟多副本緩衝。多副本緩衝是服務端(來源站點) 針對使用者請求帶有不同Accept-Encoding頭,來源站點能響應不同的Vary頭,且CDN會按照不同的Vary頭進行緩衝。帶有不同Vary頭的請求會增加回源的次數,導致命中率降低。

  4. 檢查緩衝配置是否合理。來源站點上緩衝Header設定不當,或者缺少必要的Header,如果CDN的緩衝規則是不緩衝,那麼每次訪問都是MISS狀態,影響命中率:

    • 緩衝Header設定不當,主要是Cache-Control或者Pragma配置,即來源站點上設定了Cache-Control為no-cache、no-store、max-age=0、private,或者Pragma設定為no-cache等情況下,均會被CDN當做最高優先順序執行不快取作業。

    • 缺少必要的Header,指來源站點的Response頭部資訊中不包含ETag和Last-modified,這種情況也會導致不進行緩衝。

    • 源是否設定過緩衝頭,CDN預設按照來源站點的緩衝頭優先順序緩衝,如果來源站點設定了不合理的緩衝頭,比如max-age=0,則覆蓋CDN的緩衝。

  5. 檢查CDN控制台是否設定了不緩衝的規則,即某目錄或者某種尾碼的檔案設定的緩衝時間為0秒。

  6. 檢查來源站點動態內容是否較多,目前CDN主要是加速靜態資源,例如CSS、JS、HTML、圖片、TXT、視頻等資源,針對動態資源PHP、JSP、包含內部邏輯處理甚至Cookie等資源都會回來源資料。

  7. 重新整理操作頻繁。CDN控制台有重新整理緩衝功能,每次重新整理都會導致所有已經在CDN上緩衝的URL失效,所以在重新整理之後訪問同樣的URL時,就是MISS狀態,從而影響命中率。

  8. 檔案熱度不夠。不經常被使用者訪問到的URL,即使符合所有緩衝規則,但是經常有被節點去除緩衝的風險。CDN節點上緩衝的檔案,可以理解為按照熱度屬性採取末尾淘汰制,熱度就是該檔案在該節點上被訪問的頻率,檔案熱度不夠,其實一定程度上跟這個網域名稱本身的流量不高有關係。

相關文檔