FE EXAM

スケールアウト(水平拡張)

サーバの台数を増やして全体の処理能力を高める方式。

DIAGRAM
ロードバランサ
サーバ
サーバを「横に並べて増やす」=水平拡張増強前サーバ1台台数を増やす増強後(複数台で分担)ロードバランサ(負荷分散装置)サーバ#1サーバ#2サーバ#3サーバ#4台数を足せばさらに拡張(理論上ほぼ無限)→1台が故障しても、残りのサーバで処理を継続できる
解説

📌
スケールアウトとは

台数を増やして分担ロードバランサ#1#2#3

スケールアウトとは、サーバの台数を増やして全体の処理能力を高める方式のことです。1台ずつの性能は変えずに、同じようなサーバを何台も並べて仕事を分担させます。

ただ台数を増やすだけでは仕事は振り分けられないため、前段にロードバランサ(=負荷分散装置)を置きます。届いたリクエスト(=利用者からの処理要求)を、各サーバへ均等に振り分ける役割を担います。

身近な例で考えると、スーパーのレジを増やすのと同じです。1つのレジを速くする(スケールアップ)のではなく、レジ台数を増やして案内係(ロードバランサ)が空いたレジへお客さんを誘導すれば、行列をどんどんさばけるようになります。

📌
水平拡張の意味

横に並べる=horizontal scaling#1#2#3#4足すほど横に伸びる

スケールアウトは英語で水平拡張(horizontal scaling)とも呼ばれます。サーバを「横に並べて広げていく」イメージから、この呼び名が付いています。

水平拡張の大きな利点は次の2つです。
拡張性が高い:台数を足せば理論上ほぼ無限に処理能力を伸ばせる
可用性が高い:1台が故障しても、残りのサーバで処理を継続できる

可用性(かようせい)とは「サービスが止まらず使い続けられる度合い」のことです。複数台に分けておけば、1台がダウンしてもサービス全体は動き続けられるため、安定したサービス運営につながります。

📌
スケールアップとの比較

スケールアップ(1台を強化=垂直拡張)スケールアウト(台数を増やす=水平拡張)は、対になる拡張方式です。違いを表で整理します。

観点スケールアップスケールアウト
やり方1台を強化台数を増やす
方向垂直拡張(縦)水平拡張(横)
導入の手間簡単(アプリ変更不要)アプリ側の対応が必要
拡張の上限物理的な上限あり拡張性が高い
故障への強さ単一障害点になりやすい可用性が高い

どちらが優れているという話ではなく、状況に応じて使い分けるのがポイントです。手早く性能を上げたいときはスケールアップ、止まらず大きく伸ばしたいときはスケールアウト、と覚えておくと整理しやすくなります。実際の現場では両方を組み合わせて使うこともよくあります。

📌
なぜ台数を増やせるのか

ロードバランササーバ#1状態を持たないサーバ#2状態を持たない共有DB・セッション

スケールアウトで台数を増やすためには、各サーバが「ステートレス(状態を持たない)」であることが大切です。ステートレスとは、リクエスト(要求)を処理する際に、以前の処理結果を自分の中に覚えていない状態のことです。

なぜステートレスが必要なのか。例えばショッピングサイトで「カートに商品を入れた」という情報を、サーバ1号機だけが覚えていたとします。次のリクエストがサーバ2号機に振り分けられると、「カートの中身を知らない」2号機は正しく応答できません。そこで、状態(カートの中身・ログイン情報など)はデータベースやセッション管理の仕組みに外出しして、どのサーバからでも参照できるようにします。

身近な例では、コンビニのバイトが増えても困らない仕組みと同じです。注文の記録はレジシステム(共有DB)に入っているので、どのバイト(サーバ)が対応しても同じ情報が見えます。「あのバイトじゃないと分からない」状態をなくすことが、スケールアウトの前提です。

📌
ロードバランサの振り分け方

Req1Req2Req3LBラウンドロビンSrv#1Srv#2Srv#3順番に1つずつ割り当て(均等に分散)

ロードバランサ(LB=Load Balancer、負荷分散装置)は、届いたリクエストをどのサーバへ送るかを判断する装置です。代表的な振り分け方法は次のとおりです。


ラウンドロビン:サーバを順番に1台ずつ使い回す。最もシンプルで、負荷が均等になりやすい
最少接続数:現在の接続数が一番少ないサーバへ振り分ける。処理の重さが違う場合に有効
IPハッシュ:利用者のIPアドレスをもとに担当サーバを固定する。同じ利用者が毎回同じサーバにつながる

ロードバランサは「交通整理役」です。信号のない交差点に交通整理員を1人置くと、車(リクエスト)がスムーズに各道路(サーバ)へ流れるイメージです。ロードバランサがあるおかげで、利用者はどのサーバに接続しているかを意識せずにサービスを使えます。なお、ロードバランサ自体が1台だけだと、そこが壊れたときにサービス全体が止まる弱点があるため、実際にはロードバランサも複数台で冗長化(二重化)することが多いです。

📝
練習問題

Q1. スケールアウトの説明として最も適切なものはどれか。

Q2. スケールアウト(水平拡張)の特徴として正しいものはどれか。

Q3. スケールアウトで複数のサーバへ処理を振り分けるために、前段に置く装置はどれか。

関連コンテンツ