Cloud CDN の概要

Cloud CDN(コンテンツ配信ネットワーク)は、Google のグローバル エッジ ネットワークを使用して、ユーザーの近くからコンテンツを配信します。これにより、ウェブサイトとアプリケーションが高速化されます。

Cloud CDN は、グローバル外部アプリケーション ロードバランサおよび従来のグローバル外部アプリケーション ロードバランサと連携して、ユーザーにコンテンツを配信します。外部アプリケーション ロードバランサが、リクエストを受信するフロントエンド IP アドレスとポート、そしてリクエストに応答するバックエンドを提供します。

Cloud CDN コンテンツは、次のようにさまざまな種類のバックエンドから提供されます。

Cloud CDN では、こうしたバックエンドが「送信元サーバー」とも呼ばれます。図 1 は、仮想マシン(VM)インスタンス上で稼働する送信元サーバーからのレスポンスがどのように外部アプリケーション ロードバランサを通過して Cloud CDN によって配信されるかを示しています。この状況では、Google Front End(GFE)は Cloud CDN と外部アプリケーション ロードバランサで構成されます。

図 1. 送信元サーバーから Cloud CDN を通過してクライアントに送信されるレスポンスのフロー。
図 1. 送信元サーバーから Cloud CDN を通過してクライアントに送信されるレスポンスのフロー。

Cloud CDN の仕組み

ユーザーが外部アプリケーション ロードバランサに対してコンテンツをリクエストすると、そのリクエストは、Google のネットワークのエッジの中でユーザーに最も近いエッジにある GFE に到着します。

ロードバランサの URL マップが Cloud CDN が構成されたバックエンド サービスまたはバックエンド バケットにトラフィックをルーティングする場合、GFE は Cloud CDN を使用します。

キャッシュ ヒットとキャッシュミス

キャッシュは、コンテンツを保存および管理するサーバーのグループであり、対象コンテンツに対する将来のリクエストを高速で処理できるようにします。キャッシュに保存されたコンテンツは、送信元サーバーに保存されているキャッシュ可能なコンテンツのコピーです。

GFE は Cloud CDN のキャッシュを検索し、ユーザーのリクエストに対するレスポンスを見つけると、キャッシュに保存されているそのレスポンスをユーザーに送信します。これは「キャッシュ ヒット」と呼ばれます。キャッシュ ヒットが発生すると、GFE がそのキャッシュキーを基準にコンテンツを検索してユーザーにレスポンスを直接返すので、ラウンド トリップ時間が短くなり、配信元サーバーがリクエストを処理する必要もなくなります。

部分ヒットは、リクエストの一部分がキャッシュから、一部分がバックエンドから配信された場合に発生します。これは、バイト範囲リクエストのサポートで説明しているように、リクエストされたコンテンツの一部のみが Cloud CDN キャッシュに保存されている場合に発生することがあります。

コンテンツが初めてリクエストされたとき、GFE はキャッシュからリクエストを処理できないと判断します。これは「キャッシュミス」と呼ばれます。キャッシュミスが発生すると、GFE はリクエストを外部アプリケーション ロードバランサに転送します。その後、ロードバランサはいずれかの送信元サーバーにリクエストを転送します。キャッシュで受信されたコンテンツは、GFE によってユーザーに転送されます。

このリクエストに対する配信元サーバーのレスポンスがキャッシュ可能な場合、Cloud CDN は以降のリクエストに備えてレスポンスを Cloud CDN キャッシュに保存します。キャッシュからクライアントへのデータ転送を「キャッシュ下り(外向き)」といいます。キャッシュへのデータ転送を「キャッシュ フィル」といいます。

図 2 は、キャッシュ ヒットとキャッシュミスを示しています。

  1. VM インスタンス上で稼働している送信元サーバーが HTTP(S) レスポンスを送信します。
  2. 外部アプリケーション ロードバランサがレスポンスを Cloud CDN に配信します。
  3. Cloud CDN がレスポンスをエンドユーザーに配信します。
図 2. 最初のレスポンスは送信元サーバーから提供されますが、以降のレスポンスは GFE によってキャッシュから提供されます。
図 2. 最初のレスポンスは送信元サーバーから配信されますが、以降のレスポンスは GFE によってキャッシュから配信されます。

