阿里雲CDN的快取策略是怎麼運作的?

CDN是整個阿里雲產品框架中是一個很重要的一環,因為它主要是在產品最外層,保證真實的客戶在訪問伺服器端資源的時候能夠有一個較好的體驗。

阿里雲CDN的快取策略是怎麼運作的?

那麼CDN底層主要是透過什麼樣的手段去實現的呢?其實它就相當於在客戶的就近的地區,佈置了對應的節點,並且把對應的一些靜態資源,比如說圖片、影片等這些資源預先先快取到對應的節點上。以後,在客戶訪問的時候,我們就可以直接透過節點去拉起對應的資源並返回給客戶,就不需要再回源了。這樣的操作就縮短了客戶端到伺服器端的一個鏈路,提升了整個站點的ISP、地域相容性。

CDN主要涉及的兩個核心點是主要快取的是靜態資源和主要針對的是客戶端請求的靜態資源的快取。

靜態資源的請求主要指的是http的get請求。對於http協議裡其他請求比如說put以及POST等動態回源的一些請求,CDN可能就不會去做任何快取的處理,而是直接透傳給源站,然後由源站進行對應的處理後返回給客戶端。

阿里雲CDN快取規則配置

在CDN中,我們可以設定一些快取規則來匹配一些實際業務場景的需求

阿里雲CDN的快取策略是怎麼運作的?

CDN配置主要提供了包括目錄、檔案的字尾兩種快取配置方式。我們可以在針對於我們實際需要快取的一些靜態檔案的目錄或者一些靜態檔案的一些字尾名來配置對應的快取規則,然後實現一些動態可調整的一些快取配置。

同時,這裡的快取配置可以設定不同權重,這樣我們可以針對於不同的檔案設定多種快取配置,那在實際的業務場景,我會按照高優先順序的快取配置來對它進行快取。

阿里雲CDN快取策略解讀

配置完成後,CDN是按照什麼樣的一個快取規則來對資源進行快取的呢?那接下來我們就來詳細的解讀一下這些快取配置。

阿里雲CDN的快取策略是怎麼運作的?

瀏覽器快取

整個的快取體系會包括瀏覽器快取和CDN節點本身的快取。對於瀏覽器快取來說,瀏覽器主要是根據http頭裡Cache-Control和Expires等資訊來決定我瀏覽器的快取行為,這些資訊同時包括強快取、驗證性快取等。

阿里雲CDN的快取策略是怎麼運作的?

針對Cache-Control和Expires資訊,使用者是可以在源站配置對應的資訊,直接返給給客戶端。如果在CDN上沒有配置對應的http響應頭的話,CDN會將源站配置的response頭直接返給給瀏覽器。瀏覽器就會按照源站的配置直接按對應的快取規則進行快取處理。

如果在CDN上配置了HTTP頭,我會覆蓋源站的Cache-Control及Expires頭資訊。瀏覽器真實的快取規則會按照CDN返回的response資訊進行快取。

CDN快取策略

以上就是瀏覽器的快取策略,那麼CDN的快取策略是什麼呢。

阿里雲CDN的快取策略是怎麼運作的?

CDN的快取規則會首先依賴於源站返回給CDN的Cache-Control和Expires頭資訊。如果如果源站設定了no-cache或private或max-age=0這些資訊,就相當於源站是不允許CDN對這個資源進行快取的。這種情況下,CDN會存遵從於源站的設定,會對對應的資源不做任何的快取而直接返回給瀏覽器。下一次在訪問的時候,CDN同樣會到源站去拉取對應的資源。對於這一類資源,使用者主要是想讓他時時的回到源站,不想返回歷史的舊資料。

那在源站沒有設定不允許CDN快取的response頭的情況下,CDN就會按照下圖的邏輯進行快取。

阿里雲CDN的快取策略是怎麼運作的?

如果客戶在控制檯上配置對應的快取規則的,CDN的快取規則會優於源站的快取規則,然後按照CDN的快取規則進行快取處理。如果CDN沒有配置對應的快取規則的話,CDN會完全按照源站的Cache-Control和Expires頭進行快取。

阿里雲CDN的快取策略是怎麼運作的?

對於遠站沒有設定對應的快取規則的話,CDN會按照上圖中4和5的策略去快取。第四點,CDN會按照CDN控制檯上配置的快取規則進行快取,而第五點就是在既沒有配置任何的快取規則,而客戶的源站也沒有配置任何的快取規則的情況,CDN會有一套自己的預設的快取規則。

針對於預設的快取規則,CDN針對的是源站對應的靜態檔案。透過源站返回的response頭是否含有etag或者last-modified資訊判斷。如果返回的response包含這兩個資訊的任何一個,那CDN會認為這個檔案是一個靜態檔案。如果返回的response頭裡面有last-modified資訊,那麼CDN會根據當前訪問的時間戳減去last-modified乘以0。1,得到的值會被作為CDN的快取時間,這個時間會在10~3600秒的區間範圍內。如果只返回etag,CDN會預設快取十秒的時間。

對於這種場景,其實客戶的快取規則是不可控的。因此我們建議不管是在源站還是在CDN控制檯上,我們都能配置符合業務場景的快取規則。

CDN返回response頭解讀

以上就是CDN快取規則的解讀,那我們在實際使用的過程中,我們又如何檢視當前這個檔案到底有沒有在CDN節點上快取或者它快取的時間是多少呢?

阿里雲CDN的快取策略是怎麼運作的?

資源在經過CDN節點以後,一定會在對應的http的response頭裡加若干的欄位。其中的X-Swift-CacheTime就表示了這個資源在CDN節點上的快取時間。對應的X-Swift-SaveTime表示對應的資源在時間節點上快取配置了多長時間。

另外就是這個VIA欄位,包含有四段資訊,其中第一段和第三段會有一個M或者H的標識。M表示對應的資源沒有在對應的CDN節點上快取。H就表示對應的資源有在CDN節點上快取。

第一段說明L2節點的快取情況,第三段指的是L1節點的快取情況,這兩個其中有一個包含H,就表示對應的資源已經在CDN節點上進行了快取。那這一次訪問就不需要再回到源站拉取對應的資源了