【CDN 教學】利用 Cloud CDN 自動緩存靜態內容

  • Post category:CDN
  • Post comments:0 Comments
【CDN 教學】利用 Cloud CDN 自動緩存靜態內容
利用Cloud CDN自動緩存靜態內容

早期在 Cloud CDN 的使用上,我們必須在 Origin (原站)設定好符合 Cacheable content 的 header 後,Cloud CDN 才會發揮作用將符合條件的 Objects 進行 cache。但現在我們可以透過 Cache mode 來實現自動緩存靜態內容,一起跟著下面的教學步驟實作看看吧!還不了解 CDN 是什麼的話,可以先參考《CDN 是什麼?Google Cloud CDN 用途、架構完整介紹》一文。

Cloud CDN 的 Cache mode 是什麼?

Cache mode 是 Cloud CDN 上新功能,允許 Cloud CDN 自動將常見的靜態內容類型進行 Cache ,而無需進一步在 Origin 上面進行設定,可以做到強制將 all responses 進行 cache,也可以依照 Origin 的 cache directive 進行。

在建立 GCP HTTP/HTTPS Load Balancing 時 (Backend Services 或是 Backend Bucket 都可以),若是將 Cloud CDN 的選項打勾,可以看到 Cache mode 目前支援三種模式:

Cache ModeBehavior
USE_ORIGIN_HEADERSRequires origin responses to set valid cache directives and valid caching headers.
CACHE_ALL_STATICAutomatically caches static content that doesn’t have the no-store, private, or no-cache directive. Origin responses that set valid caching directives are also cached.
FORCE_CACHE_ALLUnconditionally caches responses, overring any cache directives set by the origin. Make sure not to cache private, per-user content (such as dynamic HTML or API responses) if using a shared backend with this mode configured.
Figure 01. Cache modes
Figure 02. Cloud CDN cache mode setting

我們可以選擇 Cache static content ,在 Cache static content 模式下,通過此設置,Cloud CDN 可以 cache 常見的靜態內容類型。常見的靜態內容類型包含以下:

  • Web Assets, including CSS (text/css), JavaScript (application/javascript) and all web fonts, including WOFF2 (font/woff2)
  • Images, including JPEG (image/jpg) and PNG (image/png)
  • Videos, including H.264, H.265, and MP4 (video/mp4) +. Audio files, including MP3 (image/mpeg) and MP4 (audio/mp4)
  • Formatted documents, including PDF (application/pdf)
CategoryMIME types
Web assetstext/css text/ecmascript text/javascript application/javascript
FontsAny Content-Type matching font/*
ImagesAny Content-Type matching image/*
VideosAny Content-Type matching video/*
AudioAny Content-Type matching audio/*
Formatted document typesapplication/pdf and application/postscript
Figure 03. Static content

教學步驟一:設置靜態內容

我們先在 GCE 上根目錄的地方放置一張 1.png 的圖片

Figure 04. 靜態圖檔 1.png

教學步驟二:啟用 Cloud CDN

接著建立 HTTP/HTTPS Load Balancing,在 Backend services 的地方將 Cloud CDN 啟用,並選擇 Cache static content。

Figure 05. Backend Services: Cloud CDN Cache mode – Cache static content (Recommended)

教學步驟三:確認 Load Balancer 的設定

再來記得 Review 一下 Load Balancer 的設定。

Figure 06. Load Balancer Setting review

教學步驟四:等待 Load Balancer 建置完成

做好相關設定後,我們必須等待3-5分鐘 Load Balancer 才會建立完畢。

Figure 07. Load Balancer ready

教學步驟五:等待 Load Balancer 建置完成

Load Balancer 建置完成後,我們緊接著可訪問 Load Balancer IP,透過此 IP 上的 1.png 查看最一開始放置的物件。如下圖所示,可以看到 Age, Cache control: public, max-age, via:1.1 google,代表此物件已被 Cloud CDN cache。

Figure 08. Load Balancer IP/1.png

教學步驟六:確認 Cache 是否成功

最後我們透過 Cloud Logging 查看 log,可以看到 response_from_cache 及 cacheHit: true 和 cacheLookup: true,這代表 Cache 成功了!

Figure 09. Cloud logging cache結果

需要注意的是,在本文撰寫的同時 (2020/11/10),Cache mode 仍屬於 Beta ,目前針對新建立的 Backend,不論你在建立 backend 時的 cache mode 設定是什麼,預設都會以 USE_ORIGIN_HEADERS cache mode 覆蓋 (下表藍字部分),需要等 Backend services 建立完成後,再次進去手動修改成 CACHE_ALL_STATIC。

Cloud CDN Cache mode: BETA

During the beta release of cache modes, when you enable Cloud CDN on a backend (origin), you can optionally set the cache mode to CACHE_ALL_STATIC, but the default behavior is that Google Cloud continues to require origin responses to set valid cache directives and valid caching headers. This is now called the USE_ORIGIN_HEADERS cache mode. Responses without these directives and uncacheable responses are filled from the origin.

這個改動未來 GA 時,則會以 CACHE_ALL_STATIC (new default) 為主 (下表綠色部分),

發佈階段現有或新版默認緩存模式
BetaNew backendUSE_ORIGIN_HEADERS (no change) 現在
BetaExisting backendUSE_ORIGIN_HEADERS (no change)
GANew backendCACHE_ALL_STATIC (new default) 未來
GAExisting backendUSE_ORIGIN_HEADERS (unchanged)
Figure 10. Beta or GA Default mode

以上便是 Cloud CDN Cache mode 的示範,為了提高性能,當啟用 Cloud CDN 時,我們可以透過 Cloud CDN 自動緩存靜態內容。

如需自動緩存,您可以使用 Cache mode: CACHE_ALL_STATIC 設定。通過此設定,Cloud CDN 可以將常見的靜態內容類型 cache下來,無需再透過 Origin header 進行繁瑣的設定了。

發佈留言