送信元の概要

Media CDN を使用すると、コンテンツが Google Cloud内、別のクラウド、オンプレミスでホストされているかどうかにかかわらず、送信元インフラストラクチャからコンテンツを取得できます。

各構成には、1 つ以上のオリジンを関連付けることができます。オリジン構成では、インフラストラクチャへの接続方法、フェイルオーバー、再試行、タイムアウトのタイミングと方法、接続時に使用するプロトコルを Media CDN に指示します。

オリジンには次の特徴があります。

  • 送信元はホストごと、ルートごとに定義できます。これにより、単一の EdgeCacheService リソースを、マニフェスト、動画セグメント、その他の静的コンテンツなどを含む複数の送信元にマッピングできます。
  • 送信元には、HTTP/2、HTTPS、非暗号化の HTTP/1.1 によって到達できます。
  • 再試行とフェイルオーバーの動作は送信元ごとに構成され、ハードエラー(接続エラーなど)が発生した場合にフェイルオーバーしたり、HTTP 404 Not Found または HTTP 429 Too Many Requests レスポンスに基づいて再試行を実行したりできます。
  • Google Cloud またはオンプレミス内のプライベート リソースには、Media CDN の背後にある外部アプリケーション ロードバランサを送信元として構成することでアクセスできます。
  • リダイレクト フォローの動作は、送信元ごとに構成されます。Media CDN で、他のオリジン サーバーへのリダイレクトを追跡するように設定できます。

オリジンの要件

Media CDN が 1 MiB を超える送信元のレスポンスをキャッシュに保存できるようにするには、指定されていない限り、送信元に HEAD リクエストと GET リクエストの両方のレスポンス ヘッダーに以下を含める必要があります。

  • Last-Modified または ETag HTTP レスポンス ヘッダー(バリデータ)。
  • 有効な HTTP Date ヘッダー。
  • 有効な Content-Length ヘッダー。
  • Range GET リクエストに対するレスポンスの Content-Range レスポンス ヘッダー。Content-Range ヘッダーには、bytes x-y/zz はオブジェクト サイズ)の形式で有効な値を指定する必要があります。

デフォルトのオリジン プロトコルは HTTP/2 です。送信元が HTTP/1.1 のみをサポートしている場合は、送信元ごとにプロトコル フィールドを明示的に設定できます。

Origin のシールド

メディア CDN は、可能な限りキャッシュ フィルを最小限に抑えるように設計された、ディープ ティアのエッジ インフラストラクチャを提供します。

キャッシュ保存インフラストラクチャには、次の 3 つの主要なレイヤがあります。

  1. ディープ エッジ キャッシュ。トラフィックの大部分を処理し、サービス プロバイダのネットワーク内でオフロードします。
  2. Google のピアリング エッジ。数千の ISP に接続され、エッジ キャッシュの中間層キャッシュとして機能します。特定の ISP 内に存在しない場合は、ユーザー向けのキャッシュとして機能します。
  3. Google のネットワーク内のロングテール キャッシュ。他のダウンストリーム キャッシュが送信元より前にこのキャッシュからフィルします。これらのキャッシュは、大幅なファンインをサポートし、大容量のキャッシュ ストレージを備え、オリジン シールドとして機能します。

このトポロジの概要は次のとおりです。

トポロジの概要。
トポロジの概要(クリックして拡大)。

Media CDN は、限られた一連の主要なグローバル ロケーションを使用して、デフォルトで送信元シールドを提供します。デフォルトのオリジン シールドは、オリジンのロケーションではなく、エンドユーザーのロケーションに基づいて動作します。この方法は、エンドユーザーとオリジン サーバーが同じリージョンにある場合や、グローバル オリジン サーバーが複数のリージョンに配置されている場合に、効果を発揮し、オフロードのメリットを最大限に引き出すことができます。

フレキシブル シールディング

