動的圧縮を有効にする

動的圧縮を有効にすると、Media CDN から返されるレスポンスは自動的に圧縮されます。ネットワーク経由で送信されるデータのサイズは、通常のケースで 60%~85% 減少します。

サイズを縮小すると、スタイルシート(CSS)、スクリプト(JavaScript)、動画マニフェスト(HLS/DASH)などの重要なアセットのダウンロードが高速化され、ページの読み込みと動画の開始時間が大幅に短縮されます。

サイズの大きいライブ動画再生リスト(マニフェスト)には、各セグメントのホストとパス接頭辞、HLS または DASH 再生リスト メタデータなど、大量の繰り返しデータとフェッチが含まれています。再生リストの読み込みや再生リストの更新のダウンロードを高速に行うほど、クライアントが参照動画セグメントの解析とダウンロードを待機する時間が短くなります。多くの場合、HLS と DASH の再生リストの合計サイズは 90% 以上削減されます。

レスポンスを圧縮する利点については、Web Fundamentals のガイドをご覧ください。

動的圧縮の仕組み

動的圧縮が有効になっている場合、送信元から配信される圧縮可能なコンテンツは、クライアントがサポートされている圧縮アルゴリズム(br または gzip)のいずれかを受け入れる場合、配信前に圧縮できます。

Media CDN は、圧縮の対象となるすべてのレスポンスに Vary: Accept-Encoding ヘッダーを追加します。関連情報については、圧縮できないコンテンツをご覧ください。

また、リクエストの Accept-Encoding ヘッダーで br または gzip を指定して圧縮コンテンツの優先度を指定した場合(必要に応じてゼロ以外の q パラメータを含める場合)、Media CDN は次の処理を行います。

  • レスポンスから Content-Length ヘッダーを削除します。レスポンス全体が圧縮されるまでコンテンツの全体長は不明であるため、レスポンスをできるだけ早く配信するには、この処理が必要になります。HTTP/1.1 以前では、Media CDN のレスポンスで Content-Length が使用されない場合、Transfer-Encoding: chunked が使用されます。

    レスポンスが圧縮され、キャッシュに保存されると、Media CDN は以降のレスポンスに Content-Length ヘッダーを含め、値を圧縮された本文コンテンツの長さに設定できます。

  • Accept-Rangesnone に設定します。これにより、このリソースの範囲リクエストが無視されることがクライアントに通知されます。

  • RFC 9110 のセクション 8.8.3 に従って、強力な ETag レスポンス ヘッダーの強度を弱めます。たとえば、ETag: "xyzzy"ETag: W/"xyzzy" に置き換えられます。

  • Content-Encoding ヘッダーを br または gzip に設定します。これは、選択した圧縮アルゴリズムを示します。

    Media CDN は、レスポンスの予想される圧縮率と圧縮速度またはスループットに基づいて、最適な圧縮アルゴリズムを選択します。

    • 他の圧縮アルゴリズムの Accept-Encoding ヘッダーの q 値が大きい場合でも、クライアントが Brotli をサポートしている場合は Brotli 圧縮が使用されます。

    • HLS マニフェストは gzip のみを使用して圧縮されます。

    Media CDN は、クライアントの合計ダウンロード サイズと CPU コストのバランスを考慮して圧縮レベルを決定します。圧縮レベルが高くてもパフォーマンスが向上するとは限りません(特に性能の低いモバイル デバイスの場合)。

動的解凍を構成する

リクエストを処理するルートで動的圧縮を有効にできます。

始める前に

手順は次のとおりです。

ルートルールで動的圧縮を有効にする

デフォルトでは、ルートルールの圧縮モードは無効になっています。

モードを自動に設定すると、対象となるすべてのレスポンスで動的圧縮が有効になります。さらに、最適な圧縮アルゴリズムを自動的に選択するように Media CDN に指示します。

動的圧縮を有効にするには、次の操作を行います。

Console

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. ルートルールを構成するサービスの [詳細] ページを開くには、サービス名をクリックします。

  3. 編集モードに切り替えるには、[編集] ボタンをクリックします。

  4. [ルーティング] セクションに移動するには、[次へ] をクリックします。

  5. ホストルールを編集するには、矢印をクリックして開きます。

  6. ルートルールを編集するには、それぞれの行で [編集] をクリックします。

  7. [ルートルールを編集] ペインで、[詳細構成] をクリックします。

  8. 省略可: [ルートのアクション] に CDN ポリシー アイテムを追加します。

    CDN ポリシーを使用すると、Media CDN はコンテンツを 1 回圧縮して複数回配信できるため、帯域幅を節約し、配信を高速化できます。

  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 ファイルのルート定義で、routeActioncompressionModeAUTOMATIC に設定します。次に例を示します。

    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
    

構成はすぐにすべてのエッジ ロケーションに伝播されます。

ルートで動的圧縮が有効になり、新しい構成が本番環境マシンで有効になると、圧縮されていないキャッシュに保存されたバージョンが存在する場合でも、Media CDN は対象となるレスポンスを圧縮し始めます。Media CDN が新しいコンテンツを取得して圧縮している間、オリジンへのトラフィックが一時的に急増する可能性があります。

ルートルールの動的圧縮を無効にする

動的圧縮を無効にするには、次の操作を行います。

Console

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. ルートルールを構成するサービスの [詳細] ページを開くには、サービス名をクリックします。

  3. 編集モードに切り替えるには、[編集] ボタンをクリックします。

  4. [ルーティング] セクションに移動するには、[次へ] をクリックします。

  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 ファイルのルート定義で、compressionModeDISABLED に設定します。

  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
  • HLS 再生リスト: application/x-mpegURL または application/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 では、次の 1 つ以上の特性を持つレスポンスは圧縮されません。

  • レスポンスに、圧縮可能なコンテンツ タイプに一致する Content-Type ヘッダーがない。
  • レスポンスに Content-Length ヘッダーがない。
  • レスポンスには Content-Encoding ヘッダーがあります。これは、送信元がレスポンスをすでに圧縮していることを意味します。そのため、Media CDN では追加の動的圧縮を行う必要はありません。
  • レスポンスが 1 KiB 未満である。

    多くの場合、圧縮と解凍にかかる時間でメリットが相殺されます。 また、圧縮できるコンテンツが少ないため、圧縮効果が低下し、圧縮率が低下する可能性があります。

  • レスポンスが 1 MiB を超えている。

    Media CDN は、バイト範囲のキャッシュなしでオブジェクトのキャッシュに保存できるサイズまでレスポンスを圧縮します。

  • レスポンスに Cache-Control: no-transform ヘッダーがある。

  • レスポンスに Vary: Accept-Encoding ヘッダーがあります。これは、送信元がレスポンスを圧縮できるため、動的圧縮が必要ないことを意味します。

ロギングとモニタリング

圧縮が有効になっている場合、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 によってレスポンスが圧縮されると、関連する送信キャッシュまたはインターネット データ転送の料金は、クライアントに送信される最終的な圧縮バイト数に基づいて計算されます。

圧縮可能なレスポンスが大量に送信されている場合、毎月の送信データ転送料金が減少し、エンドユーザーのパフォーマンスが向上する可能性があります。

次のステップ