啟用動態壓縮

動態壓縮功能會自動壓縮 Media CDN 提供的回應。一般來說,透過網路傳送的資料大小會縮減 60% 至 85%

縮減大小可加快樣式表 (CSS)、指令碼 (JavaScript) 和影片資訊清單 (HTTP 即時串流/DASH) 等重要資產的下載速度,大幅縮短網頁載入和影片播放時間。

大型即時影片播放清單 (資訊清單) 含有大量重複資料和擷取作業,包括每個區段的主機和路徑前置字元,以及 HTTP 即時串流或 DASH 播放清單中繼資料。只要播放清單越快載入,或是相關更新越快下載,用戶端就能越快解析並開始下載參照影片片段。HTTP 即時串流和 DASH 播放清單的總大小通常會縮減超過 90%。

如要進一步瞭解壓縮回應的好處,請參閱「網站基礎知識指南」。

動態壓縮的運作方式

啟用動態壓縮後,如果用戶端接受其中一種支援的壓縮演算法 (brgzip),從來源提供的可壓縮內容就會先壓縮再傳送。

Media CDN 會在所有符合壓縮條件的回應中加入 Vary: Accept-Encoding 標頭。如需相關資訊,請參閱「無法壓縮的內容」。

此外,如果要求的 Accept-Encoding 標頭指定 brgzip (並選擇性地包含非零的 q 參數),表示偏好壓縮內容,Media CDN 會執行下列操作:

  • 從回應中移除 Content-Length 標頭;這是為了盡快提供回應所必須,因為在整個回應壓縮完成前,無法得知完整內容長度。如果是 HTTP/1.1 及更早的版本,Media CDN 會在不使用 Content-Length 時,於回應中採用 Transfer-Encoding: chunked

    回應經過壓縮及快取後,Media CDN 可能會在後續回應中加入 Content-Length 標頭,並將值設為壓縮後內文內容的長度。

  • Accept-Ranges 設為 none。這會通知用戶端,系統會忽略這項資源的範圍要求。

  • 依據 RFC 9110 第 8.8.3 節的規定,弱化所有強式 ETag 回應標頭。例如,ETag: "xyzzy" 會替換為 ETag: W/"xyzzy"

  • Content-Encoding 標頭設為 brgzip,表示所選的壓縮演算法。

    Media CDN 會根據預期的回應壓縮比和壓縮速度/處理量,選擇最佳壓縮演算法。

    • 如果用戶端支援 Brotli 壓縮,即使其他壓縮演算法在 Accept-Encoding 標頭中的 q 值較高,系統仍會使用 Brotli 壓縮。

    • HLS 資訊清單只會使用 gzip 壓縮。

    Media CDN 會決定壓縮等級,在用戶端的總下載資料大小和 CPU 成本取得平衡。較高的壓縮等級並不一定能提升效能,尤其在功率較低的行動裝置上,更是如此。

設定動態壓縮

您可以對處理要求的路由啟用動態壓縮功能。

事前準備

請執行下列步驟:

為路徑規則啟用動態壓縮

根據預設,路由規則的壓縮模式為停用。

將模式設為自動後,系統就會為每個符合資格的回應啟用動態壓縮功能。此外,它會指示 Media CDN 自動選擇最佳壓縮演算法。

如要啟用動態壓縮,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 如要開啟服務的「詳細資料」頁面,並為該服務設定路徑規則,請按一下服務名稱。

  3. 如要切換至編輯模式,請按一下「編輯」按鈕。

  4. 如要前往「Routing」(轉送) 部分,請按一下「Next」(下一步)

  5. 如要編輯主機規則,請按一下箭頭展開規則。

  6. 如要編輯路徑規則,請按一下相應資料列的「編輯」

  7. 在「編輯路徑規則」窗格中,按一下「進階設定」

  8. 選用:在「Route action」(轉送動作) 部分,新增「CDN policy」(CDN 政策) 項目。

    CDN 政策可讓 Media CDN 壓縮內容一次,並提供多次,進而節省頻寬並加快傳遞速度。

  9. 在「動態壓縮」部分,選取「啟用壓縮」

  10. 如要儲存路徑規則,請按一下「儲存」

  11. 如要儲存服務變更,請按一下「更新服務」

gcloud 和 YAML

  1. 將 Media CDN 設定匯出為 YAML 檔案。使用 gcloud edge-cache services export 指令。

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    更改下列內容:

    • SERVICE_NAME:服務名稱
    • FILENAME:YAML 檔案的名稱
  2. 在 YAML 檔案的路由定義中,於 routeAction 下方將 compressionMode 設為 AUTOMATIC,如下列範例所示:

    routing:
    hostRules:
    - hosts:
      - media.example.com
      pathMatcher: routes
    pathMatchers:
    - name: routes
      routeRules:
        - priority: 2
    origin: origin1
    matchRules:
    - pathTemplateMatch: "/**.m3u8" # HLS playlists
    - pathTemplateMatch: "/**.mpd" # DASH manifests
    routeAction:
      cdnPolicy:
        defaultTtl: 5s
      compressionMode: AUTOMATIC
    
  3. 如要更新服務,請從 YAML 檔案匯入 Media CDN 設定。使用 gcloud edge-cache services import 指令。

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Terraform

下列 Terraform 程式碼片段顯示已啟用動態壓縮的路由規則。

route_rule {
  description = "a route rule with dynamic compression, priority=2 (high)"
  priority    = 2
  match_rule {
    path_template_match = "/**.m3u8" # HLS playlists
  }
  match_rule {
    path_template_match = "/**.mpd" # DASH manifests
  }
  origin = google_network_services_edge_cache_origin.default.name
  route_action {
    cdn_policy {
      cache_mode = "FORCE_CACHE_ALL"
      client_ttl = "300s"
    }
    compression_mode = "AUTOMATIC"
  }
  header_action {
    response_header_to_add {
      header_name  = "x-cache-status"
      header_value = "{cdn_cache_status}"
    }
  }
}

設定很快就會傳播至所有邊緣位置。

為路徑啟用動態壓縮功能後,新設定會在正式版機器上生效,即使有未壓縮的快取版本,Media CDN 也會開始壓縮符合資格的回應。Media CDN 擷取及壓縮新內容時,原始伺服器的流量可能會暫時遽增。

停用路由規則的動態壓縮功能

如要停用動態壓縮,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 如要開啟服務的「詳細資料」頁面,並設定路徑規則,請按一下服務名稱。

  3. 如要切換至編輯模式,請按一下「編輯」按鈕。

  4. 如要前往「Routing」(轉送) 部分,請按一下「Next」(下一步)

  5. 如要編輯主機規則,請按一下箭頭展開規則。

  6. 如要編輯路徑規則,請按一下相應資料列的「編輯」

  7. 在「編輯路徑規則」窗格中,按一下「進階設定」

  8. 在「動態壓縮」部分,取消選取「啟用壓縮」

  9. 如要儲存路徑規則,請按一下「儲存」

  10. 如要儲存服務變更,請按一下「更新服務」

gcloud 和 YAML

  1. 將 Media CDN 設定匯出為 YAML 檔案。使用 gcloud edge-cache services export 指令。

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    更改下列內容:

    • SERVICE_NAME:服務名稱
    • FILENAME:YAML 檔案的名稱
  2. 在 YAML 檔案的路徑定義中,將 compressionMode 設為 DISABLED

  3. 如要更新服務,請從 YAML 檔案匯入 Media CDN 設定。使用 gcloud edge-cache services import 指令。

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

如果特定路徑的動態壓縮功能發生問題,例如與特定用戶端 (智慧型電視或串流裝置) 的相容性問題,請停用動態壓縮功能,避免 Media CDN 在該路徑上提供壓縮內容。

為路徑停用動態壓縮功能後,Media CDN 就會停止從快取提供壓縮內容。先前快取的所有壓縮回應都會失效,CDN 會從來源擷取未壓縮的版本。

可壓縮的內容類型

動態壓縮設定會根據 Content-Type HTTP 回應標頭,套用至下列 MIME 類型。系統不會壓縮沒有 Content-Type 標頭的回應。

常見的內容類型及其 MIME 類型如下:

  • HTML 內容:text/html
  • 樣式表:text/css
  • JavaScript:application/javascript
  • JSON:application/json
  • HTTP 即時串流播放清單:application/x-mpegURLapplication/vnd.apple.mpegURL
  • DASH 資訊清單:application/dash+xml

下表摘要說明 MIME 類型對壓縮能力的影響。

  可壓縮的 MIME 類型
完全比對 application/csv
application/javascript
application/json
application/json+protobuf
application/signed-exchange
application/wasm
application/x-javascript
application/x-nacl
application/x-plist
application/x-pnacl
application/x-protobuf
application/x-protobuffer
application/x-sdch-dictionary
application/xml
audio/mpegURL
font/eot
font/otf
font/ttf
image/pwg-raster
image/svg+xml
image/vnd.microsoft.icon
image/x-icon
video/vnd.mpeg.dash.mpd
模式比對 application/*+json
application/*+xml
application/*mpegURL
text/*

圖片和影片格式 (例如 image/jpegimage/pngvideo/mpeg4) 幾乎一律都已經過壓縮。因此 Media CDN 不會壓縮這些檔案。重新壓縮已壓縮的回應不太能夠縮減檔案大小,且用戶端在收到這類回應時,可能會出現非預期的行為。

無法壓縮的回應

媒體 CDN 不會壓縮具有下列一或多項特性的回應:

  • 回應沒有與可壓縮內容類型相符的 Content-Type 標頭。
  • 回應沒有 Content-Length 標頭。
  • 回應含有 Content-Encoding 標頭。這表示來源已壓縮回應。因此 Media CDN 不得進行任何額外的動態壓縮。
  • 回覆內容小於 1 KiB。

    壓縮和解壓縮所花費的時間通常會抵銷任何效益。而且壓縮的內容較少,可能會降低壓縮效率,導致壓縮比率下降。

  • 回應大於 1 MiB。

    Media CDN 會壓縮回應,但不會超過快取物件的大小上限 (不含位元組範圍快取)。

  • 回應含有 Cache-Control: no-transform 標頭。

記錄和監控

啟用壓縮功能後,edgecache.googleapis.com/EdgeCacheRouteRule 下方的現有 https/response_bytes_count 指標會回報壓縮後的回應大小。您可能會發現可壓縮內容的回應位元組總數和傳出資料移轉處理量減少。

Media CDN 記錄檔會在 jsonPayload 中加入 compressionAlgorithmApplied 欄位,指出回應是否已由負載平衡器壓縮,並說明壓縮類型。

{
  insertId: "1c02hw9g3gjay67"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
    cacheId: "IAD-862d661f",
    cacheStatus": "hit,stale",
    compressionAlgorithmApplied: "br"
  },
}

帳單

Media CDN 壓縮回應時,系統會根據傳送至用戶端的最終壓縮位元組數,計算相關的傳出快取或網際網路資料移轉費用。

如果提供大量可壓縮的回應,可能會降低每月傳出資料移轉費用,並為使用者提升效能。

後續步驟