スケーラビリティとは?成長に強いシステム設計の核心を解説

システム開発・テクノロジー
スケーラビリティとは?ざっくりと3行で
  • システムの規模や負荷が変化したとき、性能を落とさずに柔軟に拡張・縮小できる性質のこと。日本語では「拡張性」とも訳される
  • ユーザーが100人から100万人に増えても快適に動き続けるかどうかがスケーラビリティの本質。スケールアウト(台数を増やす)とスケールアップ(1台の性能を上げる)の2つのアプローチがある
  • クラウドのオートスケーリングが普及した現代では、トラフィックに合わせて自動でスケールするシステム設計が標準となっている

【深掘り】これだけ知ってればOK!

スケーラビリティの本質を「水道」に例えると分かりやすい。蛇口をひねる人が100人から100万人に増えても十分な水圧で水が出るために、水道管を太くしたり(スケールアップ)、水道管の本数を増やしたり(スケールアウト)する設計がシステム設計のスケーラビリティに対応する。

スケールアップとスケールアウトの違いを整理しよう。スケールアップ(垂直スケーリング)は1台のサーバーのCPU・メモリを増強する方法だ。設定変更が比較的容易だが、1台のハードウェアには物理的な上限があり、コストが指数関数的に上がる。スケールアウト(水平スケーリング)はサーバーの台数を増やして負荷を分散する方法だ。理論上は無限に拡張できるが、ロードバランサーの設計やデータの整合性管理が複雑になる。

現代のWebサービスでスケーラビリティを確保する定番設計パターンはステートレス設計だ。サーバーがユーザーのセッション情報を保持しない(ステートレス)設計にすることで、どのサーバーにリクエストが届いても同じ処理ができる。これによりサーバー台数を自由に増減できるスケーラブルなアーキテクチャが実現する。

スケーラビリティの「ボトルネック」を見つけることが設計の最初のステップだ。よくあるボトルネックはデータベースだ。アプリサーバーをいくら増やしても、DBが1台で接続数が詰まれば全体が遅くなる。読み取り専用のリードレプリカを追加する・キャッシュ(Redis等)で読み取りを肩代わりさせるのがDB周りのスケーラビリティ改善の定番策だ。

スケーラビリティとコストの関係も押さえておきたい。スケールアウトは必要なときだけサーバーを増やし、負荷が下がったら減らせるため、クラウドとの親和性が高くコスト最適化しやすい。一方スケールアップは増強したハードウェアが使われなくても課金され続けるため、負荷が変動するシステムでは無駄が生まれやすい。

よくある誤解

スケーラビリティは最初から完璧に設計する必要はない

スタートアップ初期から高スケーラビリティの設計をすると開発コストが膨大になる。まずシンプルに作り、ボトルネックが見えてからスケールの設計を追加するのが現実的なアプローチだ。Netflixもサービス初期はモノリシックな構成だった。

スケールアウトが常にスケールアップより良いとは言えない

データベースなど状態を持つコンポーネントをスケールアウトするのは技術的に難しく、分散トランザクションの管理が必要になる。用途とコンポーネントの特性に応じて使い分けることが重要だ。

会話での使われ方

ITKAGYO運営者のアイコン画像

キャンペーン期間中だけアクセスが10倍になるので、オートスケーリングで自動的にサーバーを増減させる設計にしています。

ECサイトのインフラ設計レビューで担当エンジニアが方針を説明している場面。

ITKAGYO運営者のアイコン画像

DBがボトルネックになってますね。アプリサーバーを増やしてもここが詰まったら意味ないので、リードレプリカを追加しましょう。

パフォーマンス調査の結果を受けてインフラエンジニアが改善策を提案している場面。

ITKAGYO運営者のアイコン画像

スケーラビリティって最初から考えるべきですか?ユーザーが増えるかどうかもまだわからないのに。

スタートアップの初期エンジニアが技術顧問に現実的な設計方針を相談している場面。

【まとめ】3つのポイント

  • 「成長してもパフォーマンスを維持できる設計の性質」:スケーラビリティとは需要の変化に対してシステムを柔軟に拡張・縮小できる能力で、現代Webサービスの設計基本原則の一つだ
  • スケールアウトとスケールアップを使い分ける:台数を増やすスケールアウトはクラウドと相性が良くコスト最適化しやすい。単体強化のスケールアップはシンプルだが上限がある
  • ボトルネックの特定から始める:アプリサーバーをいくら増やしてもDBが詰まれば意味がない。計測でボトルネックを特定してからスケールの手を打つことが効率的な改善の基本だ

よくある質問

Q
スケーラビリティの高いシステムを作るためのベストプラクティスは?
A

ステートレスなサーバー設計・ロードバランサーの導入・DBのリードレプリカとキャッシュの活用・マイクロサービス化・オートスケーリングの設定が代表的なプラクティスです。一度に全部やるのではなく、ボトルネックから順に対処するのが現実的です。

Q
スケールアウトとスケールアップはどちらがいいですか?
A

用途によります。アプリケーションサーバーのような状態を持たない処理はスケールアウトが適しています。データベースなど状態を持つシステムはスケールアップのほうが管理が簡単なことが多いです。クラウド環境ではスケールアウトのほうがコスト最適化しやすい傾向があります。

Q
スケーラビリティと可用性の違いは何ですか?
A

スケーラビリティは負荷の変化に対してシステムを拡張できる性質です。可用性はシステムが稼働し続けられる能力です。スケーラビリティが高いシステムは負荷増に対応できますが、障害時に止まる可能性はあります。両者は異なる設計目標で、それぞれ独立して考える必要があります。

Q
スケーラビリティとパフォーマンスの違いは何ですか?
A

パフォーマンスは現在の負荷に対するシステムの応答速度や処理能力です。スケーラビリティは負荷が増えたときにパフォーマンスを維持できるかという将来的な拡張能力です。今速くても負荷が増えると遅くなるシステムは、パフォーマンスは高くてもスケーラビリティは低いといえます。

【出典】参考URL

https://www.pc-webzine.com/article/2290 :スケーラビリティ・スケールアウト・スケールアップの詳細解説
https://it-notes.stylemap.co.jp/infrastructure/scalability%E2%86%92-a-comprehensive-guide-to-it-terminology/ :スケーラビリティとフォールトトレランスの関係

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました