世界中どこから開いても同じサイトが速いのはなぜ?──CDNは「全国のコンビニ」を先に置く物流網
CDNは商品を毎回工場から運ぶ代わりに、全国のコンビニへあらかじめ置いておく物流網と同じ発想です。オリジンとエッジの役割分担、キャッシュの賞味期限(TTL)、距離と光の速さの関係までひとつなぎに読み解きます。
海外の友人にサイトのURLを送ったら、東京から見るのとほとんど変わらない速さで開いた──そんな経験をしたことはないでしょうか。サーバーは日本に1台しかないはずなのに、地球の裏側からでも待たされない。これは魔法ではなく、「モノを置く場所」を工夫した物流の仕組みです。
結論を先に書きます。
CDNとは、コンテンツのコピーを世界中の拠点にあらかじめ置いておき、利用者に一番近い場所から渡すしくみです。工場(オリジンサーバー)から毎回商品を送るのではなく、全国のコンビニ(エッジサーバー)に人気商品を先に並べておく物流網だと考えると、動きがそのまま理解できます。
工場直送とコンビニ配送、何が違うか
大元のデータを持つサーバーをオリジン、利用者の近くに置かれた配信拠点をエッジと呼びます。この2つの役割分担が、CDNの全体像です。
| オリジン(工場) | エッジ(コンビニ) | |
|---|---|---|
| 役割 | 正本を1か所で管理 | 近所への配達を肩代わり |
| 数 | 基本1〜数か所 | 世界中に多数(大手事業者は数百〜数千拠点) |
| 速さ | 遠い利用者には時間がかかる | 近いので速い |
| 中身 | 常に最新 | コピー(期限つき) |
工場(オリジン)で作った商品を毎回全国のコンビニに配達し直すのは非効率です。だからよく売れる商品だけをコンビニの棚に先に並べておき、客はそこから買う——これがキャッシュの考え方です。画像・CSS・JavaScript・動画のような「誰が見ても同じもの」は棚に並べやすく、ログイン後のマイページやカートの中身のような「人によって違うもの」は並べられません。
棚の商品には賞味期限がある──TTL
コンビニの棚に並べた商品をいつまでも置いておくと、古くなった情報を渡し続けることになります。そこでコピーには**TTL(Time To Live=賞味期限)**が設定されます。期限が切れると、エッジは次のリクエストのときに改めてオリジンまで取りに行きます。
- TTLを長くすると、速くなりオリジンも楽になるが、更新の反映が遅れる
- TTLを短くすると、常に新しいが、オリジンへの取りに行く回数が増える
「サイトを更新したのにブラウザにまだ古い内容が出る」の多くは、どこかの棚(キャッシュ)のTTLがまだ生きているだけです。世間で言われる「DNSの浸透待ち」という言葉も、実態はこのTTLの失効待ちであることがほとんどです。
距離は光の速さでも縮まらない
CDNが効くいちばんの理由は、突き詰めれば物理です。光ファイバーの中を信号が進む速さは秒速約20万kmで頭打ちなので、距離が長いほど往復にかかる時間(RTT)は増えます。仮に「距離1kmあたり往復0.014ms」という概算モデルで計算すると、次のようになります。
| 経路 | 距離の目安 | 往復遅延の目安 |
|---|---|---|
| ロンドン→フランクフルト | 約638km | 約8.9ms |
| シドニー→シンガポール | 約6,306km | 約88.3ms |
| ロンドン→東京 | 約9,562km | 約133.9ms |
近所のエッジにコピーがあれば、この距離そのものが数分の一から十数分の一に縮みます。「回線を太くする」のではなく「物理的に近づける」のがCDNの本質です。ちなみに、このtotonoe自体はCDNを使わず日本のサーバー1台から配信しています。海外から開くと、まさに表の「距離が長いまま」の遅さで届いているはずです。
同じURLなのに、なぜ一番近い店に自動で案内されるか
ここまでの説明で、ひとつ疑問が残ります。利用者は「東京のコンビニに行きたい」とは指定していないのに、なぜ勝手に最寄のエッジへつながるのでしょうか。種を明かすと、これは**DNS(ドメイン名の電話帳)**の仕掛けです。
サイト運営者はDNSに「このURLの中身はCDN事業者のドメインを見て」と1行書いておくだけで、あとの道案内はCDN事業者に委ねられます。CDN側のDNSは、どこから問い合わせが来たかを見て、返す住所(IP)を地域ごとに変える、あるいは世界中の拠点が同じ住所を名乗って経路上いちばん近い拠点に自然に届く仕組み(エニーキャストと呼ばれます)を使います。利用者は何も意識しないまま、「今いる場所から一番近いコンビニ」の棚に案内されているわけです。
自分の目で距離と遅延の関係を確かめたいときは、CDNを整える で世界地図の上にアクセス元を置いてみてください。CDNなし(オリジン直行)とCDNあり(最寄エッジ経由)でリクエストの線がどれだけ違う速さで届くかが、距離の数字とあわせて一目で見えます。キャッシュのHIT/MISSをTTL付きで連打できるシミュレーターも入っているので、「賞味期限が切れた瞬間また遅くなる」感覚も手で確かめられます。