オリジンが 1 つのリージョンに集中しているが、ユーザーがグローバルに分散しているシナリオでは、ユーザーのロケーションに基づくデフォルトのオリジン シールド動作が次のように最適でない可能性があります。

  • デフォルトのシールドの場所が集中型の配信元から地理的に離れている場合、キャッシュミスのレイテンシが増加する
  • キャッシュ入力リクエストを集中させるのではなく、複数のグローバル デフォルト シールド ロケーションに分散することで、オリジンのオフロードを削減

柔軟なシールドは、通常、一元化されたオリジンの近くに選択されるオリジン シールド用に単一の特定の地理的リージョンを構成することで、これらの制限を克服するのに役立ちます。柔軟なシールドは、構成されたリージョン内またはその近くにあるシールド キャッシュを介して、すべてのキャッシュ入力リクエストをルーティングします。これにより、リージョンに焦点を当てたキャッシュを介して、オリジンに負荷が統合されます。

一元管理されたオリジンと同じ地理的リージョンにフレキシブル シールディング リージョンを構成すると、次の点を最適化できます。

  • シールド レイヤのキャッシュ ヒット率
  • オリジン オフロード
  • キャッシュミスとキャッシュ不可能なコンテンツのレイテンシ
  • パフォーマンスの安定性

柔軟なシールドは、Media CDN で構成された任意のオリジン タイプと互換性があります。

リクエストの折りたたみ

リクエストの折りたたみによって、同じキャッシュキーの複数のユーザー ドリブン キャッシュ フィル リクエストが、エッジノードごとにアクティブに 1 つの送信元リクエストに折りたたまれます。

キャッシュ保存のすべてのレイヤでリクエストの折りたたみ(または統合)がサポートされており、オリジン負荷をさらに軽減できます。大規模な実際のワークロードの観測に基づいて:

  • キャッシュ フィルの 95% 以上は、キャッシュ フィルの費用とレイテンシを削減するために、リージョン内の専用のロングテール キャッシュノードを使用します。
  • 送信元と Google 独自のエッジ インフラストラクチャ間のキャッシュ フィルは、Google のグローバル プライベート バックボーン ネットワークを介して完全に実行されます。これにより、キャッシュ フィル レイテンシが短縮され、信頼性が向上します。どちらもライブ ストリーミング ワークロードに有効なメリットです。
  • キャッシュ間でクロスフィルが行われるため、キャッシュ フィル率がさらに低下します。
  • Media CDN はキャッシュ全体で大容量のストレージを備えているため、ロングテールで人気のないコンテンツでも削除率を最小限に抑えることができます。

キャッシュ構成、ユーザー負荷、ワークロード(ライブとオンデマンドなど)、ユーザーの配信、ロングテール コンテンツの量(コーパスの合計サイズ)に応じてオフロード率が異なる場合があります。

送信元シールドと組み合わせることで、リクエストの折りたたみによって送信元の負荷と下り(外向き)帯域幅のニーズがさらに軽減されます。これは Media CDN のデフォルトの動作です。

折りたたまれたリクエストは、クライアント側のリクエストと(折りたたまれた)キャッシュ フィル リクエストの両方をログに記録します。折りたたみセッションのリーダーは、元のフィル リクエストを行うために使用されます。つまり、送信元には、そのクライアントのみのヘッダー(User-Agent を含む)が表示されます。

同じキャッシュキーを共有しないリクエストは、折りたためません。

Origin の接続

以降のセクションでは、Media CDN がオリジンに接続する方法、HTTP リクエストの作成方法、リクエストの認証方法について説明します。

サポートされているオリジンとプロトコル

Media CDN は、一般公開されている HTTP エンドポイントを送信元として直接サポートしています。これには、次のものが含まれます。

オリジンへの接続は、安全なトンネルと Google のグローバル バックボーン ネットワークを介して行われます。

次の表に、サポートされているオリジン プロトコルの詳細を示します。

