動的圧縮を有効にすると、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-Ranges
をnone
に設定します。これにより、このリソースの範囲リクエストが無視されることがクライアントに通知されます。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 送信元を作成または特定します。
1 つ以上のルートルールを持つMedia CDN サービスを作成または特定します。
ルートルールで動的圧縮を有効にする
デフォルトでは、ルートルールの圧縮モードは無効になっています。
モードを自動に設定すると、対象となるすべてのレスポンスで動的圧縮が有効になります。さらに、最適な圧縮アルゴリズムを自動的に選択するように Media CDN に指示します。
動的圧縮を有効にするには、次の操作を行います。
Console
Google Cloud コンソールで、[Media CDN] ページに移動します。
ルートルールを構成するサービスの [詳細] ページを開くには、サービス名をクリックします。
編集モードに切り替えるには、[編集] ボタンをクリックします。
[ルーティング] セクションに移動するには、[次へ] をクリックします。
ホストルールを編集するには、矢印をクリックして開きます。
ルートルールを編集するには、それぞれの行で
[編集] をクリックします。[ルートルールを編集] ペインで、[詳細構成] をクリックします。
省略可: [ルートのアクション] に CDN ポリシー アイテムを追加します。
CDN ポリシーを使用すると、Media CDN はコンテンツを 1 回圧縮して複数回配信できるため、帯域幅を節約し、配信を高速化できます。
[動的圧縮] セクションで、[圧縮を有効にする] を選択します。
ルートルールを保存するには、[保存] をクリックします。
サービスへの変更を保存するには、[サービスを更新する] をクリックします。
gcloud と YAML
Media CDN 構成を YAML ファイルにエクスポートします。
gcloud edge-cache services export
コマンドを使用します。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
次のように置き換えます。
SERVICE_NAME
: サービスの名前FILENAME
: YAML ファイルの名前
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
サービスを更新するには、YAML ファイルから Media CDN 構成をインポートします。
gcloud edge-cache services import
コマンドを使用します。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
構成はすぐにすべてのエッジ ロケーションに伝播されます。
ルートで動的圧縮が有効になり、新しい構成が本番環境マシンで有効になると、圧縮されていないキャッシュに保存されたバージョンが存在する場合でも、Media CDN は対象となるレスポンスを圧縮し始めます。Media CDN が新しいコンテンツを取得して圧縮している間、オリジンへのトラフィックが一時的に急増する可能性があります。
ルートルールの動的圧縮を無効にする
動的圧縮を無効にするには、次の操作を行います。
Console
Google Cloud コンソールで、[Media CDN] ページに移動します。
ルートルールを構成するサービスの [詳細] ページを開くには、サービス名をクリックします。
編集モードに切り替えるには、[編集] ボタンをクリックします。
[ルーティング] セクションに移動するには、[次へ] をクリックします。
ホストルールを編集するには、矢印をクリックして開きます。
ルートルールを編集するには、それぞれの行で
[編集] をクリックします。[ルートルールを編集] ペインで、[詳細構成] をクリックします。
[動的圧縮] セクションで、[圧縮を有効にする] の選択を解除します。
ルートルールを保存するには、[保存] をクリックします。
サービスへの変更を保存するには、[サービスを更新する] をクリックします。
gcloud と YAML
Media CDN 構成を YAML ファイルにエクスポートします。
gcloud edge-cache services export
コマンドを使用します。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
次のように置き換えます。
SERVICE_NAME
: サービスの名前FILENAME
: YAML ファイルの名前
YAML ファイルのルート定義で、
compressionMode
をDISABLED
に設定します。サービスを更新するには、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/jpeg
、image/png
、video/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 によってレスポンスが圧縮されると、関連する送信キャッシュまたはインターネット データ転送の料金は、クライアントに送信される最終的な圧縮バイト数に基づいて計算されます。
圧縮可能なレスポンスが大量に送信されている場合、毎月の送信データ転送料金が減少し、エンドユーザーのパフォーマンスが向上する可能性があります。