【すいへいすけーりんぐ】

水平スケーリング(スケールアウト) とは?

💡 レジが混んだら「レジの台数を増やす」方式
📌 このページのポイント
スケールアップ vs スケールアウト スケールアップ(垂直スケーリング) Before サーバー CPU: 2コア RAM: 4GB After サーバー CPU: 16コア RAM: 64GB SSD: 1TB メリット 構成がシンプル・データ整合性が容易 デメリット 性能上限あり・単一障害点・高コスト スケールアウト(水平スケーリング) Before サーバー 1台 After Load Balancer サーバー1 2コア/4GB サーバー2 2コア/4GB +サーバー3 +サーバー4 メリット 柔軟に拡張・耐障害性が高い・コスト効率 デメリット 設計が複雑・データ同期が必要 クラウドではスケールアウト(水平スケーリング)が主流。Auto Scalingで自動化可能
スケールアップ(垂直)とスケールアウト(水平)の比較
ひよこ ひよこ

水平スケーリングって単にサーバー増やすだけでしょ?簡単じゃない?

ペンギン先生 ペンギン先生

サーバーを増やすこと自体はクラウドなら簡単だよ。でもアプリケーション側が複数台で動くように設計されていないとダメなんだ。例えばセッション情報をサーバーのメモリに持っていると、ユーザーが別のサーバーに振り分けられたときにログイン状態が消える。だからセッションRedisやDBに外出しする必要があるんだ。

ひよこ ひよこ

垂直スケーリングとどっちがいいの?

ペンギン先生 ペンギン先生

水平スケーリングは台数を増やすから理論上は上限がない。垂直スケーリングCPUやメモリを増やすけど、物理的な限界がある。ただし水平スケーリングはアプリをステートレスにする設計変更が必要で、データベースのように簡単に台数を増やせないものもある。だから実際は両方を組み合わせて使うことが多いよ。

ひよこ ひよこ

データベースの水平スケーリングってどうやるの?

ペンギン先生 ペンギン先生

読み取りの負荷分散ならリードレプリカを増やせばいい。書き込みの負荷分散になるとシャーディング(データを分割して複数のDBに分ける)が必要になるんだ。

ひよこ ひよこ

シャーディングって何が大変なの?

ペンギン先生 ペンギン先生

シャーディングデータベースの水平スケーリングの中でもかなり難しい領域でね。例えばユーザーIDでシャードを分けたとして、「全ユーザーの売上ランキング」を出すにはすべてのシャードに問い合わせて結果をマージする必要がある。JOINも複数シャードにまたがると使えなくなる。さらにシャード間でデータ量に偏りが出る「ホットスポット」問題もある。だからシャーディングは「他の手段を全部試した後の最終手段」と言われることが多くて、最近はAurora ServerlessやCockroachDBのように分散を隠蔽してくれるDBを選ぶ傾向にあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「水平スケーリング」って出てきたら「サーバーの台数を増やして処理能力を上げることだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Horizontal Scaling / Scale Out」 = 水平方向に拡張する
💬 横に並べて増やすイメージからHorizontal(水平)。サーバーを外に広げるからScale Out(外に拡張)とも言うよ
← 用語集にもどる