サーバの処理能力を増強するアプローチには大きく分けて2つある。スケールアウトとスケールアップだ。両者はそれぞれ特性があり、相互補完的である。両者の使い分けについて多少の誤解が見られることがあるので、ここで整理しておこう。
スケールアップ? スケールアウト?
スケールアップとは、サーバそのものを増強することによって処理能力を向上することだ。垂直スケール(名詞の時は垂直スケーラビリティ)と呼ばれることもある。典型的には、SMP(対称型マルチプロセッサ)においてプロセッサを追加することや、プロセッサそのものを高性能モデルで置き換えることを指す。
一方スケールアウトとは、接続されたサーバの台数を増やして処理能力を向上させることだ。水平スケール(名詞の時は水平スケーラビリティ)と呼ばれることもある。典型的には、ウェブサーバファームとして使用されているラックマウントサーバ群にサーバを追加することや、ブレードサーバにブレードを追加することなどだ。サーバの仮想化機能を使って、ひとつの筐体内で仮想的に複数サーバを構築し、スケールアウトと同等の効果を提供することもできる。このような方式を特にスケールウィズインまたは仮想スケールアウトなどと呼ぶこともある。
スケールアウトが適する場合
では、スケールアップとスケールアウトの使い分けについて見ていこう。説明の都合上、スケールアウトが有効なケースについて最初に検討する。
スケールアウトは、個々の処理は比較的単純であるが、多数の処理を同時並行的に行わなければならないケースで、かつ、更新データの整合性維持に対する要件があまり厳しくないケースに適している。すなわち、高い並列性を実現しやすい場合だ。
典型的なのが、前述のウェブサーバファームである。ウェブサービングでは、ネットワークから送られてきた多数の要求を同時並行的に処理する必要があるが、個々の処理は比較的単純である。また、基本的にステートレスな処理であり、データへのアクセスはほとんどリードオンリーである。ゆえに、通常ウェブサービング環境ではラックマウント型のサーバやブレードサーバを利用して、比較的小規模なサーバを少ない設置面積で多数稼働するスケールアウトにフォーカスが置かれる。
また、サーチエンジン、データ分析処理、VoD(ビデオオンデマンド)、一部の科学技術計算等も、同様の理由によりスケールアウトによる処理能力の向上が実現しやすい領域だ。これらのアプリケーションでは、基本的にデータはリードオンリーだからである。
このように、ステートレス(リードオンリー)なスケールアウト環境においては、処理能力向上に加えて、可用性の増大というメリットも得られる。1台のサーバが障害を起こしても、他のサーバで直ちに処理を継続できるからだ。
データ更新が必要な場合も、データベースの分割が比較的容易であれば、スケールアウトのアプローチを活用できる。メールサーバや掲示板などのアプリケーションがこれにあたる。この場合、メールのユーザーや掲示板をグループ分けして、それぞれにサーバを割り当てることで処理能力が向上できる。しかし、このような場合には、サーバを追加した際にデータベースの分割作業が再度必要で、運用上の負担が大きくなることが多い。
スケールアウトが有効な領域において、スケールアップのアプローチを適用することもできる。しかし、一般的にスケールアップはスケールアウトよりも高コストとなることが多いため、あまり魅力的な選択肢とは言えない。