無論內容是託管於 Google Cloud、其他雲端或地端,您都可以透過 Media CDN 從原始基礎架構擷取內容。
每項設定可關聯一或多個來源。來源設定會告知 Media CDN 如何連線至基礎架構、何時及如何容錯移轉、重試和逾時,以及連線時要使用的通訊協定。
來源具有下列功能:
- 來源可依主機和路徑定義,因此單一
EdgeCacheService資源可對應至多個來源,例如包含資訊清單、影片片段和其他靜態內容。 - 來源可透過 HTTP/2、HTTPS 和未加密的 HTTP/1.1 存取。
- 您可以設定防火牆規則,只允許特定 Google IP 位址,這樣只有 Media CDN 才能存取來源。
- 重試和容錯移轉行為是依來源設定,可讓服務在發生嚴重錯誤 (例如連線失敗) 時容錯移轉,或根據 HTTP
404 Not Found或 HTTP429 Too Many Requests回應重試。 - 如要存取 Google Cloud 或內部部署的私人資源,請在 Media CDN 後方將外部應用程式負載平衡器設定為來源。
- 系統會針對每個來源設定重新導向追蹤行為。您可以啟用 Media CDN,讓系統將重新導向至其他原始伺服器。
來源規定
如要允許 Media CDN 快取大於 1 MiB 的原始伺服器回應,原始伺服器必須在 HEAD 和 GET 要求的相關回應標頭中加入下列項目 (除非另有規定):
Last-Modified或ETagHTTP 回應標頭 (驗證器)。- 有效的 HTTP
Date標頭。 - 有效的
Content-Length標頭。 Content-Range回應標頭,用來回應Range GET要求。Content-Range標頭必須有bytes x-y/z格式的有效值 (其中z是物件大小)。
預設來源通訊協定為 HTTP/2。如果來源僅支援 HTTP/1.1,您可以為每個來源明確設定通訊協定欄位。
來源防護
Media CDN 提供多層式邊緣基礎架構,目的是盡可能主動減少快取填充作業。
快取基礎架構主要有三層:
- 深層邊緣快取,可處理大部分流量,並在服務供應商網路中卸載。
- Google 的對等互連邊緣,與數千個網際網路服務供應商 (ISP) 連線,並做為邊緣快取的中層快取。如果特定網際網路服務供應商 (ISP) 內沒有這些快取,則做為面向使用者的快取。
- Google 網路中的長尾快取,其他下游快取會從來源之前填補。這些快取支援大量扇入,具有充足的快取儲存容量,並做為原始伺服器防護。
這個拓撲的總覽如下所示:
Media CDN 預設會使用一組有限的全球主要位置,提供來源防護機制。預設來源遮蔽功能會根據使用者的位置運作,而非來源位置。如果使用者與來源伺服器位於相同區域,且全域來源伺服器位於多個區域,這種做法可發揮良好效果,並提供強大的卸載優勢。
彈性防護
如果來源集中在一個區域,但使用者分布在全球各地,根據使用者位置資訊的預設來源遮蔽行為可能無法發揮最佳效果,原因如下:
- 如果預設防護罩位置與集中式來源在地理位置上相距遙遠,快取未命中時的延遲時間會增加
- 將快取填入要求分散到多個全球預設防護位置,而非集中處理,藉此減少來源卸載
彈性遮蔽功能可讓您為來源遮蔽設定單一特定地理區域,通常會選取靠近集中式來源的區域,藉此克服這些限制。彈性防護功能會將所有快取填入要求,透過位於或靠近設定區域的防護快取轉送。這會透過這些以區域為主的快取,將負載整合至來源。
在與集中式來源相同的地理區域中設定彈性防護區域,即可提升下列項目的效能:
- 防護層的快取命中率
- 來源卸載
- 快取失敗和無法快取內容的延遲時間
- 效能穩定性
彈性防護功能與 Media CDN 中設定的任何來源類型都相容。
要求摺疊
要求摺疊功能會主動將同一快取鍵的多個使用者導向快取填補要求,摺疊成每個邊緣節點的單一原始要求。
所有快取層都支援要求摺疊 (或合併),進一步減少原始負載。根據大規模觀察到的實際工作負載:
- 超過 95% 的快取填補作業會使用區域內的專屬長尾快取節點,以減少快取填補成本和延遲時間。
- 來源與 Google 邊緣基礎架構之間的快取填補完全透過 Google 全球專屬骨幹網路進行,可減少快取填補延遲時間並提升可靠性,這兩項優勢對即時串流工作負載來說都非常實用。
- 快取會視情況互相填補,進一步降低快取填補率。
- Media CDN 的快取儲存容量相當大,即使是較不熱門的長尾內容,也能盡量減少逐出率。
視快取設定、使用者負載、工作負載 (例如直播與隨選)、使用者分布情形,以及向各區域使用者放送的長尾內容量 (總語料庫大小) 而定,客戶可能會看到不同的卸載率。
搭配來源防護功能,要求摺疊可進一步減少來源負載和輸出頻寬需求,也是 Media CDN 的預設行為。
系統會記錄已收合的要求,以及 (已收合) 快取填入要求。系統會使用已摺疊工作階段的領導者發出原始填滿要求,這表示原始檔只會看到該用戶端的標頭 (包括 User-Agent)。
如果要求未共用相同的快取金鑰,就無法摺疊。
起源連線
以下各節說明 Media CDN 如何連線至來源、如何發出 HTTP 要求,以及如何驗證要求。
支援的來源和通訊協定
Media CDN 直接支援任何可公開存取的 HTTP 端點做為來源,包括:
- Cloud Storage 值區,包括透過 Identity and Access Management 服務帳戶存取的私人值區
- 外部應用程式負載平衡器
- 與 Amazon S3 相容的值區,包括使用 AWS Signature 第 4 版的私有值區
- 其他公開可用的物件儲存空間,例如 Azure Blob 儲存體
- 公開可用的網路伺服器,例如公開 VM 或地端主機
連線至來源時,會透過安全通道和 Google 的全球骨幹網路。
下表詳細列出支援的來源通訊協定。
| 通訊協定 | 支援 | 必須符合 SSL (TLS) 規定 |
|---|---|---|
| HTTP/2 | 是 (預設) | 是 |
| HTTPS (透過 TLS 的 HTTP/1.1) | 是 | 是 |
| HTTP/1.1 | 是 | 否 |
Media CDN 預設會使用 HTTP/2 (h2) 連線至來源。HTTP/2 和 HTTPS 都需要有效的公開信任 TLS (SSL) 憑證。有效憑證是指未過期、由公開憑證授權單位簽署,且主體別名與傳送至來源的主機名稱相符的憑證。
注意:
- 如果來源不支援 HTTP/2,您可以明確將通訊協定 (以來源為單位) 設為
HTTP(HTTP/1.1) 或HTTPS(透過 TLS 的 HTTP/1.1)。 - 將來源通訊協定設為 HTTPS 或 HTTP/1.1 時,Media CDN 不會交涉替代通訊協定 (例如 HTTP/2)。同樣地,設定 HTTP/2 時,連線不會改回 HTTP/1.1,以明確指出來源連線行為。
- Media CDN 會根據通訊協定自動使用正確的通訊埠:HTTP 使用通訊埠
80,HTTPS 和 HTTP/2 使用通訊埠443。
原始要求標頭
連線至來源時,Media CDN 預設會使用用戶端要求的 Host 標頭。
下表記錄在不同設定情境下,來源在傳入要求中看到的內容:
| 用戶端要求 | EdgeCacheService.hostRewrite |
EdgeCacheOrigin.hostRewrite |
originAddress | 主機標頭 / 來源的 TLS SNI |
|---|---|---|---|---|
| media.example.com | 無 | 無 | backend.example.com | media.example.com |
| media.example.com | service.example.com | 無 | backend.example.com | service.example.com |
| media.example.com | 無 | origin.example.com | backend.example.com | origin.example.com |
| media.example.com | service.example.com | origin.example.com | backend.example.com | origin.example.com |
| media.example.com | service.example.com | origin.example.com | gs://vod-content-bucket | 根據 bucket 名稱自動設定 |
如果主要來源和任何容錯移轉來源共用相同的 routeRule 或 hostRewrite 設定,就會看到相同的主機標頭。
使用 Cloud Storage 值區做為來源時,系統會忽略所有 hostRewrite 設定,因為 Cloud Storage 值區不支援替代主機標頭值。系統會根據 bucket 名稱自動設定主機標頭。
要求中的 TLS SNI (伺服器名稱指標) 值 (適用於 HTTP/3、HTTP/2 和 HTTPS 要求) 會設為與傳送至來源的主機標頭相同的值。
如要瞭解如何為每個路徑設定重寫主機標頭,請參閱「設定服務路徑」。如要瞭解如何設定每個來源的覆寫動作,請參閱不追蹤重新導向的來源容錯移轉。
允許來源接收來自 Media CDN 的流量
為降低未經授權存取內容的風險,請在來源使用 IP 許可清單,封鎖所有 IP 位址的存取權,但 Google 用於將要求傳送至外部來源的特定 IP 位址範圍除外。這樣一來,只有 Media CDN 才能連線至來源伺服器。
下表摘要說明防火牆規則的必要來源 IP 位址範圍:
| IP 位址類型 | 要求來源 IP 範圍 |
|---|---|
| IPv4 | 136.124.4.0/22 |
| IPv6 | 2001:4860:4864:a::/64 |
使用下列網址存取 JSON 檔案,其中包含 Google 指派的最新 IP 位址範圍。
https://www.gstatic.com/ipranges/mediacdn.json
容錯移轉和逾時
以下各節會說明這些設定選項:
- 逾時:決定 Media CDN 等待連線至來源或回應要求的時間長度。
- 重試:判斷 Media CDN 是否會重試對來源的來源 HTTP 要求,以及重試的條件。
- 容錯移轉:判斷 Media CDN 是否會在第一個來源無法使用或傳回特定狀態碼時,嘗試連線至容錯移轉來源。
來源逾時
您可以透過逾時設定,設定觸發來源重試和容錯移轉行為的時間,以及觸發後續用戶端容錯移轉的時間。
以下說明 Media CDN 支援的可設定逾時:
connectTimeout和maxAttemptsTimeout會限制 Media CDN 尋找可用回應的時間。這兩種逾時都包含來源傳回標頭的時間,以及判斷是否要使用容錯移轉或重新導向的時間。
connectTimeout會針對每次嘗試連線至來源的作業獨立套用,而maxAttemptsTimeout則包含所有嘗試連線至來源的作業所需時間,包括容錯移轉和重新導向。系統會將重新導向視為額外嘗試連線至來源,並計入已設定來源的maxAttempts。當 Media CDN 遇到非重新導向的回應時 (例如來自重新導向或容錯移轉來源),系統會套用
readTimeout和responseTimeout值。重新導向的來源會使用為EdgeCacheOrigin設定的connectTimeout、readTimeout和responseTimeout值,而EdgeCacheOrigin遇到重新導向。responseTimeout和readTimeout可控制串流回覆的耗時長度。Media CDN 決定要使用上游回應後,connectTimeout和maxAttemptsTimeout都不重要。此時,readTimeout和responseTimeout會生效。
無論各個 EdgeCacheOrigin 設定的 maxAttempts 為何,Media CDN 最多會嘗試連線至所有來源四次。Media CDN 會使用主要 EdgeCacheOrigin 中的 maxAttemptsTimeout 值。系統會為每次嘗試設定每次嘗試的逾時值 (connectTimeout、readTimeout 和 responseTimeout)。EdgeCacheOrigin
下表說明逾時欄位:
| 欄位 | 預設 | 說明 |
|---|---|---|
| connectTimeout | 5 秒 | Media CDN 從開始要求到判斷回應是否可用,所能花費的時間上限。實際上, 逾時時間值必須介於 1 秒至 15 秒。 |
| maxAttemptsTimeout | 15 秒 | 所有來源 (包含容錯移轉來源) 連線嘗試的最長持續時間,超過此時間系統即會將錯誤傳回用戶端。如果未在逾時前收到回應,系統會傳回 HTTP 逾時時間值必須介於 1 秒至 30 秒。 這項設定會定義所有來源連線嘗試的總時間長度 (包括容錯移轉來源),以限制用戶端等待內容開始串流的總時間。系統只會使用第一個 |
| readTimeout | 15 秒 | 單一 HTTP 回應讀取作業之間的等待時間上限。 |
| responseTimeout | 30 秒 | 允許完成回覆的時間上限。 逾時時間值必須介於 1 秒至 120 秒之間。 這段時間的起算點為收到第一個主體位元組的時間。如果回應未在逾時前完成,系統會截斷回應並記錄。 |
請見以下範例:
Origin A會比對對「/segments/」的請求,並具有maxAttemptsTimeout值5s、maxAttempts值1和failover_origin值Origin B。connectTimeout值為預設值5s。如果您嘗試連線至Origin A,但因 TLS 憑證無效而在一秒內連線失敗,您還有約 4 秒的時間可成功連線至Origin B。Origin C會將要求比對至「/manifests/*」,且maxAttemptsTimeout的10s值為10s、maxAttempts的值為3,且failover_origin未設定。connectTimeout值為預設值5s。 Media CDN 最多會嘗試連線至Origin C三次,每次最多允許 10 秒 (maxAttemptsTimeout限制) 建立連線。
重試來源要求
Media CDN 支援來源重試,可重試傳送至來源的失敗要求。您可以指定在嘗試容錯移轉來源 (如有設定) 前,目前來源可重試的次數。
- Media CDN 會嘗試連線至主要來源,直到達到設定的
maxAttempts值為止,預設值為1。 - Media CDN 最多會重試來源連線三次,如果仍無法連線,就會失敗並向使用者傳回 HTTP
502 Bad Gateway錯誤。這包括任何容錯移轉來源連線,這些連線會計入三項限制。 - 設定來源資源時,您可以使用
originAddress欄位設定主要來源,然後設定選用的failoverOrigin。failoverOrigin指向另一個來源資源。
每個來源的 retryConditions 會指定哪些類型的失敗會觸發重試:
| 條件 | 預設 | 說明 |
|---|---|---|
| CONNECT_FAILURE | ✔️ | 失敗時重試,包括轉送、DNS、傳輸層安全標準 (TLS) 握手錯誤和 TCP/UDP 逾時。 |
| HTTP_5XX | 在任何 HTTP 5xx 狀態碼上重試。 |
|
| GATEWAY_ERROR | 與 5xx 類似,但僅適用於狀態碼 502、503 或 504。 |
|
| RETRIABLE_4XX | 針對可重試的 4xx 狀態碼 (包括 409 和 429) 進行重試。 |
|
| NOT_FOUND | 在 HTTP 404 狀態碼上重試。 |
|
| FORBIDDEN | 在 HTTP 403 狀態碼上重試。 |
如果需要跨來源進行主動健康狀態檢查、循環配置或負載感知導向,可以將外部應用程式負載平衡器設定為主要來源。
容錯移轉行為
下表說明容錯移轉的運作方式,以及用戶端會觀察到的回應:
| 情境 | 已設定容錯移轉 | 向使用者顯示的狀態 |
|---|---|---|
| Media CDN 嘗試連線至來源,但兩次嘗試後 (預設) 均未收到 HTTP 回應。 | 否 | HTTP 502 Bad Gateway |
Media CDN 嘗試連線至主要來源,但連線失敗 (TLS 交握錯誤)。系統會嘗試連線至您設定的容錯移轉來源,但該來源傳回 HTTP 404 錯誤。 |
是 | HTTP 404 Not Found |
| Media CDN 嘗試連線至主要和容錯移轉來源,但未收到 HTTP 狀態碼。 | 是 | HTTP 502 Bad Gateway |
如果 Media CDN 收到與任何已設定 retryConditions 相符的狀態碼 (例如 HTTP 404 Not Found 或 HTTP 429 Too Many
Requests 錯誤),且後續重試和容錯移轉來源要求持續失敗,系統會在來源嘗試次數用盡後,將 HTTP 502 Bad Gateway 錯誤傳回給用戶端。
來源容錯移轉的最佳做法
為容錯移轉或負載平衡設定多個來源時,請確認媒體內容和 Vary、ETag 和 Last-Modified 標頭行為在來源之間保持一致。
最佳做法是只為您信任及控管的來源設定來源重新導向。請務必信任重新導向鏈結中的每個來源,因為每個來源都會產生由 EdgeCacheService 放送的內容。