動的圧縮を有効にすると、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 に最適な圧縮アルゴリズムを自動的に選択するように指示します。
動的圧縮を有効にするには、次の操作を行います。
コンソール
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
Terraform
次の Terraform スニペットは、動的圧縮が有効になっているルートルールを示しています。
構成はまもなくすべてのエッジ ロケーションに反映されます。
ルートで動的圧縮が有効になり、新しい構成が本番環境マシンで有効になると、Media CDN は圧縮されていないキャッシュ バージョンが存在する場合でも、対象となるレスポンスの圧縮を開始します。Media CDN が新しいコンテンツを取得して圧縮している間、配信元へのトラフィックが一時的に急増する可能性があります。
ルートルールの動的圧縮を無効にする
動的圧縮を無効にするには、次の操作を行います。
コンソール
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 によってレスポンスが圧縮されると、関連する送信キャッシュまたはインターネット データ転送の料金は、クライアントに送信される最終的な圧縮バイト数に基づいて計算されます。
圧縮可能なレスポンスが大量に送信されている場合、毎月の送信データ転送料金が減少し、エンドユーザーのパフォーマンスが向上する可能性があります。