華為雲CDN如何提高快取命中率
背景資訊
CDN快取命中率低,會導致源站壓力大,靜態資源訪問效率低。您可以針對導致CDN快取命中率低的具體原因,選擇對應的優化策略,來提高CDN的快取命中率。CDN快取命中率包括流量命中率和請求命中率。
-
流量命中率 = 命中快取產生的流量 / 請求總流量
-
**請求命中率 **= 命中快取的請求數 / 請求總數
說明:
流量命中率越低,回源流量越大,源站的流出流量越大,源站頻寬資源佔用越大,其代表了源站伺服器收到的負載壓力,請重點關注流量命中率。
檢視快取命中率
您可以登入CDN控制檯檢視流量命中率和請求命中率。
-
登入華為雲控制檯,在控制檯首頁中選擇“CDN與智慧邊緣 > CDN”,進入CDN控制檯。
-
在左側選單欄中,選擇“統計分析”。
-
分別選擇“使用量統計”和“訪問情況統計”檢視“流量命中率”和“請求命中率”。
**圖1 **流量命中率
**圖2 **請求命中率
優化快取命中率
-
合理設定快取過期時間
CDN加速的本質是快取加速,把源站資源快取在遍佈全球的節點上,使用者可以就近從邊緣節點獲取資源,從而達到加速的效果。您可以通過CDN控制檯合理設定快取過期時間來提高快取命中率,建議如下:
- 對於不經常更新的靜態檔案(如圖片型別、應用下載型別等),建議您將快取時間設定為1個月以上。
- 對於頻繁更新的靜態檔案(如JS、CSS等),您可以根據實際業務情況設定。
- 對於動態檔案(如PHP、JSP、ASP等),建議您將快取時間設定為0,即不快取。
詳細的設定步驟和注意事項請見如何設定快取過期時間。
說明:
- 如果源站設定了s-maxage=0、max-age=0、no-cache、no-store、private,CDN側同時開啟了“快取遵循源站”功能(此功能預設關閉),CDN節點將無法快取源站資源,導致頻繁回源。
- 如果您的源站有多個主機,某個相同的資源在多個主機中的Last-modified、Etag、Content-Length不一致,CDN節點將無法快取該資源,導致重複回源。
- 如果源站資源更新,請重新整理資源對應的URL,以保證使用者可以獲得最新的資源。
-
如果您修改了快取規則:
- 新的規則僅對後面快取的資源生效,已經快取的資源需要等快取過期後,再次快取才會遵循新的快取規則。
- 如果您想要立即生效,請在修改快取規則後執行快取重新整理操作。
-
開啟過濾URL引數
目前大多數的網頁請求都攜帶URL引數資訊,引數以“?”開始,如果引數沒有包含重要資訊(如版本資訊等),是否攜帶該引數訪問不會影響使用者獲得正確的資源,可以選擇開啟“忽略URL引數”功能,提高快取命中率,提升分發效率,詳見URL引數。
典型應用:
- 終端使用者首次訪問URL“http://www.example.com/1.txt?test1”時,CDN無快取,回源請求資源;第二次訪問“http://www.example.com/1.txt?test2”時,由於開通了“忽略URL引數”功能,所以“?”之後的引數不匹配,直接命中快取“http://www.example.com/1.txt”。
- 終端使用者首次訪問URL“http://www.example.com/1.txt?test1”時,CDN無快取,回源請求資源;第二次訪問“http://www.example.com/1.txt?test2”時,由於沒有開通“忽略URL引數”功能,所以“?”之後的引數也需要匹配,要重新回源請求“http://www.example.com/1.txt?test2”。
-
預熱URL
CDN可以通過快取預熱將源站資源主動快取到CDN節點,使用者訪問時就能直接從CDN節點獲取到最新的資源,詳見快取預熱。
當您的域名初次接入CDN加速、活動釋出時您可以將源站資源預熱到CDN節點,使用者訪問資源時直接從CDN節點獲取,從而提升CDN的快取命中率。
典型場景:
- 初次接入CDN:域名初次接入CDN時,節點暫未快取源站資源,此時,您可以將源站資源預熱至CDN節點。後續使用者訪問資源將直接從就近的CDN節點獲取資源,提升訪問速度。
- 安裝包釋出:新版本安裝包或是升級包釋出前,提前將資源預熱至CDN節點。正式上線後,海量使用者的下載請求將直接由全球加速節點響應,提升下載速度的同時,大幅度降低源站壓力。
- 運營活動:運營活動釋出前,提前將活動頁涉及到的靜態資源預熱至CDN節點。活動開始後,使用者訪問中所有靜態資源均由加速節點響應,海量頻寬儲備保障使用者服務可用性,提升使用者體驗。
-
開啟Range回源
Range回源是指源站在收到CDN節點回源請求時,根據HTTP請求頭中的Range資訊返回指定範圍的資料給CDN節點。Range回源能有效縮短大檔案的分發時間,提升回源效率,提高快取命中率,詳見Range回源。
典型場景:
- 未開通Range時,使用者想觀看指定片段的視訊,而CDN回源時需要獲取整個視訊,所以回源流量大於響應給使用者的流量,從而造成快取命中率降低。開啟Range回源後,CDN將分片回源獲取資源返回給使用者,從而提升快取命中率。
-
其它
-
快取資源需要更新時,儘量避免重新整理目錄
當源站某個資源更新時,一般需要通過重新整理相應的URL來強制節點快取資源過期。重新整理目錄會將目錄內所有的資源全部置為過期,使用者下次訪問時將無法命中快取,全部回源站請求資源,因此儘量避免重新整理整個目錄,尤其慎重重新整理根目錄。
-
避免在URL中攜帶動態引數
如果您的URL中包含動態引數,如時間戳,CDN無法快取該資源,導致頻繁回源。
-
判斷URL是否命中快取
- 在瀏覽器Chrome上,按F12。
- 選擇“Network”。
- 檢視指定URL的響應頭,檢視頭部資訊,進行如下判斷:
- 如果有“x-hcs-proxy-type”頭部,值為“1”即命中快取,值為“0”即未命中快取,不再檢視其它頭部;
- 如果無“x-hcs-proxy-type”頭部,而有“X-Cache-Lookup”頭部,值為“Hit From MemCache”、“Hit From Disktank”或“Hit From Upstream”即為命中快取,其它值表示未命中快取,不再檢視其它頭部;
- 如果同時無“x-hcs-proxy-type”、“X-Cache-Lookup”頭部,有“age”頭部,則值大於“0”即命中快取,值為“0”即未命中快取。
本文由華為雲釋出。