1. 近くのサーバに取りに行く — CDNとエニーキャスト
コンテンツの本体(オリジン )は世界に1か所でも、そのコピーを持つエッジサーバ を世界中に配置しておけば、ユーザーはいちばん近いエッジ から受け取れます。距離が短いほど往復(RTT)が短く、体感が速くなります。
下のデモでエッジ拠点の数 を増やすと、各地域から最寄りのエッジまでの距離が縮み、平均レイテンシがどんどん下がっていきます。色分けは「どのユーザーがどのエッジに割り当てられるか」の勢力図です。
エッジ配置マップ — 最寄りの拠点へ自動で振り分け
四角=エッジ拠点、オレンジ=オリジン。各地から緑のリクエストが最寄りエッジへ飛びます。点線+オレンジの点は「もしオリジンまで取りに行ったら」の比較。拠点を増やすほど緑の平均 ms が縮みます。
POINT — エニーキャストという住所の魔法
世界中のエッジが同じIPアドレス を名乗って経路広告(BGP)します。ルータは「そのIPへの最短経路」を選ぶだけなので、ユーザーは何も意識せず自動的にいちばん近い拠点 へ届きます。1つの住所が、地球上に何百箇所も同時に存在するイメージです。
RTT ≈ 2 L / v光
L=距離、v光 ≈2×108 m/s(光ファイバ中)。東京↔ニューヨーク片道 約1万km は往復だけで ~100ms。だから「近く」が効く
2. 二度目は速い — キャッシュ階層とヒット率
エッジは万能倉庫ではなく、限られた容量のキャッシュ を持つだけです。要求されたコンテンツがエッジにあれば(ヒット) その場で即返し、なければ(ミス) オリジンまで取りに行き、ついでにキャッシュへ保存します。次からはヒットで速い、というわけです。
人気が偏るほど(=みんな同じ物を見るほど)ヒット率は上がります。コンテンツの種類 とキャッシュ容量 を変えて、ヒット率がどう動くか観察してみてください。
キャッシュのヒットとミス — オリジンまで往復するのは初回だけ
緑の往復=ヒット(エッジで即返す)、オレンジの長い往復=ミス(オリジンまで取りに行く)。右の縦積みがエッジのキャッシュ(上ほど新しく使った物)。人気の偏りで、多くの要求は緑で片付きます。
注意 — 古いコピーが残る問題
キャッシュは速さと引き換えに「情報が古くなる」 リスクを抱えます。各コンテンツにはTTL(有効期限) を付け、更新時はパージ(強制無効化) で世界中のエッジから消す — この整合性の管理が CDN 運用の要です。値段表やニュースを配るなら、鮮度と速さのバランス設計が欠かせません。
実効レイテンシ = h · Tエッジ + (1−h) · Tオリジン
h=ヒット率。h が 0.9 なら、9割は近くのエッジ(速い)で片付き、平均は劇的に縮む
3. 一台に集中させない — 負荷分散のアルゴリズム
1つのエッジやサーバ群の内側でも、押し寄せるリクエストを複数のバックエンド へ均等に配る仕組みが要ります。これがロードバランサ(LB) 。配り方(方式)で、混み具合の均され方が変わります。
下では各サーバの処理速度をあえてバラバラにしてあります。ラウンドロビン (順番に配る)だと遅いサーバに行列が溜まりがち。最少コネクション (今いちばん空いている所へ配る)に切り替えると、行列が揃っていく様子が見えます。
ロードバランサ — 配り方でキューの揃い方が変わる
左のLBから各サーバへリクエストが飛びます。棒=待ち行列の長さ、色=混み具合。数字はサーバの相対速度(×)。方式を切り替えると、最大キューとばらつき σ の値が変わります。
POINT — 「空いている所」を選ぶだけで効く
最少コネクション法は 次のサーバ = argmini (サーバ i の処理中コネクション数) 。処理の重さがバラつく現実では、順番配り(ラウンドロビン)より行列が揃いやすく、遅いサーバへの過集中を自然に避けられます。ほかに応答時間で重み付けする方式や、同じユーザーを同じサーバに固定するセッション固定 もあります。
4. 落ちても止めない — ヘルスチェックとフェイルオーバー
サーバは壊れます。LBは定期的に各サーバの生死を確認するヘルスチェック を打ち、応答が返らないサーバを振り分け先から自動的に外し 、生きているサーバへ流し直します。これがフェイルオーバー 。ユーザーは障害に気づきません。
下のボタンでサーバを落としてみてください。落ちた瞬間にヘルスチェックが赤くなり、そのサーバへの矢印が止まり、残りのサーバが仕事を引き取ります。戻せば自動で復帰します。
フェイルオーバー — 落ちたサーバを外して迂回する
サーバ1:稼働
サーバ2:稼働
サーバ3:稼働
サーバ4:稼働
⏸ 一時停止
各サーバの左の丸=ヘルスチェック(緑=生存 / 赤=停止、周期的に脈打つ)。停止させるとリクエストがそのサーバを避け、残りへ再分配されます。全滅させない限りサービスは続きます。
5. まとめ — 速さと止まらなさを設計する
CDN/エニーキャスト :コピーを世界に置き、同じIPで最寄りエッジへ自動誘導。距離=レイテンシを縮める。
キャッシュ階層 :初回だけオリジンへ、以降はヒットで即返す。ヒット率 h が実効レイテンシを決める。TTLとパージで鮮度を守る。
負荷分散 :ラウンドロビン/最少コネクションなどで仕事を均す。方式で行列の揃い方が変わる。
ヘルスチェック/フェイルオーバー :死んだサーバを外して迂回。冗長化でサービスを止めない。
一歩先へ — 実世界のCDNと分散システム
Cloudflare や Akamai は世界数百都市に拠点を持ち、静的配信だけでなくエッジで動くプログラム(エッジコンピューティング)も走らせます。バックエンドをどのサーバに割り当てるかはコンシステントハッシュ で、サーバ増減時の再配置を最小化するのが定番。さらに DNS ベースの広域負荷分散(GSLB)が「どの地域のどのデータセンターへ送るか」を、L4/L7 ロードバランサが「その中でどのサーバへ送るか」を担う—階層で分けて考える のがネットワーク工学の作法です。