目次
はじめに
自動でクラウドサーバーの台数やスペックを増減させることができるオートスケール。運用コストを最適化したりエンジニアや運用担当者の負担を減らしたりできるなどメリットもあり、利用している方も多いでしょう。
オートスケールとはどういったものか、またメリットや注意点(インスタンスをステートレス化しておくか、ユーザーがどこまで操作したかをサーバー間で共有する仕組みを用意しておくこと)などについて改めて解説します。
オートスケールとは
オートスケールとは、インスタンスの負荷のしきい値をあらかじめ設定することで、しきい値に達した際に自動的にクラウドサーバーの台数やスペックを増減させる機能のことです。サーバーへの負荷を常にモニタリングし、負荷に応じてサーバーを追加したり削除したりします。
オートスケールを設定することで、サーバーへの負荷を人が監視しておく必要がなくなるので、システム運用の効率化が図れます。
オートスケールを知るうえで、押さえておきたい用語があります。それは、「スケールアウト」と「スケールイン」、「スケールアップ」と「スケールダウン」です。これらが理解できれば、オートスケールについてより理解が深まるでしょう。
スケールアウトとスケールイン


スケールアウトとスケールインは、システムを構成するサーバーの台数を増減させることに関する用語です。スケールアウトはサーバーの台数を増やすこと、スケールインはサーバーの台数を減らすことを意味します。
サーバー台数を増減させることでシステムの処理能力を高めたり、逆に落としたりするのがスケールアウト・スケールインの目的です。
個々の処理が比較的単純で、複数のサーバー間でデータ連携があまりなく、多数の処理を同時並行に行う必要があるシステムに向いています。
例えば、あるWebサーバー1台で1分間に10件のリクエスト処理ができるとします。ここからWebサーバーを1台増設すると、1分間で倍の20件のリクエストが処理できるようになります。これが、スケールアウトの考え方です。
Webサーバーの台数を増やしておくことで、万が一サーバーが故障したときにも他のサーバーがカバーでき、安定して運用することができます。
逆に、アクセスが減ってきたときにスケールインを行うことで、余分なサーバーを減らして無駄なコストが抑えられます。時間帯に応じてスケールインをすると、常にサーバーリソースの最適化が可能です。
スケールアップとスケールダウン


