啟用動態壓縮

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

縮減大小可加快下載重要資產的速度,例如樣式表 (CSS)、指令碼 (JavaScript) 和影片資訊清單 (HLS/DASH),進而大幅縮短網頁載入和影片啟動時間。

大型直播影片播放清單 (資訊清單) 含有大量重複資料和擷取作業,包括每個片段的主機和路徑前置字元,以及 HLS 或 DASH 播放清單中繼資料。播放清單載入或播放清單更新下載速度越快,用戶等待剖析及開始下載參照影片片段的時間就越短。HLS 和 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 不會壓縮這些檔案。重新壓縮已壓縮的回應很少會縮減檔案大小,而且用戶端收到這類回應時,可能會出現非預期的行為。

無法壓縮的回應

如果回應具有下列一或多項特徵,Media CDN 就不會壓縮:

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

    壓縮和解壓縮所花費的時間,通常會抵銷任何好處。 此外,可壓縮的內容較少,可能會降低壓縮效果,導致壓縮比偏低。

  • 回應大小超過 1 MiB。

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

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

  • 回應含有 Vary: Accept-Encoding 標頭,表示來源可以壓縮回應,因此不需要動態壓縮。

記錄和監控

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

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 壓縮回應,相關的輸出快取或網際網路資料移轉費用,會根據傳送給用戶端的最終壓縮位元組計算。

如果您提供大量可壓縮的回應,這有助於減少每月輸出資料傳輸費用,並提升使用者的效能。

後續步驟