CDNとは?コンテンツデリバリーネットワークの解説
CDN(コンテンツデリバリーネットワーク)は、コンテンツのコピーをユーザーの近くに保存するキャッシュサーバーのグローバルな集合体であり、リクエストがオリジンではなく近くの場所から処理されるようにします。
CDNは、コンテンツをそれを要求する人々の物理的により近くに配置することでWebを高速化します。すべてのユーザーが単一のオリジンサーバーにアクセスするのではなく、キャッシュされたコピーを持つ近くのエッジノードにアクセスします。これによりレイテンシが削減され、オリジンの負荷が減り、トラフィックの急増を吸収します。CloudFront、Cloudflare、Fastlyが一般的な例です。
CDNがコンテンツを配信する仕組み
ある地域でアセットへの最初のリクエストがあると、エッジノードがそれをオリジンから取得してキャッシュします。その地域の以降のユーザーは、キャッシュされたコピーを直接受け取ります。キャッシュの期間は、設定したTTLとcache-controlヘッダーによって制御されます。
CDNが改善するもの
- レイテンシ、近くのエッジから配信することで。
- オリジンの負荷、エッジがほとんどのリクエストを吸収するため。
- レジリエンス、トラフィックの急増を平準化することで。
- セキュリティ、HTTPS、DDoS緩和、WAF機能によって。
静的コンテンツ対動的コンテンツ
CDNは、多くのユーザーが共有する静的アセット(画像、JS、CSS、動画)で威力を発揮します。動的でユーザーごとに異なるレスポンスはキャッシュが難しいですが、モダンなCDNはスマートなルールでエッジにキャッシュしたり、エッジコンピュートを実行してレスポンスをパーソナライズしたりできます。
キャッシュ無効化の問題
エッジがコピーを保持するため、新しいコンテンツをデプロイするには、古いキャッシュをクリアするかバイパスする必要があります。チームは変更されたパスに対して無効化を発行するか、バージョン付き(コンテンツハッシュ付き)のファイル名を使い、新しいファイルが新しいURLを持ち、古いキャッシュが単純に期限切れになるようにします。
CI/CDでの役割
フロントエンドのデプロイでは、ビルドしたアセットをオリジン(多くの場合オブジェクトストレージ)にアップロードし、その後CDNを無効化して、ユーザーが新しいバージョンを見られるようにします。コンテンツハッシュ付きのファイル名を使えば、アセットを永久にキャッシュし、HTMLのエントリーポイントだけを無効化できるため、デプロイが高速かつ安全になります。
重要なポイント
- CDNはユーザーの近くのエッジサーバーにコンテンツをキャッシュし、レイテンシとオリジンの負荷を削減します。
- 静的アセットに最適です。動的コンテンツにはよりスマートなキャッシュやエッジコンピュートが必要です。
- デプロイでは、古いコンテンツを避けるためにキャッシュを無効化するか、バージョン付きのファイル名を使う必要があります。