天天看點

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

那麼CDN底層主要是通過什麼樣的手段去實作的呢?其實它就相當于在客戶的就近的地區,布置了對應的節點,并且把對應的一些靜态資源,比如說圖檔、視訊等這些資源預先先緩存到對應的節點上。以後,在客戶通路的時候,我們就可以直接通過節點去拉起對應的資源并傳回給客戶,就不需要再回源了。這樣的操作就縮短了用戶端到伺服器端的一個鍊路,提升了整個站點的ISP、地域相容性。

CDN主要涉及的兩個核心點是主要緩存的是靜态資源和主要針對的是用戶端請求的靜态資源的緩存。

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

阿裡雲CDN緩存規則配置

在CDN中,我們可以設定一些緩存規則來比對一些實際業務場景的需求

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

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

阿裡雲CDN緩存政策解讀

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

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

浏覽器緩存

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

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

如果在CDN上配置了HTTP頭,我會覆寫源站的Cache-Control及Expires頭資訊。浏覽器真實的緩存規則會按照CDN傳回的response資訊進行緩存。

CDN緩存政策

以上就是浏覽器的緩存政策,那麼CDN的緩存政策是什麼呢。

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

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

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

阿裡雲CDN的緩存政策是怎麼運作的?阿裡雲CDN緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

對于遠站沒有設定對應的緩存規則的話,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緩存規則配置阿裡雲CDN緩存政策解讀CDN傳回response頭解讀

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

另外就是這個VIA字段,包含有四段資訊,其中第一段和第三段會有一個M或者H的辨別。M表示對應的資源沒有在對應的CDN節點上緩存。H就表示對應的資源有在CDN節點上緩存。

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

原文連結:

https://aliyunnew.com/a/How-does-the-caching-strategy-of-Aliyun-CDN-work.html

繼續閱讀