スケーラビリティとは
スケーラビリティ(Scalability:拡張性)とは、システムに対する負荷(トラフィックやデータ量、処理要求)が増大した際に、システムがその要求に合わせてリソース(処理能力)を拡張し、パフォーマンスの低下や停止を起こすことなく正常に処理し続けられる能力のことです。 クラウドコンピューティングにおける最大のメリットの一つであり、システム設計において極めて重要な概念です。 スケーラビリティには大きく分けて、サーバー1台あたりの性能(CPUやメモリ)を上げる「スケールアップ(垂直スケーリング)」と、サーバーの台数を増やして負荷を分散させる「スケールアウト(水平スケーリング)」の2つのアプローチがあります。
具体例
スケーラビリティは「飲食店の接客体制」に例えることができます。
- スケールアップ(垂直スケーリング):お店の客が増えて対応しきれなくなったとき、新人アルバイトの代わりに「超優秀なベテラン店員」を雇って、1人で3人分の仕事をこなしてもらう方法です。サーバーのCPUやメモリをより高性能なものに交換するアプローチです。
- スケールアウト(水平スケーリング):客が増えたときに、普通のアルバイト店員の「人数(台数)」を3人から10人に増やして、みんなで分担して注文を取る方法です。クラウド環境では、同一構成のサーバーを横並びに増やしてロードバランサーでアクセスを振り分ける手法が一般的です。
もう少し詳しく
従来型のオンプレミス環境では、スケーラビリティを確保することは容易ではありませんでした。ピーク時の負荷に合わせて事前に高価なサーバーを購入しておく必要があり(オーバープロビジョニング)、急なアクセス増加に対してはサーバーの調達・キッティングに数週間かかるため対応できませんでした。 しかし、AWSのようなクラウド環境では、APIや管理画面からの操作一つで、数分以内にサーバーのスペックを上げたり(スケールアップ)、サーバーの台数を数十台、数百台と増やしたり(スケールアウト)することが可能です。
特に現代のクラウドアーキテクチャでは、「スケールアウト(水平スケーリング)」が推奨されます。スケールアップには物理的なハードウェアの限界(上限)が存在し、またサーバーを一時的に停止して設定を変更する必要がある(ダウンタイムが発生する)ケースが多いからです。 一方、スケールアウトはシステムを稼働させたままサーバーを追加でき、限界なく処理能力を拡張できます。AWSでは「Amazon EC2 Auto Scaling」と「Elastic Load Balancing (ELB)」を組み合わせることで、需要の増減に応じて自動的にサーバー台数を調整する「自動スケーリング」を簡単に実現できます。
試験でのポイント
CLF-C02試験では、スケーラビリティ(拡張性)と、リソースを自動的に増減させる「弾力性(Elasticity)」の違いや関連性がよく問われます。 「需要の増加に合わせてシステムを拡張できる能力」を問われた場合はスケーラビリティ(またはスケーリング)が該当します。 また、スケールアップ(垂直)とスケールアウト(水平)の違いを明確にしておきましょう。AWSのベストプラクティス(Well-Architected フレームワークなど)では、可用性を高めつつ無限の拡張性を持たせるために「スケールアウト(水平スケーリング)を前提としたアーキテクチャ」が推奨されています。
関連する用語
システムを拡張する能力である「スケーラビリティ」、リソースを自動的に増減させる「Amazon EC2 Auto Scaling」、およびコストの無駄を省くための「従量課金」という概念と強く関連しています。