CDN 是什麼?Cloud CDN 用途、架構完整介紹
文章段落
CDN 全名 Content Delivery Network(內容分發網路),主要用途是優化網頁速度及效能。CDN 服務會將網站內容儲存在最接近用戶的 「邊緣」網路節點,讓用戶可從最近的 CDN 所在區域更快速地獲取所需資料。
CDN 是什麼?用途與優勢介紹
CDN(內容分發網路)是串聯各地理位置伺服器和資料中心的網路系統,可優化網頁速度及效能,讓使用者不論身處何處,都能快速讀取圖片、影音和 HTML 等靜態內容。
為什麼要用 CDN 服務?不使用會怎樣?
在了解 CDN 是什麼後,我們接著要來探討為何要使用 CDN。在不使用 CDN 的情況下,假設今天有一個影音平台架設在荷蘭,成立之初因使用者都在荷蘭附近且數量不多,所以使用者可直接向網站伺服器發出請求並快速地取得資料(例如:觀看影片)。
但是,當網站的使用者變多且不再僅限於荷蘭,網站伺服器的負擔也會隨之增加。最後,距離網站伺服器越遠的使用者存取速度會越慢,甚至可能面臨網路延遲(直播影片卡頓、不同步)和頻寬成本增加的問題,進而降低使用該影音平台的意願。
CDN 服務最大優勢:優化網頁速度與效能
針對上面的例子,CDN 就是影音平台幫用戶提升存取效能並降低成本的好工具。因為 CDN 會將網站伺服器回傳給使用者的 Cache(內容緩存或稱快取)存在多個地理位置(Points of Presence,PoPs),且幾乎每個 PoP 都包含 CDN 節點(CDN nodes),可負責將 Cache 傳輸給在 PoP 附近發出請求的使用者。
所以在上面的例子裡,一名美國使用者對網站發出請求後,可直接透過美國地區的 PoP 來獲取資料。這和未使用 CDN 時必須穿越大西洋向荷蘭伺服器取資料相比,速度上絕對會快上許多。所以簡單來說,CDN 有效解決了網站伺服器因使用者增加而隨之提升的負載量和距離導致的網路延遲,同時也大大減少了使用者的頻寬成本。
Cloud CDN 是什麼?
現在我們了解 CDN 具備縮短網路延遲時間、減輕後端負擔,和降低頻寬成本的3大功能,而 Google Cloud 所提供的 Cloud CDN 除了上述優點外,還有許多獨特的功能及優勢,一起來認識吧。
Cloud CDN 的用途
Cloud CDN 使用 Google 的全球邊緣網路節點,讓世界各地的使用者能更近距離地取得內容,且主要針對 Google Compute Engine(GCE) 和 Google Cloud Storage(GCS) 提供的網站和應用程式加快內容傳遞速度。
Google 在全球約 100 多個區域皆設有 CDN 節點(分布位置請參考《Cloud CDN 官方說明文件》),而 CDN 節點只會回應可快取的內容,且此回應會與後端的配置一起在 HTTP 回應標頭中傳遞。另外,透過 Cloud CDN 撤銷快取內容僅需短短幾分鐘,對使用者來說非常很方便。
Cloud CDN 6大優點
一、透過 Anycast IP 將內容發布至全世界
Cloud CDN 擁有與全球大多數主要用戶網際網路服務供應商(ISP)對等互連的邊緣快取功能,可提供連線能力給世界上更多的用戶。使用者無論在哪個區域,只需透過 Load Balancer 的全球唯一 IP,就可以取得後端內容。這不僅可維持全球一致的傳輸效能,也能簡化管理作業。
圖片來源:pixabay
二、針對最後一哩(Last Mile)的效能進行最佳化
Cloud CDN 與 Google Cloud 的高效能私人網路相輔相成,且支援 HTTP/2 和 QUIC 等新型通訊協定,可為行動用戶或新興市場用戶提升網站或應用程式效能。
三、與 Google Cloud 相互整合
Cloud CDN 與 Cloud Monitoring 還有 Cloud Logging 緊密整合,提供立即可用的詳細延遲指標及原始 HTTP 請求記錄檔,使用戶能深入瞭解實際情況。另外用戶也可將記錄檔匯出至 Cloud Storage 或 BigQuery 進一步分析。
四、支援混合雲、多雲及地端架構
Cloud CDN 可讓使用者以 Google 的分散式高效能邊緣快取基礎架構,傳遞託管於地端部署系統或其他雲端服務的內容,因此用戶資料即便未搬遷上雲,也能透過 Cloud CDN 優化內容傳遞速度。
圖片來源:freepik
五、內建安全資料傳輸層
Cloud CDN 的代管憑證服務提供傳輸層安全標準(TLS/SSL)憑證,減少用戶取得或更新 SSL 憑證的需求,且不會產生額外費用。另外用戶也可自備憑證,不需支付額外費用。
六、已簽署的 Cookie 與網址
Cloud CDN 可透過 Google Cloud 遍布全球的快取功能提供回應,所以即使要對每個用戶的請求進行授權也沒問題。
Cloud CDN 架構介紹
Cloud CDN 搭配負載平衡時僅需按一個鍵就可啟用,並只能與外部 HTTP(S) 負載平衡一起向用戶端傳輸內容,而此種負載平衡可確保資料在傳輸過程中安全無虞。
Cloud CDN 內容來源
外部 HTTP(S) 負載平衡提供一個前端 IP 和 Port 接收用戶發出的請求及回應該請求的後端,而該後端可提供靜態與動態的混合內容,所以 Cloud CDN 的內容可來自負載平衡中 5 種不同的後端(即 Cloud CDN 的來源伺服器)。
當中最常被使用的後端類型非 GCE 的 Instance groups 及 GCS 的 Bucket 莫屬,GCS 的 Bucket 可提供靜態內容;而 Instance groups 可處理 PHP 流量。但假設今天後端在地端 ,則可考慮透過指定 FQDN:port 或 IP:port,搭配使用 Internet NEGs 作為後端服務。
使用 Internet NEGS 作為 Cloud CDN 的後端時,Google 邊緣基礎架構(Google Edge infrastructure)會先中止使用者的連線到 GCP 內部後端,再將連線連接到外部後端(地端服務)。Cloud CDN 再將外部後端的內容快取至 CDN 節點,藉此提高可用性並減少使用者和地端伺服器間的延遲。
Cloud CDN 搭配負載平衡分流
正常來說,當使用者從外部 HTTP(S) 負載平衡請求內容時,請求會先到達位於 Google 網路邊緣的 Google 前端(Google Front Ends, GFEs)。但如果負載平衡的 URL map 將流量傳送到有啟動 Cloud CDN 的後端,則 GFE 會使用 Cloud CDN。如想了解 Cloud CDN 的詳細設定方式,請參考《Cloud CDN 官方說明文件》。
Cloud CDN 搭配外部 HTTP(S) 負載平衡的架構圖
Cloud CDN Cache
Cache 又稱 CDN 節點,是一組儲存和管理內容的伺服器,用來加速處理未來對該內容的請求,而 Cache 的內容是來源伺服器中可快取內容(Cacheable content)的副本。Cloud CDN 雖提供快取功能,但同時還需搭配 Cache mode 來控制 Cloud CDN 是否緩存後端的內容,而 Cache mode 一共有以下三種類型。
Cache mode | Validation behavior |
CACHE_ALL_STATIC(Default) | 會自動緩存沒有 no-store、private 或 no-cache 指令的靜態內容,設置有效緩存指令的 Origin 回應也會被緩存 |
USE_ORIGIN_HEADERS | 需要 Origin 的回應來設置有效的緩存指令和緩存 Header。若回應不包含這些指令,則需要從 Origin Server 轉發 |
FORCE_CACHE_ALL | 無條件緩存所有 Origin 回應的內容。但如果後端提供 private 或 per-user 的內容,如動態 HTML 或 API 回應,則不適用此模式 |
Cache hit 及 Cache miss
Cache hit(快取命中)是指當 GFE 發現 CDN 節點內有與使用者請求相對應的回應時,會透過其快取鑰匙(Cache key)查找內容並直接將內容回應給使用者。除了縮短往返時間,來源伺服器也不必處理請求,但當請求部分來自 CDN 節點,部分來自後端,則會發生 Partial hit(部分快取命中)。
Cache miss(快取失敗)是指當使用者發出請求,而 GFE 發現 CDN 節點內沒有相對應內容時,會嘗試從第二個 CDN 節點獲取內容。如果發現有可回應的內容,則第二個節點的 GFE 會先透過 cache-to-cache fill 將內容發送至第一個節點,再傳輸給使用者。
但若還是沒有符合的內容,第二個節點的 GFE 就會將請求轉發至外部 HTTP(S) 負載平衡,負載平衡再將請求轉發到來源伺服器。最後,當 CDN 節點收到來自來源伺服器的內容時,GFE 才會將內容轉發回應給使用者。另外,若想得知 Cloud CDN Cache 的效能,可以查看 Cache hit ratio(快取命中率)。
Cache hit ratio 是從 CDN 節點中提供請求內容的次數百分比。 舉例來說:快取命中率 60% 代表請求的內容有 60% 從 CDN 節點提供;40% 由來源伺服器提供。當快取命中率低,代表大部分請求的內容仍是由來源伺服器提供,這不僅會降低存取速度還會提高延遲,進而讓 Cloud CDN 失去其功效。
Cache egress 及 Cache fill
若來源伺服器可緩存使用者請求的回應,則 Cloud CDN 會將回應的資料儲存在 CDN 節點中以供未來請求使用。其中資料從 CDN 節點傳輸至使用者的過程稱作 Cache egress(快取輸出);而資料從來源伺服器傳輸至 CDN 節點的過程則為 Cache fill(快取填補)。另外,快取填補也適用於資料從另一個 CDN 節點傳輸至另一個 CDN 節點的情況(即 cache-to-cache fill),過程如下圖所示。
提高 Cache hit ratio
如上文所述,快取命中率與 Cloud CDN 效能呈正相關,因此要最佳化 Cache 性能和可擴展性,提升快取命中率非常重要。 而提升快取命中率可從 Cache mode 和 Custom cache key(自定義快取鑰匙)下手,下面會詳細介紹如何透過這 2 項設定提升快取命中率。
Cache mode 類型
各類網站中不可或缺的文字、圖片、影音檔案和程式碼(如:CSS、JavaScript)都屬於常見靜態內容,而 CACHE_ALL_STATIC 這個 Cache mode 會自動緩存常見靜態內容。所以如後端內容多屬於《Cloud CDN 官方說明文件》中提及的常見靜態內容,便可透過 CACHE_ALL_STATIC 此 Cache mode 來提高 Cloud CDN 效能。
Custom cache key
第二個提高快取命中率的方式是使用 Custom cache key(自定義快取鑰匙)。在預設情況下,Cloud CDN 會使用完整的 URL 產生 Cache key,但若要自訂 Cache key 是否含有協議(protocol)、主機(Host)和查詢字串(query string),則必須自定義 Cache key。其中 Custom cache key 設定方法,可參考《Cloud CDN 官方說明文件》。
圖片來源:freepik
須自定義 Cache key 的其中一個狀況是, 兩台主機解析到同一個來源 IP 要使用相同的服務(同網站)。在預設情況下,由於兩個 HTTP 請求中的主機標頭不同,Cloud CDN 會快取兩個內容相同的副本。但透過自定義 Cache key 忽略主機標頭便可避免上述狀況發生,進而提高快取命中率及 Cloud CDN 效能。
Cloud CDN 計費方式與定價
在介紹完 Cloud CDN 的功能及特色後,最後來說明一下 Cloud CDN 的計費方式。 Cloud CDN 的收費分為 2 大階段,第一階段的頻寬和 HTTP/HTTPS 收費與否取決於快取查詢是否被觸發。其中 GET 和 HEAD HTTP 會觸發快取查詢,POST 和 PUT 等其他方法則不會。
而第二階段中 Cloud CDN 的收費又可分成「快取命中」、「快取失敗」和「請求內容不可被快取」3種情況。若快取命中,需支付快取查詢及輸出的費用;而快取失敗時,除了要支付快取查詢及輸出費用,還需額外支付快取填補及操作 GCE 或 GCS 的費用。最後,如果用戶請求的內容是不可被快取的,則 GCP 會按照 GCE 或 GCS 的標準網際網路輸出費率收費。另外如果請求的內容來自外部後端,則費用會依 GCE 的標準網際網路輸出費率收取。
另外補充說明,撤銷任何快取也必須支付相關費用,而每次撤銷快取時,可以指定一個路徑或路徑前置字串。這邊附上 Cloud CDN 各項功能的收費標準表,若想立刻估算詳細費用,可透過 Google Cloud Pricing Calculator 計算。
截圖自:Google Cloud CDN pricing document 頁面©2022 Google
其中快取輸出以 Cloud CDN 快取產生的回應量為收費依據,費用會依目的地和每月用量變動。目的地是指用戶 IP 位址所在區域;每月用量是以每個目的地的每項專案為單位。而快取填補則是以填入 Cloud CDN 快取所需的資料量為收費依據,費用會依來源和目的地變動。其中來源為後端服務的所在區域,但如果後端服務不在 GCP 內,則所在區域會以來源 IP 位址為準。
項目 | 收費依據 | 注意事項 |
快取輸出 | 快取產生的回應量 | 費用依目的地和每月用量變動 |
快取填補 | 快取所需的資料量 | 費用依來源和目的地變動 |
Cloud CDN 計費注意事項
最後在計費上提醒大家兩個小地方。第一,Cloud CDN 費用會每日累計,但只會在帳單週期結束時才進行收費。如想知道未出帳的使用量,可在 Google Cloud Console 的 Billing 頁面查看。第二則是快取輸出或快取填補的計量位元組數包含 HTTP 回應標頭、回應內文及任何 Trailers。
以上就是 CDN 和 Cloud CDN 的基本介紹,大家若想了解更多細節,歡迎在下面留言。
最後,如果想更了解 GCP 或有技術服務相關需求也都歡迎聯絡我們獲得更進一步的資訊。
▋延伸閱讀:
・什麼是負載平衡?原理、6大 GCP Load Balancer 完整介紹 ・利用 Cloud CDN 自動緩存靜態內容 ・GCP HTTP(S) Load Balancer 負載平衡依網址分流教學 ・【GCP 教學】負載平衡 Load Balancer 和 Instance Group ・GCP – Cloud Load Balancing 之分類與選擇