Instiq
第7章 · システムアーキテクチャ·v1.0.0·更新 2026/7/7·読了目安 約12分

変更要約: 初版(主題2.13・副主題2.13.1〜2.13.4に対応)

7.2キャパシティプランニングとスケーラビリティ

この節の要点

将来の負荷増大に備えるキャパシティプランの考え方と、負荷への対応方式であるスケールアップ・ダウン(垂直)とスケールアウト・イン(水平)の違いを学びます。スケールアウトを機能させる前提となるステートレス構成DBセッションの外部化)、構成管理ツール仮想マシンイメージによるマシン再構成の自動化、ロードバランサDNSラウンドロビンによる分散を押さえます。

サービスの利用者が増えれば、いずれ現在のサーバー構成では処理しきれなくなります。あわてて増強するのではなく、将来の負荷を見積もり、いつ・どう拡張するかを事前に計画しておくのがキャパシティプランニングです。拡張の方向性には大きく2通りがあり、どちらを選ぶかでシステム設計そのものが変わります。

7.2.1スケールアップ/ダウンとスケールアウト/イン

  • スケールアップ(垂直拡張)=1台のマシンの性能を強化する(CPU・メモリ・ストレージの増強)。逆に減らすのがスケールダウン。実装が単純な一方、性能には物理的な上限があり、増強中はダウンタイムを伴うことが多い。
  • スケールアウト(水平拡張)=同種のマシンを台数で増やすことで処理能力を上げる。逆に減らすのがスケールイン。理論上の上限が高く、1台の追加・削除がサービス全体を止めないのが利点だが、後述のステートレス構成が前提になる。

7.2.2ステートレス構成と自動化

  • ステートレス構成サーバー自身が状態(セッション情報など)を保持しない設計。セッション情報は特定サーバーに固定せず外部(共有ストア)に置き、DBも各Webサーバーから共有アクセスできるよう分離しておく。これによりどのリクエストがどのサーバーに届いても同じ結果が返り、サーバーの追加・削除(スケールアウト・イン)が自由になる。
  • 新規マシンを迅速かつ均一に用意する仕組みとして、構成管理ツール(Ansible等・設定を自動で適用)や仮想マシンイメージ(あらかじめ必要なソフトを組み込んだテンプレート)を使い、マシン再構成の手作業を排除する。台数を増減しても構成のばらつき(構成ドリフト)が起きないことが水平拡張の実務上の生命線となる。
  • リクエストを複数台へ振り分ける手段として、ロードバランサ(アプリ層で分散・死活監視や重み付けが可能)とDNSラウンドロビン(DNSが同一名に複数IPを順番に返す・単純だが死活監視ができず障害ノードへも振り続けるおそれ)がある。
試験ポイント

「スケールアップ=垂直・1台強化・上限あり」「スケールアウト=水平・台数増・ステートレス前提」の対比が最頻出です。「スケールアウトを実現する前提条件は何か」と問われたらステートレス構成(セッション・DBの外部化)が正解になります。「DNSラウンドロビンはロードバランサと違い死活監視ができない」という弱点も定番の出題ポイントです。

典型的な失敗パターンから理解を深めましょう。あるWebアプリが「ログインセッションをアプリサーバーのメモリ上に保持」していたとします。この状態で単純にサーバーを2台に増やす(スケールアウトする)と、あるリクエストがサーバーAで処理されログインし、次のリクエストがロードバランサによってサーバーBに振られると、Bはそのセッションを知らずログアウト状態に見えるという不具合が起きます。これがまさに「ステートレスでないためスケールアウトできない」典型例です。解決策は、セッションをRedis等の共有ストアへ外部化し、どのサーバーが応答してもセッション内容を参照できるようにすることです。同様に、各サーバーがローカルにしかない設定ファイルを個別に持っていると、台数が増えるたびに手作業で設定を複製する羽目になり、構成のばらつき(ドリフト)が事故の温床になります。ここで構成管理ツール(Ansible の Playbook で全ノードへ同じ設定を冪等に適用)や、あらかじめアプリ込みで焼き込んだ仮想マシンイメージから新規ノードを即座に複製する方式が効いてきます。キャパシティプランニングでは、現在のピーク負荷・成長率・スケールアウトに要するリードタイム(新規ノードの起動から実際にトラフィックを受けられるまでの時間)を見積もり、閾値に達する前に増強を開始できるよう計画します。

方式内容特徴
スケールアップ/ダウン1台の性能を増減単純だが上限あり・ダウンタイムを伴いやすい
スケールアウト/イン台数を増減高い拡張性・ステートレス構成が前提
ロードバランサ複数台へ分散死活監視・重み付け可能
DNSラウンドロビン複数IPを順番に返す単純・死活監視不可
注意

ひっかけ: 「スケールアウトはサーバー1台の性能を上げる方式である」は誤り=それはスケールアップの説明です。スケールアウト台数を増やす方式です。また「セッション情報をアプリサーバーのメモリに保持していても、ロードバランサさえあればスケールアウトできる」も誤りです。ロードバランサは分散の手段にすぎず、ステートレス構成(セッションの外部化)が伴わなければサーバー間でセッションの不整合が起きます。

スケールアップ(垂直)とスケールアウト(水平)の対比、ステートレス構成でセッション/DBを外部化する図。
スケールアウトはステートレス前提

7.2.3この節のまとめ

  • スケールアップ/ダウン=垂直(1台強化・上限あり)/スケールアウト/イン=水平(台数増減・高拡張性)
  • スケールアウトの前提はステートレス構成(セッション・DB外部化)+構成管理ツール/VMイメージで均一なマシン再構成+ロードバランサ/DNSラウンドロビンで分散

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. アクセス増加に備え、同種のWebサーバーを1台から3台へ増やして処理能力を高める方式は何と呼ばれるか?

Q2. ログインセッションをアプリサーバーのローカルメモリに保持したままスケールアウトすると起きやすい問題は何か?

Q3. ロードバランサと比較したときのDNSラウンドロビンの弱点として正しいものはどれ?

理解度を確認第7章「システムアーキテクチャ」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。