プロトコル サポート対象 SSL(TLS)が必要
HTTP/2 はい(デフォルト) はい
HTTPS(TLS 経由の HTTP/1.1) はい はい
HTTP/1.1 はい いいえ

Media CDN は、デフォルトで HTTP/2(h2)を使用して送信元に接続します。HTTP/2 と HTTPS の両方で、有効で一般に信頼されている TLS(SSL)証明書が必要です。有効な証明書とは、有効期限が切れておらず、パブリック認証局によって署名され、オリジンに送信されたホスト名と一致するサブジェクト代替名を持つ証明書です。

注:

  • 送信元が HTTP/2 をサポートしていない場合は、プロトコル(送信元ごと)を HTTP(HTTP/1.1)または HTTPS(TLS 経由の HTTP/1.1)に明示的に設定できます。
  • HTTPS または HTTP/1.1 をオリジン プロトコルとして構成する場合、Media CDN は代替プロトコル(HTTP/2 など)をネゴシエートしません。同様に、HTTP/2 を構成する場合、送信元接続の動作を明示的にするために、接続は HTTP/1.1 にフォールバックしません。
  • Media CDN は、プロトコルに基づいて正しいポート(HTTP の場合はポート 80、HTTPS と HTTP/2 の場合はポート 443)を自動的に使用します。

オリジン リクエスト ヘッダー

送信元に接続する場合、Media CDN はデフォルトでクライアント リクエストの Host ヘッダーを使用します。

次の表に、さまざまな構成シナリオで送信元が受信リクエストで確認できる内容を示します。

クライアント リクエスト EdgeCacheService.hostRewrite EdgeCacheOrigin.hostRewrite 元のアドレス ホスト ヘッダー /
送信元での TLS SNI
media.example.com なし なし backend.example.com media.example.com
media.example.com service.example.com なし backend.example.com service.example.com
media.example.com なし origin.example.com backend.example.com origin.example.com
media.example.com service.example.com origin.example.com backend.example.com origin.example.com
media.example.com service.example.com origin.example.com gs://vod-content-bucket バケット名に基づいて自動的に設定されます

プライマリ オリジンとフェイルオーバー オリジンが同じ routeRule または hostRewrite 構成を共有している場合、同じホストヘッダーが表示されます。

Cloud Storage バケットが代替ホスト ヘッダー値をサポートしていないため、Cloud Storage バケットを送信元として使用する場合、hostRewrite 設定は無視されます。ホスト ヘッダーは、バケット名に基づいて自動的に設定されます。

リクエストの TLS SNI(Server Name Indication)値(HTTP/3、HTTP/2、HTTPS リクエストの場合)は、オリジンに送信されるホスト ヘッダーと同じ値に設定されます。

ルートごとの構成でホストヘッダーを書き換える方法については、サービスルートを構成するをご覧ください。オリジンごとのオーバーライド アクションの設定については、リダイレクトのフォローなしのオリジン フェイルオーバーをご覧ください。

フェイルオーバーとタイムアウト

以降のセクションでは、これらの構成オプションについて説明します。

  • タイムアウト: Media CDN が送信元への接続を待機する時間、またはリクエストに応答する時間を決定します。
  • 再試行: Media CDN が送信元への HTTP リクエストを再試行するかどうか、また、どのような条件で再試行するかを指定します。
  • フェイルオーバー: 最初の送信元が使用できない場合、または特定のステータス コードを返す場合に、Media CDN がフェイルオーバー送信元への接続を試みるかどうかを決定します。

オリジンのタイムアウト

タイムアウトを使用すると、送信元の再試行とフェイルオーバーの動作がトリガーされるタイミングと、後続のクライアント フェイルオーバーをトリガーできるタイミングを構成できます。