スケールアウト・スケールインと対照的なのが、「スケールアップ」と「スケールダウン」です。これらは台数の増減をするのではなく、CPUやメモリなど、サーバースペックを増強したり下げたりすることでシステムの性能を調整する方法です。
サーバースペックを上げることを「スケールアップ」、下げることを「スケールダウン」といいます。
スケールアップ/ダウンは、複数サーバーが同期して動くようなサーバー間データ連携があり、データの整合性に高い信頼性を求められるシステムに向いています。
たとえば、データ更新時の排他制御を効率的に行う必要があるデータベースサーバーは、更新処理を行う複数プロセスを1つのインスタンス内で実行できるスケールアップが向いています。また、アクセス集中時のシステムの可用性が求められると同時に、データの整合性も厳しく求められる、本社と支社で共通に使う基幹業務システムなどです。
この基幹業務システムを、プライベートクラウド上で稼働させ、業務が集中する時間帯は、スケールアップしてシステムリソースを増やし、業務時間外などアクセスが極端に減る時間帯ではスケールダウンをするなど工夫をすることで、無駄なくサーバーリソースを最適化できます。
オートスケールでできること
オートスケールの主な機能は、これまで解説した「スケールアウト」と「スケールイン」、「スケールアップ」と「スケールダウン」です。これらにより、サーバーにかかる負荷を常に監視し、必要に応じてサーバーの台数の増減やスペックの上げ下げを行います。
オートスケールを活用すればスムーズなインフラの増強が可能で、予測しえなかった急なアクセス増にも柔軟に対応することができます。またオペレーターの手も不要で、自動的にインスタンスの追加・削除、スペックの上げ下げをしてくれるので、効率的なシステム運用が可能です。
オートスケールのメリット
あらためてオートスケール導入のメリットを整理しましょう。 主なメリットは以下のとおりです。
- 突発的なサーバー負荷にも耐えられるシステムの構築が可能
- 運用リスクを軽減できる
- インフラの運用コストを最適化できる
突発的なサーバー負荷にも耐えられるシステムの構築が可能
オートスケールでは、常にサーバーへの負荷を監視しているため、一時的なアクセス集中など突発的にサーバーへの負荷が集中しても、安定的な運用ができるシステムの構築が可能です。
これにより、リソース不足やレスポンスの低下を回避できるため、サーバーダウンなどによる機会損失を回避し、売上の拡大などにもつながることが見込めます。
運用リスクを軽減できる
システム運用をする際、何らかのトラブルによりサーバーが故障してしまうことも考えられます。
オートスケールでサーバー台数を増やしていた場合、万が一1つのサーバーが故障しても、オートスケーリング設定を「指定したインスタンスの最小台数を維持する」よう指定することで、あるサーバーがダウンした際にも別のサーバーがカバーできるなど、リスク軽減にもつながります。
インフラの運用コストを最適化できる
オートスケールは、あらかじめ設定したインスタンスの設定に基づいて、スケールアウト・スケールイン、スケールアップ・スケールダウンが自動的に実行されます。サーバー台数やスペックが必要なときには増強し、不要になれば調整することによって、コストを無駄なく最適化しながらの運用が可能です。
オートスケール使用上の注意点
多くのメリットがあるオートスケールですが、活用する際には注意しておくべき点もあります。それは、インスタンスをステートレス化しておくか、ユーザーがどこまで操作したかをサーバー間で共有する仕組みを用意しておくことです。「これだけではよくわからない」という方もいらっしゃると思いますので、以下で詳しく見ていきましょう。ステートレスとステートフルについて
ステートレスの「ステート」とは「状態」を表す言葉です。つまり、ステートレスとは「状態がない」という意味になります。逆の意味でステートフルという言葉があります。
ステートフルとは「サーバーがクライアントのセッション情報を保持していること」、ステートレスとは「サーバーがクライアントのセッション情報を持たないこと」を言います。また、セッション情報とは、ユーザーがどこまで操作したかの情報と考えると良いでしょう。
もう少し詳しく説明するために、ステートフル・ステートレスをよく例えられる、ハンバーガーショップに置き換えた説明をご紹介します。
ステートフルの場合
店員:いらっしゃいませ。ご注文をどうぞ。
客:ハンバーガーセットをください。
店員:サイドメニューはどうされますか?
客:ポテトでお願いします。
店員:ドリンクはどうされますか?
客:コーラでお願いします。
店員:+50円でサイズアップができますがどうされますか?
客:お願いします。
店員:ハンバーガーセット、サイドメニューはポテト、ドリンクはコーラ、サイズアップでよろしいですか?
客:はい。
店員:かしこまりました。
このようにステートフルの場合は、店員が客が言った前の情報を保持し、情報を重ねていく形になります。一方、ステートレスでは以下のようになります。
ステートレスの場合
店員:いらっしゃいませ。ご注文をどうぞ。
客:ハンバーガーセットをください。
店員:サイドメニューはどうされますか?
客:ハンバーガーセット、サイドメニューはポテトでお願いします。
店員:ドリンクはどうされますか?
客:ハンバーガーセット、サイドメニューはポテト、ドリンクはコーラでお願いします。
店員:+50円でサイズアップができますがどうされますか?
客:ハンバーガーセット、サイドメニューはポテト、ドリンクはコーラLサイズでお願いします。
店員:以上でよろしいですか?
客:ハンバーガーセット、サイドメニューはポテト、ドリンクはコーラLサイズでお願いします。以上です。
店員:かしこまりました。
ステートレスでは、店員は前の情報を保持せず、客が一度にすべての指示をする必要があります。
システムの話に戻すと、ステートレスでは、ユーザーが途中まで操作した段階でスケールインしサーバー数が減った場合でも、常にユーザーが全データを送信します。これにより、スケールイン・スケールアウトが発生してもスムーズなシステム運用が可能です。
それに対して、ステートフルの場合はユーザーがどこまでの操作を行ったかをシステムが保持する必要があります。ステートフルでオートスケールを利用する場合は、ユーザーが途中まで操作した情報をサーバー間で共有する仕組みを用意しておき、スケールアウトやスケールインでサーバーが増減した場合でも続きの処理を別のサーバーでもできるようにしておきます。そうしないと、新しく起動されたインスタンスにリクエストしたときにデータが存在しないというエラーが発生することがあります。
これを実現するには、それ用にアプリケーションを実装する必要があります。
このように、オートスケールを活用するには、ステートレスにしたり、ステートフルの場合はユーザーの操作を複数サーバー間で共有する実装を行うことが重要です。
おわりに
オートスケールは、突発的にアクセスが集中したときにも安定したサービスの提供が可能で、サーバーダウンなどによる機会損失を回避することができます。また、サーバー数やスペックを自動的に最適化することで、運用コスト削減にもつながるでしょう。その際にはオートスケールを考慮した作りにするように気を付けましょう。

Tag: オートスケール ステートレス/ステートフル
Contactお問い合わせ
お見積もり・ご相談など、お気軽にお問い合わせください。