キャッシュ ヒットとキャッシュミスに関連する費用については、料金をご覧ください。

キャッシュ ヒット率

「キャッシュ ヒット率」とは、リクエストされたオブジェクトがキャッシュから提供される回数の割合です。キャッシュ ヒット率が 60% の場合、リクエストされたオブジェクトがキャッシュから 60% の割合で提供され、送信元から 40% の割合で取得する必要があります。

キャッシュキーがキャッシュ ヒット率に与える影響については、キャッシュキーの使用をご覧ください。トラブルシューティング情報については、キャッシュ ヒット率が低いをご覧ください。

短期間のキャッシュ ヒット率を表示する

短期間(最後の数分)のキャッシュ ヒット率を表示するには:

  1. Google Cloud Console で、[Cloud CDN] ページに移動します。

    Cloud CDN に移動

  2. それぞれの送信元について、キャッシュ ヒット率列を確認します。

    n/a は、負荷分散されたコンテンツがキャッシュ内に存在しないか、最近リクエストされていないことを意味します。

長期間のキャッシュ ヒット率を表示する

1 時間から 30 日間のキャッシュ ヒット率を表示するには:

  1. Google Cloud Console で、[Cloud CDN] ページに移動します。

    Cloud CDN に移動

  2. [オリジンの名前] 列で、送信元の名前をクリックします。
  3. [モニタリング] タブをクリックします。
  4. 省略可: 特定のバックエンドを選択します。

CDN のヒット率は、使用可能なモニタリング グラフの 1 つです。グラフに [なし] と表示される場合は、コンテンツがキャッシュされていないか、表示期間にリクエストがなかったことを意味します。

別の期間を選択して期間を調整できます。次の図は選択できる期間の例を示しています。

使用可能な期間の例を示しています

キャッシュへのコンテンツの挿入

あるオブジェクトが特定のキャッシュに保存されるのは、リクエストがそのキャッシュを通過し、しかもそのリクエストに対するレスポンスがキャッシュ可能な場合だけです。つまりキャッシュへの保存は事後対応型の操作です。キャッシュに保存されたオブジェクトが他のキャッシュに自動的に複製されることはありません。キャッシュ フィルは、クライアントが開始したリクエストに応じて実行されます。キャッシュに事前に読み込むには、個々のキャッシュでリクエストに応答するしか方法はありません。

送信元サーバーがバイト範囲リクエストをサポートしている場合は、Cloud CDN が単一のクライアント リクエストに対して複数のキャッシュ フィル リクエストを開始することがあります。

キャッシュからのコンテンツの配信

Cloud CDN を有効にすると、キャッシュ可能なすべてのコンテンツが自動的にキャッシュに保存されます。送信元サーバーは HTTP ヘッダーを使用して、どのレスポンスをキャッシュに保存するかを指示します。また、キャッシュ モードを使用してキャッシュへの保存を制御することもできます。

バックエンド バケットを使用する場合の送信元サーバーは Cloud Storage です。VM インスタンスを使用する場合の送信元サーバーは、それらのインスタンスで実行しているウェブサーバー ソフトウェアです。

Cloud CDN は、世界各地のロケーションにあるキャッシュを使用します。キャッシュの特性上、特定のリクエストに対するレスポンスがキャッシュから返されるかどうかを予測することはできません。ただし、キャッシュ可能なコンテンツに対するリクエストが多い場合、通常はそのリクエストに対するレスポンスがキャッシュから返されるはずなので、レイテンシの大幅な短縮、コストの削減、送信元サーバーの負荷の軽減が期待されます。

Cloud CDN がキャッシュに保存するコンテンツと保存期間について詳しくは、キャッシュの概要をご覧ください。

Cloud CDN がキャッシュから配信している内容を確認するには、ログを表示します。

キャッシュからコンテンツを削除する

キャッシュからアイテムを削除するには、キャッシュに保存されたコンテンツを無効にします。詳細については、次の情報をご覧ください。

キャッシュ バイパス

Cloud CDN をバイパスするには、Cloud Storage バケットまたは Compute Engine VM に対してオブジェクトを直接リクエストします。たとえば、Cloud Storage バケット オブジェクトの URL は次のようになります。