Media CDN がサポートする構成可能なタイムアウトは次のとおりです。

  • connectTimeoutmaxAttemptsTimeout は、Media CDN が使用可能なレスポンスを見つけるのにかかる時間を制限します。

    どちらのタイムアウトにも、オリジンがヘッダーを返し、フェイルオーバーまたはリダイレクトを使用するかどうかを判断するのにかかる時間が含まれます。connectTimeout は、送信元の試行ごとに独立して適用されますが、maxAttemptsTimeout には、フェイルオーバーとリダイレクトを含むすべての送信元の試行に接続するために必要な時間が含まれます。リダイレクトに従うと、送信元への接続の試行が追加でカウントされ、構成された送信元に設定された maxAttempts にカウントされます。

    Media CDN がリダイレクトまたはフェイルオーバー送信元などからのリダイレクト以外のレスポンスを検出すると、readTimeout 値と responseTimeout 値が適用されます。リダイレクトされた送信元は、リダイレクトが発生した EdgeCacheOrigin に構成された connectTimeoutreadTimeoutresponseTimeout の値を使用します。

  • responseTimeoutreadTimeout は、ストリーミング レスポンスにかかる時間を制御します。Media CDN がアップストリーム レスポンスを使用すると判断した後、connectTimeoutmaxAttemptsTimeout も関係なくなります。この時点で、readTimeoutresponseTimeout が有効になります。

Media CDN は、各 EdgeCacheOrigin で設定された maxAttempts に関係なく、すべての送信元で最大 4 回の送信元試行を行います。Media CDN は、プライマリ EdgeCacheOriginmaxAttemptsTimeout 値を使用します。試行ごとのタイムアウト値(connectTimeoutreadTimeoutresponseTimeout)は、各試行の EdgeCacheOrigin に対して構成されます。

次の表に、タイムアウト フィールドを示します。

フィールド デフォルト 説明
connectTimeout 5 秒

Media CDN がリクエストを開始してから送信元が使用可能になるまでの最大時間。この時間が経過するとMedia CDN はレスポンスが使用可能かどうかを判断します。実際には、connectTimeout はリクエストの作成から DNS ルックアップの実行、TLS handshake、TCP/QUIC 接続の確立、さらには HTTP ステータス コードまでカバーします。

タイムアウトは 1 ~ 15 秒の値にする必要があります。

maxAttemptsTimeout 15 秒

送信元に対するすべての接続試行の最大時間。この時間を超えるとクライアントにエラーを返します。これにはフェイルオーバー送信元に対する接続も含まれます。レスポンスが返される前にタイムアウトに達すると、HTTP 504 が返されます。

タイムアウトは 1 秒から 30 秒の範囲の値にする必要があります。

この設定は、すべての送信元の接続試行(フェイルオーバー送信元を含む)の合計時間を定義します。これは、クライアントがコンテンツのストリーミング開始を待機する合計時間の上限を設定するためです。最初の maxAttemptsTimeout 値のみが使用されます。ここで、最初のは、指定されたルート用に構成された送信元によって定義されます。

readTimeout 15 秒

1 回の HTTP レスポンスの読み取り間の最大待機時間。readTimeoutresponseTimeout によって制限されます。HTTP レスポンスのすべての読み取りは、responseTimeout で設定された期限までに完了する必要があります。タイムアウトは 1 秒から 30 秒の範囲の値にする必要があります。レスポンスが完了する前にこのタイムアウトに達すると、レスポンスは切り捨てられてログに記録されます。

responseTimeout 30 秒

レスポンスの完了を許可する最大期間。

タイムアウトは 1 秒から 120 秒の範囲の値にする必要があります。

期間は、最初の本文バイトが受信された時点から測定されます。レスポンスが完了する前にこのタイムアウトに達すると、レスポンスは切り捨てられてログに記録されます。

以下の例を考えてみましょう。

  • Origin A は「/segments/」へのリクエストと照合されます。maxAttemptsTimeout の値は 5smaxAttempts の値は 1failover_originOrigin B です。connectTimeout の値はデフォルトの 5s です。Origin A への接続を試み、無効な TLS 証明書が原因で 1 秒以内に失敗した場合、Origin B への接続を成功させるまでの残り時間は約 4 秒です。

  • Origin C は「/manifests/*」へのリクエストと照合されます。maxAttemptsTimeout の値は 10smaxAttempts の値は 3failover_origin は構成されていません。connectTimeout の値はデフォルトの 5s です。Media CDN は Origin C への接続を最大 3 回試行し、接続が成功するまで最大 10 秒(maxAttemptsTimeout の上限)を許可します。

オリジン リクエストを再試行する

Media CDN は送信元の再試行をサポートしており、送信元へのリクエストが失敗した場合に再試行できます。フェイルオーバー送信元(構成されている場合)が試行される前に、現在の送信元に対して再試行できる回数を指定できます。

  • Media CDN は、構成された maxAttempts 値(デフォルトは 1)までプライマリ送信元に到達しようとします。
  • Media CDN は、最大 3 回まで送信元接続を再試行してから、失敗して HTTP 502 Bad Gateway エラーをユーザーに返します。これには、フェイルオーバー元の接続も含まれます。フェイルオーバー元の接続は、上限の 3 つにカウントされます。
  • オリジン リソースを構成するときに、originAddress フィールドを使用してプライマリ オリジンを構成し、必要に応じて failoverOrigin を構成できます。failoverOrigin は別のオリジン リソースを指します。

各オリジンの retryConditions は、どのタイプのエラーで再試行がトリガーされるかを指定します。

条件 デフォルト 説明
CONNECT_FAILURE ✔️ エラー時の再試行には、ルーティング、DNS と TLS handshake のエラー、TCP/UDP タイムアウトが含まれます。
HTTP_5XX 任意の HTTP 5xx ステータス コードで再試行します。
GATEWAY_ERROR 5xx と同様ですが、ステータス コード 502503504 にのみ適用されます。
RETRIABLE_4XX 409429 など、再試行可能な 4xx ステータス コードを再試行します。
NOT_FOUND HTTP 404 ステータス コードで再試行します。
FORBIDDEN HTTP 403 ステータス コードで再試行します。

送信元間のアクティブなヘルスチェック、ラウンドロビン、負荷認識ステアリングが必要な場合は、プライマリ送信元として外部アプリケーション ロードバランサを構成できます。

フェイルオーバーの動作

次の表に、フェイルオーバーの動作と、クライアントが観測するレスポンスを示します。

シナリオ フェイルオーバーが構成されている ユーザー向けのステータス
Media CDN は送信元への接続を試み、2 回の試行後に HTTP レスポンスを受信しません(デフォルト)。 いいえ HTTP 502 Bad Gateway
Media CDN はプライマリ送信元への接続を試みますが、接続に失敗します(TLS ハンドシェイク エラー)。構成済みのフェイルオーバー送信元に対して試行が行われ、HTTP 404 エラーが返されます。 はい HTTP 404 Not Found
Media CDN はプライマリ送信元とフェイルオーバー送信元の両方への接続を試みますが、HTTP ステータス コードを受信しません。 はい HTTP 502 Bad Gateway

Media CDN が構成済みの retryConditions(HTTP 404 Not Found エラーや HTTP 429 Too Many Requests エラーなど)と一致するステータス コードを受信し、後続の再試行とフェイルオーバー送信元リクエストが引き続き失敗した場合、送信元の試行が完了すると、HTTP 502 Bad Gateway エラーがクライアントに返されます。

オリジンのフェイルオーバーのベスト プラクティス

フェイルオーバーまたはロード バランシング用に複数のオリジンを構成する場合は、メディア コンテンツと VaryETagLast-Modified ヘッダーの動作がオリジン間で一貫していることを確認します。

ベスト プラクティスとして、信頼できるオリジンと制御できるオリジンに対してのみオリジン リダイレクトを構成します。リダイレクト チェーン内のすべてのオリジンが信頼できることを確認します。各オリジンは、EdgeCacheService によって配信されるコンテンツを生成するためです。

次のステップ