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

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

最終更新:
💡 レジが混んだら「レジの台数を増やす」方式

サーバーなどのインスタンスを増減して、処理を分散する拡張方法。増やすことをスケールアウト、減らすことをスケールインと呼ぶ。台数を増やす効果は、分散の設計や共有DBなどの限界に左右される。

📌 このページのポイント
垂直と水平のスケーリング 垂直:性能を増やす 水平:台数を増やす 変更前 変更後 CPUやメモリなど 1台の容量を増やす 1台の上限と 変更の影響を確認 1台 負荷を振り分ける 同じ役割の複数台 共有DBなどが詰まると効果は限られる 台数と性能は必ずしも比例しない
構成の違いを示す概念図。水平では処理と状態を複数台で扱う設計が必要になる。矢印は構成変更と負荷の振り分けを表し、性能の測定結果ではない。
ひよこ ひよこ
スケールアウトって単にサーバー増やすだけでしょ?簡単じゃない?
ペンギン先生 ペンギン先生
クラウドの機能で台数を増やせる場合があるよ。でもアプリケーション側が複数台で動くように設計されていないとダメなんだ。例えばセッション情報をサーバーのメモリに持っていると、ユーザーが別のサーバーに振り分けられたときにその情報を参照できないことがある。セッションをRedisやDBに共有するなど、振り分け先が変わっても状態を扱える設計が必要なんだ。
ひよこ ひよこ
垂直スケーリングとどっちがいいの?
ペンギン先生 ペンギン先生
スケールアウトは台数を増やし、垂直スケーリングは1台のCPUやメモリなどを増やす方法だよ。水平でも共有DBや通信の限界があるので無限には伸びない。分散の設計負担と1台の容量上限を見て、必要なら組み合わせるんだ。
ひよこ ひよこ
データベースのスケールアウトってどうやるの?
ペンギン先生 ペンギン先生
読み取り中心ならリードレプリカを使う方法があるよ。書き込みや保存容量を分散する方法の一つがシャーディングで、データを分けて複数のDBで扱うんだ。どの方式が使えるかはDBと処理の要件によるよ。 レプリカには変更の反映が遅れる場合もあるので、最新の値が必要な読み取りは設計を確認しよう。
ひよこ ひよこ
シャーディングって何が大変なの?
ペンギン先生 ペンギン先生
例えばユーザーIDで分けると、全ユーザーの集計には複数シャードの結果を合わせる処理が必要になるんだ。シャードをまたぐJOINやトランザクションの対応はDBによって異なり、通信や調整の負担もある。特定のシャードへの負荷集中や再分割も考えて設計する必要があるよ。
もっと詳しく知りたい人へ

台数を2倍にすると処理速度も2倍?

必ず比例するわけではありません。共通のDBや外部APIが詰まっている場合、アプリの台数を増やしても改善しないことがあります。実際の負荷でボトルネックと応答時間を測って判断します。

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

参考資料

← 用語集にもどる