コンテンツ配信ネットワーク(CDN)
Content Delivery Network (CDN)
世界中に分散したキャッシュサーバー網で、ユーザーに地理的に近い場所から画像・CSS・JS・動画などを配信する仕組み。速くなり、自前サーバーの負荷も減る。
たとえ話: 全国のコンビニ
人気商品(=Webの画像や動画)を、本社の倉庫(=オリジンサーバー)1か所からだけ配ると、遠い人ほど届くのが遅い。そこで全国のコンビニ(=CDNのエッジサーバー)に在庫を置いておけば、誰でも近所で受け取れて速い。本社の倉庫も発送業務から解放されて楽になります。これがCDNの本質です。
図を描画中...
Push型 vs Pull型
コンビニにどうやって商品を並べるか、の違いです。
Push CDN(自分で並べる)
更新したら自分から全コンビニに商品を送り込みます。
- 長所: ユーザーが来る前から在庫があるので常に速い。オリジンへのアクセスは最小。
- 短所: 全エッジに置くのでストレージを大量消費。更新のたびに送り込む手間。
- 向き: 更新頻度が低い・トラフィックが少なめのサイト。
Pull CDN(売れたら取り寄せる)
最初に誰かがアクセスした瞬間に、コンビニが本社から取り寄せて以後キャッシュします。
- 長所: 実際にアクセスされた物だけ置くのでストレージ最小。運用が楽。
- 短所: 各エッジで『最初の1人』は取り寄せ待ちで遅い。TTL切れ後の最初のアクセスも遅い。
- 向き: トラフィックが多いサイト(=どうせすぐ誰かがアクセスしてキャッシュが温まる)。
図を描画中...
つまずきポイント
- CDNは『キャッシュ』なので、**古いまま配信され続ける問題(stale)**が起きる。CSSを更新したのに反映されない、はこれが原因のことが多い。対策はファイル名にハッシュを付ける(例:
app.a1b2c3.css)など、URL自体を変えてしまうこと。 - 全部CDNに載せれば速いわけではない。ユーザーごとに違う動的コンテンツはキャッシュしづらい。基本は『誰が見ても同じ静的ファイル』が主役。