https://storage.googleapis.com/STORAGE_BUCKET/FILENAME

エビクションと有効期限

コンテンツをキャッシュから配信するには、コンテンツをキャッシュに保存し、コンテンツの削除や期限切れを防ぐ必要があります。

エビクションと有効期限は異なるコンセプトです。このどちらも、何が配信されるかに影響を与えますが、相互に直接影響を与えることはありません。

エビクション

少数のリクエストでコンテンツ キャッシュをテストすると、コンテンツが排除される可能性があります。

各キャッシュに保存されるコンテンツの量には上限があります。ただし Cloud CDN は、キャッシュがいっぱいになった後もコンテンツを追加します。保存量の上限に達しているキャッシュにコンテンツを挿入するには、まずスペース確保のために他のいずれかのコンテンツが削除されます。この処理はエビクションと呼ばれます。キャッシュはいっぱいになることが多いので、コンテンツのエビクションも常に行われます。通常、コンテンツの有効期限に関係なく、最近アクセスされていないコンテンツが削除されます。削除されるコンテンツは期限切れの場合もあれば、そうでない場合もあります。有効期限を設定してもエビクションに影響はありません。

人気のないコンテンツとは、しばらくアクセスされていないコンテンツのことです。「しばらく」と「人気のない」は、どちらもキャッシュ内の他のアイテムと比較した場合の相対的な基準です。複数の Google Cloud プロジェクトはキャッシュ スペースの共通のプールを共有します。これらのプロジェクトが同じ GFE のセットから提供されるためです。コンテンツの相対的な人気は単一のプロジェクト内でなく、複数のプロジェクト間で比較されます。

キャッシュに送信されるトラフィックが増加すると、エビクションで削除されるコンテンツも増加します。

サイズの大きなキャッシュの場合と同様に、コンテンツのエビクションは予測不能であり、リクエストがキャッシュから提供される保証はありません。

有効期限

HTTP(S) キャッシュ内のコンテンツの有効期限を設定できます。有効期限により、エビクションでまだ削除されていないとしても、古いコンテンツはキャッシュから提供されなくなります。

たとえば、撮影されて 1 時間以内の写真を保存する URL の場合、レスポンスの有効期限を 1 時間以内に設定します。こうしないと、古い写真がキャッシュから提供される可能性があります。

有効期限の微調整については、TTL の設定とオーバーライドの使用をご覧ください。

Cloud CDN によって作成されるリクエスト

送信元サーバーがバイト範囲リクエストをサポートしている場合、単一のクライアント リクエストに対して Cloud CDN から複数のリクエストが送信元サーバーに送信されることがあります。バイト範囲リクエストのサポートで説明しているように、Cloud CDN が開始できるリクエストには検証リクエストとバイト範囲リクエストの 2 種類があります。

他の Cloud Platform サービスのデータ ロケーションの設定

Cloud CDN を使用すると、送信元サーバーのリージョンやゾーンとは別のロケーションにデータが保存される可能性があります。これは正常な状態であり、HTTP キャッシュはこのようにしてインターネット上で機能します。Google Cloud Platform 利用規約のサービス固有の規約により、他の Google プロダクトやサービス(この場合は Cloud CDN サービス)と併用される場合、特定の Cloud Platform サービスで使用可能なデータ ロケーションの設定は、それぞれの Cloud Platform サービスの主なお客様データに適用されません。この条件に承諾できない場合には、Cloud CDN サービスをご利用にならないでください。

Google マネージド SSL 証明書のサポート

Cloud CDN が有効になっている場合は、Google マネージド証明書を使用できます。

Google Cloud Armor と Cloud CDN

Cloud CDN と Google Cloud Armor には次の 2 種類のセキュリティ ポリシーがあります。

  • エッジ セキュリティ ポリシー。これらのポリシーは、Cloud CDN 対応の送信元サーバーに適用できます。これは、CDN ルックアップの前にすべてのトラフィックに適用されます。
  • バックエンド セキュリティ ポリシー。これらのポリシーは、動的コンテンツやキャッシュミスに対するリクエスト、または送信元サーバーを宛先とするその他のリクエストにのみ適用されます。

詳細については、Google Cloud Armor のドキュメントをご覧ください。

次のステップ