閱讀275 返回首頁    go iPhone_iPad_Mac_apple


【CDN 最佳實踐】CDN緩存策略解讀和配置策略

CDN 作為內容分發網絡主要是將資源緩存在 CDN 節點上,然後後續訪問即可直接通過 CDN 節點將資源返回給客戶端,而不再需要回到源站服務器以加快請求速度。那麼 CDN 到底對於哪些請求加速呢?其緩存規則和緩存時間是怎麼樣的呢?怎麼樣的緩存規則更加合理呢?本文就對 CDN 的緩存規則解讀。

CDN 的緩存適用範圍

CDN 對於常見的 HTTP 請求均是支持的,具體對不同請求方式的支持情況請參考表一。但是有一點需要注意的是雖然對這些類型的 HTTP 請求均是支持的,但是並不是對所有請求方式都會進行緩存的。 CDN 僅會對於 GET 請求進行緩存,而對於其他的請求均不進行緩存,僅是起到中間代理、轉發的功能。因此我們建議添加 CDN 的站點源站最好能夠實現動靜分離。將動態請求和靜態請求的內容獨立成兩個站點,而 CDN 僅僅加速靜態站點中的資源。


                                                                        表一. CDN 對 HTTP 請求支持情況

請求方式 描述 是否支持
GET 從指定的資源請求數據 支持
POST 向指定的資源提交要被處理的數據 支持
HEAD 與 GET 相同,但隻返回 HTTP 報頭,不返回文檔主體 支持
PUT 上傳指定的 URI 支持
DELETE 刪除指定資源 支持
OPTIONS 返回服務器支持的 HTTP 方法 支持
CONNECT 把請求連接轉換到透明的 TCP/IP 通道 不支持



注意
1. CDN 處理 HEAD 請求時會將 HEAD 請求轉換成 GET 請求回源,因此源站日誌中記錄的是 GET 請求。
2. CDN 僅支持 POST 和 PUT 方式發送帶有請求體(BODY)的 HTTP 請求。

CDN緩存配置

CDN 的緩存配置截圖如圖 1 所示。緩存配置包括目錄和後綴名兩種形式,並且可以針對不同的緩存配置設置不同的權重以決定其優先級。其中後綴名即是針對於特定後綴名設置的緩存規則,而目錄則是對該目錄及其子目錄下的所有文件均生效的。當對同一文件同時設置了後綴名和目錄的緩存的話會先依據優先級權值先進行選擇,在優先級權值相同的情況下會後綴名策略優先。
                                    image
                                                                        圖 1. CDN 緩存配置示意圖

CDN 緩存規則

總體而言,CDN 所有的緩存規則均可以按照圖 2 中所表述的內容進行判斷。下麵我們對圖 2 中的詳細內容信息解讀。
                                    image
                                                                        圖 2. CDN 緩存規則示意圖


1. CDN 處理一個資源是否緩存首先是需要看源站針對於該資源配置的緩存設置。因為源站的不緩存策略是用戶自身控製的,因此是有最高的優先級的,當源站配置了緩存規則則轉 2 。而如果沒有進行任何配置的話則轉 3 ,而對於瀏覽器緩存情況轉 7 。
2. 當源站配置了以下的規則時, CDN 會認為該資源源站不允許 CDN 緩存,並且這種情況下瀏覽器也是不會做緩存的,因此會每次請求該資源時都回源站,無法進行緩存加速,如果沒有則轉 4 :
      1)有s-maxage=0,no-cache,no-store,private其中一種
      2)如果沒有s-maxage或者s-maxage=0,並且有max-age=0.
      3)帶Pragma: no-cache
3. 在源站沒有配置緩存規則需判斷 CDN 控製台是否配置緩存規則,如果配置了緩存規則轉 4 ,如果沒有配置緩存規則轉 5 。
4. 需判斷 CDN 控製台是否有配置緩存規則,如果配置了緩存規則的話那麼
CDN 上的緩存策略將覆蓋源站的緩存策略,而控製台緩存配置的優先級為:
      1)權重越高的優先級越好;
      2)同等優先級後綴名優先級高於目錄優先級;
      3)相同權重且相同優先級則隨機匹配(建議避免第三種場景),如果沒有配置緩存規則則轉 6 。
5. 需根據源站的緩存規則進行緩存,常見的源站緩存規則有 Cache-Control和 Expires 頭,根據 HTTP 協議 Cache-Control 的優先級高於 Expires 頭,並且 s-maxage 設置高於 max-age 設置。
6. 需遵循 CDN 默認緩存規則,默認緩存規則包括:
      1)對於 response 頭沒有包括 Etag 或者 Last-Modified 頭的文件默認是不緩存的(一般認為此類文件為動態文件);
      2)沒有 Last-Modified 頭的文件默認但是有 Etag 頭的緩存 10 秒;
      3)對於有 Last-Modified 頭的會按照(當前時間 - Last-Modified 時間) * 0.1,並且將其限製在 [10,3600] 區間內。
7. 對於源站設置了不緩存的規則時瀏覽器是不緩存的;如果 CDN 修改了 Cache-Control 或者 Expires 頭時,瀏覽器會按照該修改頭緩存;如果沒有修改即會按照源站的策略緩存。

CDN 緩存情況查看

常見通過 HTTP 的響應頭查看具體 CDN 的緩存情況,如圖 3 即是常見的通過 CDN 訪問的響應頭,可以根據 X-Cache 查看當前該資源是否有在 CDN的 L1 節點緩存,而查看 L2 節點的緩存情況則需要根據 Via 頭中的第一部分查看,如果是 M 即是 MISS,沒有命中的狀態;而出現 H 即是命中緩存。X-Swift-SaveTime 表示該資源緩存到 CDN 節點上的 GMT 時間(相比於北京時間晚8小時);而 X-Swift-CacheTime 表示該資源在 CDN 節點上緩存多長時間會過期。
                        image
                                                                        圖 3. CDN 緩存情況示意圖

最後更新:2017-09-02 01:33:11

  上一篇:go  軟件開發線上服務交易平台_威客網站
  下一篇:go  線程池的實現原理