CDNについての勉強メモ
はじめに
CDNについて勉強したので概要をメモします。
CDNとはなにか
CDN(コンテンツ・デリバリー・ネットワーク)とは、「地理的に分散されたネットワーク品質の良いコンピューティングリソースのプラットフォーム」である。
CDNの構成要素
- エッジサーバー(Proxy)
- 広域負荷分散が可能なLB
- インフラ
CDNを利用するメリット
配信の高速化・安定化
- CDNは世界中に高品質のネットワーク、エッジサーバー(クライアントと近い位置にあるサーバー)を有するため、クライアントに地理的に近い位置から、高速かつ安定した配信が可能となる。
- クライアントに近い位置からキャッシュを返すことができる(キャッシュがない状態でも、パフォーマンスが向上する可能性がある)。
- CDNは基本的に従量課金であり、大規模なトラフィックに耐えられるため、大規模なサイトでは自前でインフラを構築するよりコスト上有利である。
セキュリティ
CDNはセキュリティ対策としても有効である。
- DDoS 対策
- Web Application Firewall(WAF)
- Bot 対策
付加サービス
CDNによっては、以下のような付加サービスを提供している。
- エッジでのコード実行(JavaScript などを CDN のエッジサーバーで実行)
- 画像最適化
- HTML/CSS/JavaScript の minify
CDNの機能
CDNは以下のような機能を有している事が多い。
- 柔軟なキャッシュ設定
- ルーティング
- キャッシュの消去
- アクセス情報の可視化
- HTTP リクエスト/レスポンスの変更
- DDoS 対策
- Web Application Firewall
- エッジでのコード実行(JavaScript などを CDN のエッジサーバーで実行)
- 画像最適化
- HTML/CSS/JavaScript の minify
CDNに関連するHTTPヘッダ
- Cache-Controlヘッダ
- no-cache: CDNがキャッシュしていても、それを無視してオリジンへリクエストしてほしいと要請
- s-maxage: max-ageと同様、確認せずキャッシュを利用できる期間を表す。共有キャッシュに関する設定値で、max-ageより優先される。
- x-cacheヘッダ: CDNにおいてキャッシュヒットしたかを表す。ただし、値はCDNによってバラバラ。
CDNを利用する上での注意点
- 各Proxy・CDNでCache-Controlの解釈・クエリ文字列の処理の方針が異なる。
- privateなコンテンツがsharedとしてキャッシュされると、個人情報流出などにつながる恐れがある。
- 2017年にメルカリで発生したインシデントは、CDNプロバイダを切り替えた際のCache-Controlの解釈の違い・仕様の違いが原因だった(5)。
- 各Proxy・CDNでクエリ文字列の処理の方針が異なる。
- トラフィック制限があるため、大規模なトラフィックが予想される場合は事前にCDN事業者に相談する。
- コンテンツ制限
- オリジンのアドレスなど隠したい情報を隠す。
- 場合によってはウォームアップ(エッジにキャッシュを入れておく)を使用する。
参考
- 『Web配信の技術―HTTPキャッシュ・リバースプロキシ・CDNを活用する』
- 『Real World HTTP第2版』
- 『達人が教えるWebパフォーマンスチューニング-〜ISUCONから学ぶ高速化の実践』
- CDN(コンテンツ・デリバリー・ネットワーク)とは?
- CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして