Cloud CDN の概要と仕組み
Google Cloud Japan Team
※この投稿は米国時間 2021 年 11 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
アプリやウェブサイトがどのように機能するにしても、おそらく、ユーザーはさまざまな地域に分散していて、必ずしもサーバーに近い場所にいるわけではありません。つまり、リクエストは公共のインターネットで長い距離を移動することになるため、ユーザー エクスペリエンスは一貫性がなく、時にはストレスを感じるものになります。そこで役立つのが Cloud CDN です。
Cloud CDN とは
Cloud CDN は、Google のグローバル エッジ ネットワークを使用して、できる限りユーザーの近くでコンテンツを配信することで、ウェブと動画のコンテンツ配信を促進するコンテンツ配信ネットワークです。結果として、レイテンシが短縮され、費用が削減され、バックエンド サーバーの負荷が軽減されるため、数百万人のユーザーに対するスケーリングが容易になります。グローバル エニーキャスト IP は、グローバルなリーチに対応する単一の IP を提供します。これにより、Google Cloud はユーザーを最も近いエッジ キャッシュに自動的にルーティングし、可用性に影響する可能性がある DNS の伝播の遅延を回避できます。グローバル エニーキャスト IP は、エンドツーエンドの HTTP/2 と、クライアントからキャッシュへの QUIC プロトコルをサポートしています。QUIC は UDP を介する多重化ストリーム転送であるため、レイテンシが短縮され、データの損失が多いモバイル ネットワークには理想的です。
Cloud CDN の仕組み
Cloud CDN の仕組みを理解するために、次の例を考えてみましょう。
ユーザーがウェブサイトまたはアプリに対してリクエストを行うと、そのリクエストは、高速で信頼性の高いトラフィック フローを実現するために、最も近い Google エッジノード(Google には 120 以上のエッジノードがあります)にルーティングされます。そこから、リクエストはグローバル HTTPS ロードバランサを通ってバックエンドまたは送信元にルーティングされます。
Cloud CDN を有効にすると、コンテンツはキャッシュから直接配信されます。このキャッシュは、同じコンテンツの今後のリクエストに迅速に対応できるようにキャッシュに保存可能なコンテンツを保存、管理するサーバーのグループです。
キャッシュに保存されたコンテンツは、キャッシュに保存可能なウェブアセット(JavaScript、CSS)、画像、動画や、配信元サーバーに保存されているその他のコンテンツのコピーです。
すべての静的コンテンツをキャッシュに保存する、推奨の「キャッシュ モード」を使用すると、Cloud CDN によってこのコンテンツは自動的にキャッシュに保存されます。より細かく制御する必要がある場合は、レスポンスに HTTP ヘッダーを設定することで、Cloud CDN の動作を指定できます。また、すべてのコンテンツを強制的にキャッシュに保存することもできます。ただし、この場合、Cache-Control レスポンス ヘッダーの「private」、「no-store」、「no-cache」の各ディレクティブは無視されます。
Cloud CDN はリクエストを受け取ると、キャッシュキーを使用して、キャッシュに保存されたコンテンツを探します。通常これは URI ですが、キャッシュキーをカスタマイズして、プロトコル、ホスト、クエリ文字列を削除することもできます。
キャッシュに保存されたレスポンスが Cloud CDN キャッシュ内に見つかると、そのレスポンスがキャッシュから取得され、ユーザーに送信されます。これを「キャッシュ ヒット」と呼びます。キャッシュ ヒットが発生すると、Cloud CDN はそのキャッシュキーを基準にコンテンツを検索してユーザーにレスポンスを直接返すので、ラウンドトリップ時間が短くなり、配信元サーバーの負荷も軽減されます。
コンテンツが初めてリクエストされたときは、そのコンテンツがキャッシュにないため、Cloud CDN はキャッシュからリクエストを処理できません。これは、「キャッシュミス」と呼ばれます。キャッシュミスが発生すると、Cloud CDN は近くにあるキャッシュからコンテンツを取得しようとします。付近のキャッシュにコンテンツが保存されている場合は、キャッシュ間のフィルで最初のキャッシュにコンテンツが送信されます。保存されていない場合は、配信元サーバーにリクエストが送信されます。
キャッシュ内のオブジェクトの最長存続期間は TTL(有効期間)の値によって定義され、HTTP レスポンスまたはキャッシュ モードごとにキャッシュ ディレクティブによって設定されます。TTL が期限切れになると、そのコンテンツはキャッシュから削除されます。
Cloud CDN の使用方法
Cloud CDN は gcloud CLI、Cloud Console、API で設定できます。Cloud CDN は Cloud Load Balancing を使用して、ルーティング、ヘルスチェック、エニーキャスト IP のサポートを行うため、バックエンドまたは送信元を設定するときにチェックボックスをオンにするだけで有効にできます。
Cloud CDN により、Google Cloud Storage を使用してウェブやメディアのコンテンツを配信することが簡単になります。コンテンツを Cloud Storage バケットにアップロードし、ロードバランサを設定して、キャッシュ保存を有効にするだけです。クラウドやオンプレミスにわたるハイブリッド アーキテクチャを有効にするために、Cloud CDN と HTTP(S) ロード バランシングは外部バックエンドもサポートしています。
セキュリティ
エンドツーエンドの暗号化のために、データは保存中も、Cloud Load Balancing からバックエンドへの転送中も暗号化されます。
プログラムによって URL と Cookie に署名して、動画セグメントへのアクセスを承認済みユーザーのみに制限できます。署名は CDN エッジで検証され、不正なリクエストはそこでブロックされます。
より広範なレベルでは、Google マネージド証明書を使用して無料で SSL を有効にすることができます。
Cloud CDN の詳細については、ドキュメントをご覧ください。
#GCPSketchnote の詳細については、GitHub リポジトリをフォローしてください。同様のクラウド コンテンツについては、Twitter @pvergadia で発信しています。thecloudgirl.dev もぜひご覧ください。
- Google デベロッパー アドボケイト Priyanka Vergadia