ひとことで言うと
スケーラビリティは、利用者・データ・処理量が増えたときに、システムの性能や容量を柔軟に拡張できる性質です。
どんなシステムも、利用者が少ないうちは問題なく動きます。 問題は「増えたとき」です。アクセスが急増してもサービスが止まらず、必要に応じて拡張できる設計になっているかが、スケーラビリティです。
たとえ話でもう少し詳しく
スケーラビリティは、飲食店の座席設計に近いです。
- 普段は20席で十分でも、繁忙期には足りなくなる
- テーブルを追加できる余地のある店は、需要に合わせて対応できる
- 固定された間取りで増設できない店は、混雑時に対応の限界が来る
システムでも同じです。 利用者が10人のときに作ったサーバー構成が、10万人になっても同じように動くとは限りません。 最初からスケーラビリティを意識した設計にしておくことで、増加に合わせてサーバーを追加したり、クラウドのリソースを増やしたりして対応できます。
2種類のスケーリング
スケーラビリティを実現する方法には、主に2種類あります。
垂直スケーリング(スケールアップ) 1台のサーバーのCPU・メモリを強化する方法です。引越しせずに部屋をリフォームして広くするイメージ。限界はありますが、設定変更が簡単です。
水平スケーリング(スケールアウト) サーバーの台数を増やして処理を分散する方法です。席数が足りなければテーブルを増やすイメージ。理論上は無限に拡張できますが、複数台をまとめる仕組みが必要になります。
よく出る場面・使いどころ
- キャンペーンや年末などのアクセス集中に備えてサーバーを増強したいとき
- ユーザーが増え続けるサービスで、将来の拡張に備えた設計を検討するとき
- クラウドサービスで「必要なときだけリソースを増やしてコストを抑えたい」とき
- 特定の処理だけ重いため、その部分だけを切り出して拡張したいとき
似た言葉との違い
- ロードバランサー
- 複数のサーバーへリクエストを振り分ける仕組み
- 水平スケーリングを実現するための重要な部品
- クラウドサーバー
- リソースを柔軟に増減できるサーバー形態
- クラウドはスケーラビリティを実現しやすい環境として広く使われる
- 稼働率(アップタイム)
- サービスが止まらず動き続けている割合
- スケーラビリティが低いと負荷増大時に落ちやすく、稼働率にも影響する
実務で気にするポイント
- 最初から過剰に大きい構成にするより、拡張できる設計にしておく方がコスト効率がよい
- ボトルネック(処理が詰まる箇所)を特定して、そこを重点的に拡張する
- 水平スケーリングには、複数台で動かせる設計(セッション管理・データの共有方法など)が前提になる
- クラウド環境では「オートスケーリング」機能を使って、負荷に応じて自動でサーバーを増減できる
注意: スケーラビリティは「常に最大規模で備える」ことではありません。必要なときに必要なだけ拡張できる「余地と仕組みがある」状態が目標です。過剰な備えはコストを無駄に上げ、複雑さを増やします。