なぜ分散するのか — 1台の限界を超える
人気が出たサービスには、1台のサーバでは受け止めきれない量のリクエストが押し寄せます。そして、どんな高級なサーバもいつかは必ず壊れます。性能の限界と故障の必然 — この2つの現実にどう立ち向かうかが、分散システムの出発点です。まずは「1台の限界」を動くアニメで体感しましょう。
1. 1台の限界 — 処理能力を超えると何が起きるか
サーバが1秒間にさばける量(処理能力 μ)を超えてリクエストが到着すると、あふれた分は行列(キュー)に並びます。実は、処理能力を使い切るずっと手前から、待ち時間は急激に伸び始めます。
スライダーで到着するリクエストの量 λ を増やしてみてください。処理能力(100 req/s)の9割あたりから応答時間が跳ね上がり、超えた瞬間に行列が伸び続けるようになります。
待ち行列の爆発 — 到着量と応答時間
サーバの処理能力は 100 req/s 固定
左から来る点=リクエスト、右の箱=サーバ。オレンジの四角=順番待ちの行列。下のグラフは到着量と平均応答時間の理論カーブで、λ が 100 に近づくほど急上昇します(赤い破線が限界)。λ ≥ 100 では行列は無限に伸びます。
POINT — 限界の「手前」ですでに遅い
サーバは使用率100%まで快適に使えるわけではない。使用率 ρ が 1 に近づくにつれて待ち時間は 1/(1−ρ) のペースで発散するため、実務では使用率が7〜8割を超えたあたりで増強を検討する。「まだ余裕がある」ように見えても、混雑は指数的に悪化する。
平均応答時間 ∝ 1 / (1 − ρ) (ρ = 到着量 ÷ 処理能力)
ρ=0.5 で2倍、ρ=0.9 で10倍、ρ=0.99 で100倍。限界ぎりぎりの運用は「余裕」ではない
2. 強い1台か、たくさんの普通か — スケールアップ vs スケールアウト
処理能力が足りなくなったときの選択肢は2つ。スケールアップ(1台をより強力なマシンに置き換える)と、スケールアウト(普通のマシンの台数を増やす)です。
スケールアップは仕組みを変えずに済む手軽さが魅力ですが、ある水準から先は価格が急騰し、最後は「それ以上強い1台が存在しない」壁に当たります。スケールアウトは、台数に比例して処理能力を足し続けられます。
スケールアップ vs スケールアウト — 同じ「増強」でも伸び方が違う
左=1台を強化。レベルを上げても伸びがだんだん鈍り、点線の物理限界に頭打ちします(しかも高性能機ほど割高)。右=同じレベルを台数に充てた場合。処理能力は台数に比例して伸びます。下のバーが処理能力の合計です。
注意 — 台数2倍=速度2倍、とは限らない
スケールアウトには、仕事をうまく配る仕組み(ロードバランサ)や、複数台で共有するデータの調整が必要になる。分担できない処理が少しでも残ると、そこがボトルネックになって伸びは頭打ちになる(アムダールの法則)。スケールアウトは「無料の魔法」ではなく、分散システムという新しい問題を引き受ける決断でもある。
3. 台数を増やすと「故障」が日常になる
1台あたりの年間故障率がたった3%でも、100台並べれば「今年どれかが壊れる」確率は約95%。台数を増やした瞬間から、故障はレアイベントではなく毎週の風景になります。
どれかが壊れる確率 — 台数と共に急上昇する
左=サーバ群(4秒=1年に圧縮。赤く光る=故障発生)。右=「1年以内にどれかが壊れる」確率の曲線と現在の設定(オレンジの点)。台数を増やすと確率はあっという間に100%へ張り付きます。
P(どれかが故障) = 1 − (1 − p)N
p=3%・N=100台なら 1 − 0.97100 ≈ 95%。1000台なら実質100%
一歩先へ — 「故障は例外でなく前提」という設計思想
Googleの基盤システム(GFS・MapReduceの論文)は、数千台規模のクラスタでは「常にどこかが壊れている」ことを前提に、故障の検知と自動復旧をソフトウェアの標準機能として組み込んだ。壊れにくい高価なハードに頼るのではなく、安価なマシン+賢いソフトウェアで信頼性を作るのが現代の主流。
4. 壊れても止めない — 単一障害点をなくす
システムのどこか1か所が止まると全体が止まる — その1か所を単一障害点(SPOF: Single Point of Failure)と呼びます。分散システムの第一の設計目標は、同じ役割を複数台に持たせて(冗長化)、「一部が壊れても全体は動き続ける」状態を作ることです。
ボタンで実際に障害を起こして、2つの構成の違いを見比べてください。
単一障害点 vs 冗長構成 — 障害を起こしてみる
左=1台構成。その1台が止まるとリクエストはすべて失敗(赤い点が跳ね返される)。右=3台+振り分け装置の冗長構成。1台止まっても残り2台が引き継いでサービスは続きます(そのぶん1台あたりの負荷は上がる)。
5. まとめ — 分散システムの出発点
- 性能の限界:1台の処理能力には上限があり、使用率が上限に近づくだけで応答は激しく劣化する。
- スケールアウト:台数を増やせば能力を足し続けられる。ただし仕事の分配と調整という新しい課題を引き受ける。
- 故障の必然:台数を増やすほど「どれかが壊れている」のが日常になる。1 − (1−p)N はすぐ100%に近づく。
- 冗長化:同じ役割を複数台に持たせて単一障害点をなくせば、壊れても止まらないシステムにできる。
POINT — 次のレッスンへ
「壊れても止まらない」ためには、計算だけでなくデータそのものも複数台に持たせる必要がある。次のレッスン「レプリケーション」では、同じデータを複数台に複製する仕組みと、複製の遅れが生む「ずれ」を体感する。