スケーラビリティ

スケーラビリティは、利用者や負荷が増えたときに、システムがそれに合わせて拡張できる能力のことです。

スケーラビリティ のアイキャッチ図解
まずは、こう考えるとつかみやすいです。

スケーラビリティは、来客数に応じてテーブルや席を増やせる飲食店の構造のようなものです。満席になっても増設できる余地があるかどうかが重要です。

ひとことで言うと

スケーラビリティは、利用者・データ・処理量が増えたときに、システムの性能や容量を柔軟に拡張できる性質です。

どんなシステムも、利用者が少ないうちは問題なく動きます。 問題は「増えたとき」です。アクセスが急増してもサービスが止まらず、必要に応じて拡張できる設計になっているかが、スケーラビリティです。

たとえ話でもう少し詳しく

スケーラビリティは、飲食店の座席設計に近いです。

  • 普段は20席で十分でも、繁忙期には足りなくなる
  • テーブルを追加できる余地のある店は、需要に合わせて対応できる
  • 固定された間取りで増設できない店は、混雑時に対応の限界が来る

システムでも同じです。 利用者が10人のときに作ったサーバー構成が、10万人になっても同じように動くとは限りません。 最初からスケーラビリティを意識した設計にしておくことで、増加に合わせてサーバーを追加したり、クラウドのリソースを増やしたりして対応できます。

2種類のスケーリング

スケーラビリティを実現する方法には、主に2種類あります。

垂直スケーリング(スケールアップ) 1台のサーバーのCPU・メモリを強化する方法です。引越しせずに部屋をリフォームして広くするイメージ。限界はありますが、設定変更が簡単です。

水平スケーリング(スケールアウト) サーバーの台数を増やして処理を分散する方法です。席数が足りなければテーブルを増やすイメージ。理論上は無限に拡張できますが、複数台をまとめる仕組みが必要になります。

よく出る場面・使いどころ

  • キャンペーンや年末などのアクセス集中に備えてサーバーを増強したいとき
  • ユーザーが増え続けるサービスで、将来の拡張に備えた設計を検討するとき
  • クラウドサービスで「必要なときだけリソースを増やしてコストを抑えたい」とき
  • 特定の処理だけ重いため、その部分だけを切り出して拡張したいとき

似た言葉との違い

  • ロードバランサー
    • 複数のサーバーへリクエストを振り分ける仕組み
    • 水平スケーリングを実現するための重要な部品
  • クラウドサーバー
    • リソースを柔軟に増減できるサーバー形態
    • クラウドはスケーラビリティを実現しやすい環境として広く使われる
  • 稼働率(アップタイム)
    • サービスが止まらず動き続けている割合
    • スケーラビリティが低いと負荷増大時に落ちやすく、稼働率にも影響する

実務で気にするポイント

  • 最初から過剰に大きい構成にするより、拡張できる設計にしておく方がコスト効率がよい
  • ボトルネック(処理が詰まる箇所)を特定して、そこを重点的に拡張する
  • 水平スケーリングには、複数台で動かせる設計(セッション管理・データの共有方法など)が前提になる
  • クラウド環境では「オートスケーリング」機能を使って、負荷に応じて自動でサーバーを増減できる

注意: スケーラビリティは「常に最大規模で備える」ことではありません。必要なときに必要なだけ拡張できる「余地と仕組みがある」状態が目標です。過剰な備えはコストを無駄に上げ、複雑さを増やします。