目次

読了時間: 約7分 | 文字数: 約2,800字

東京のユーザーがニューヨークのサーバーにアクセスすると、光の速度でも往復に約140ミリ秒かかる。ページの読み込みには数十回のリクエストが必要なため、物理的な距離だけでレスポンスが数秒遅くなりうる。CDN はこの「距離の壁」を解決する技術だ。

CDN の基本アーキテクチャ

オリジンサーバーとエッジサーバー

CDN は「オリジン」と「エッジ」の2層構造だ。

  • オリジンサーバー: コンテンツの原本を持つサーバー。あなたの Web サーバーそのもの
  • エッジサーバー(PoP): 世界各地に配置されたキャッシュサーバー群。Point of Presence

ユーザーのリクエストは最寄りのエッジサーバーに向かう。エッジにキャッシュがあればそこから返し(キャッシュヒット)、なければオリジンに取りに行く(キャッシュミス)。

DNS ベースのルーティング

CDN はどうやって「最寄りのエッジ」を選ぶのか。DNS の応答にユーザーの地理的位置に基づく IP アドレスを返す Anycast ルーティングを使う。同じドメインでも、東京のユーザーと パリのユーザーでは異なる IP が返される。

CDN が配信するもの

静的コンテンツ

画像、CSS、JavaScript、フォント、動画ファイルなど。変更頻度が低く、キャッシュ効果が最も高い。CDN の最も基本的なユースケースだ。

動的コンテンツ

API レスポンスや HTML ページなど。キャッシュが難しいが、以下の方法で CDN を活用できる。

  • 短時間キャッシュ: TTL を数秒〜数分に設定し、頻繁なオリジンアクセスを防ぐ
  • エッジサイドインクルード(ESI): ページの一部だけを動的に生成し、残りはキャッシュ
  • エッジコンピューティング: エッジサーバー上でロジックを実行する(後述)

ストリーミング配信

動画のライブ配信や VOD(Video on Demand)。CDN がセグメントファイルをキャッシュし、数百万の同時視聴に耐える。

エッジコンピューティング

近年の CDN は単なるキャッシュではなく、エッジでコードを実行するプラットフォームへと進化している。

  • Cloudflare Workers: V8 エンジンでJavaScript/WASM を実行
  • AWS Lambda@Edge / CloudFront Functions: CloudFront のエッジで関数を実行
  • Vercel Edge Functions: Next.js のミドルウェアをエッジで実行

ユースケースは、A/B テスト、地域別コンテンツの出し分け、認証トークンの検証、画像のリサイズなど。オリジンへのリクエストを減らし、応答速度を改善できる。

主要 CDN プロバイダの特徴

プロバイダ特徴適するケース
Cloudflare無料プランあり、WAF 統合個人〜中規模、セキュリティ重視
AWS CloudFrontAWS エコシステム統合AWS を使っているプロジェクト
Fastlyリアルタイムキャッシュ無効化動的コンテンツが多いサイト
Akamai最大規模のネットワークエンタープライズ、金融、メディア

CDN のセキュリティ機能

現代の CDN はセキュリティプラットフォームでもある。

  • DDoS 防御: 大量のトラフィックをエッジで吸収し、オリジンを守る
  • WAF(Web Application Firewall): SQL インジェクション、XSS などの攻撃をフィルタリング
  • Bot 管理: 悪意のあるボットと正当なクローラーを識別
  • SSL/TLS 終端: エッジで HTTPS を処理し、オリジンの負荷を軽減

So What?——実務への応用

  • 静的アセットは CDN 経由で配信する: 自前のサーバーから直接配信するのは、パフォーマンスとコストの両面で非効率
  • Cache-Control ヘッダーを適切に設定する: CDN のキャッシュ挙動はこのヘッダーで決まる。デフォルト任せにしない
  • キャッシュ無効化の仕組みを事前に設計する: 緊急時にキャッシュをパージする手順を確立しておく
  • CDN のログを分析する: キャッシュヒット率、レイテンシ、エラー率を監視し、設定を継続的に改善する

CDN は「あると便利」ではなく「なければ競争にならない」インフラだ。ユーザーはページの読み込みに3秒以上かかると53%が離脱するという Google の調査結果を、常に念頭に置くべきだ。

参考リンク

免責事項 — 掲載情報は執筆時点のものです。料金・機能は変更される場合があります。最新情報は各公式サイトをご確認ください。