ニュースでとある企業が話題になったり、SNSで芸能人がバズったりすると関連するサイトへのアクセスが急に集中します。
また、オンラインゲームのユーザーがどんどん増えていくと、処理サーバへのアクセスがどんどん増えていきます。
こんなとき、何もしないでいるとどうなるでしょう?
「当然、サービスが落ちます!!」
こんなことが起きてしますと、そのサイトやサービスを運営している企業にとっては大きな打撃になってしまいますよね。
こんな状況を回避するために「キャパシティプランニング」という考え方があるので、今回はキャパシティプランニングとその手法である「スケールアウト」、「スケールアップ」に関して解説します!
キャパシティプランニングとは?
冒頭でも記載しましたが、企業は現状だけでなく、未来を見据えて、安定したサービスを提供する必要があります。
何かあってからでは遅いですからね。
安定したサービスを提供するには、システムの稼働状況を継続的に監視し、リソース状況等を把握した上で、システム全体として必要な処理効力を計算し、対策が必要になった際に計画的にシステム全体として対応をする必要があります。
これが「キャパシティプランニング」です。
そして、キャパシティプランニングの必要性が出てきた時の対策手段として「スケールアウト」と「スケールアップ」の二つがあります。
スケールアウトの仕組み
スケールアウト(Scale Out)とは、「サーバの台数を増やすことで、システム全体の処理能力を向上させる」ことです。
いわゆる負荷分散、というやつですね。
スケールアウトのメリット・デメリット
- メリット:サーバー機器を増やせば増やすほど、全体として高性能になる。(理論上限界が無い)
- デメリット:機器の数だけ設定が必要かつ負荷分散も必要なので、保守や管理が大変。
スケールアップの仕組み
スケールアップ(Scale Up)とは、「個々のサーバの処理能力を向上させることで、システム全体の処理能力を向上させる」ことです。
CPUを増やしたり、メモリを増強したり、ディスクを追加するなどして、性能を上げます。
「空きスロット」を用意しておくことで、リソースの追加ができるようにしておきますね。
スケールアウトのメリット・デメリット
- メリット:1台の機器が対象のため作業量が少なく手間がかからない
- デメリット:機器には物理的な制約(空スロットやクロック数)があるため、性能の向上には限界がある
スケールアウト、スケールアップの使い分け
スケールアウト、スケールアップともにシステム全体の性能を上げるための手段ですが、どう使い分けるのが良いのでしょうか?
意外と使い分けは簡単で、ズバリ!
システムが大きければスケールアウト、小さければスケールアップにしよう!
やはり、システムが大きくなれば、サービスを止めることもできないし、性能もどんどん必要になる可能性が高いので、スケールアウトが良いです。
一方、システムが小さければ、サービスも止められるし、サーバ台数も少ない方が保守も簡単で、コストもかからないので、スケールアップの方が良いです。
重要なのは、システムを設計する段階で、将来的にスケールアウトなのかスケールアップなのかを見極めて、構築していくことですね。
まとめ
今回はキャパシティプランニングにおける手法としてスケールアウトとスケールアップを解説してきました。
スケールアウトとスケールアップのまとめ
- キャパシティプランニングとは、システムの稼働状況を継続的に監視し、性能の向上が必要になったら計画を立てること
- スケールアウトとは「サーバの台数を増やすことで、システム全体の処理能力を向上させる」こと
- スケールアップとは「個々のサーバの処理能力を向上させることで、システム全体の処理能力を向上させる」こと
- システムの規模の大小によって、スケールアウトとスケールアップを使い分けると良い
Webサービスの世界ではあると思いますが、企業内の業務システムにおいては、私の経験上なかなかスケールアウトまではやらないですね。
昔と比べて、仮想やクラウドのテクノロジーが出てきたので、スケールアウト、スケールアップもやり易くなりましたね。
仮想においてはリソースを動的に増やしたりすることを「プロビジョニング」なんて言いますね。
以上です!