オートスケーリングの仕組み ― サーバーが自動で増減する技術


オートスケーリングの仕組み メトリクス監視 CPU% 70% スケーリングルール CPU > 70% → スケールアウト インスタンス + トラフィックに応じた台数変化 台数 5 3 1 0:00 6:00 9:00 12:00 18:00 24:00 min スケールアウト ピーク スケールイン 深夜 深夜 時刻 既存インスタンス 追加インスタンス インスタンス数推移
オートスケーリングの仕組み:メトリクス監視からインスタンス増減までの流れ
ひよこ ひよこ

オートスケーリングってよく聞くけど、何がそんなにすごいの?

ペンギン先生 ペンギン先生

たとえばセールの日にECサイトへアクセスが殺到したとするよね。普段の10倍のサーバーを常に用意しておくと、平日はほとんど遊んでいてお金がもったいない。かといって少なすぎるとサイトが落ちる。オートスケーリングは、アクセス量に合わせてサーバーを自動で増やしたり減らしたりしてくれる仕組みなんだよ。

ひよこ ひよこ

必要なときだけ増えて、いらなくなったら減るってこと?お財布にも優しいね!

ペンギン先生 ペンギン先生

そうそう。コスト効率と信頼性を両立できるのが最大のメリットだね。ちなみにスケーリングには大きく2種類あって、スケールアップ垂直スケーリング)とスケールアウト水平スケーリング)があるんだ。

ひよこ ひよこ
ペンギン先生 ペンギン先生

スケールアップは1台のサーバーをもっと高性能なものに交換すること。CPUやメモリを増やすイメージだね。スケールアウトは同じスペックのサーバーを台数ごと増やすこと。オートスケーリングで主に使われるのはスケールアウトの方で、台数を増減させるから柔軟性が高いんだよ。

ひよこ ひよこ

じゃあ実際にはどうやって『今、増やすべきだ』って判断してるの?

ペンギン先生 ペンギン先生

基本的な流れは3ステップ。まずメトリクス監視する。CPU使用率やリクエスト数、キューの滞留数なんかだね。次にあらかじめ設定したルールと照らし合わせて『閾値を超えたか?』を判定する。超えていたら新しいインスタンスを起動して、ロードバランサーに追加する。逆に負荷が下がったらインスタンスを減らすんだよ。

ひよこ ひよこ

CPU使用率以外にも見るものがあるんだ?

ペンギン先生 ペンギン先生

うん。リクエスト数やレスポンスタイムメッセージキューの深さ、さらにはアプリ固有のカスタムメトリクスも使えるよ。たとえば動画配信サービスなら同時視聴者数をメトリクスにすることもあるんだ。何を基準にスケールさせるかはサービスの特性次第だね。

ひよこ ひよこ

AWSだとどういう仕組みになってるの?

ペンギン先生 ペンギン先生

AWSではAuto Scaling Groups(ASG)が中心だよ。起動テンプレートインスタンスの設定を決めて、最小・最大・希望台数を指定する。スケーリングポリシーには3種類あって、ターゲット追跡(CPU使用率を50%に保つ等)、ステップスケーリング(閾値ごとに追加台数を変える)、スケジュールスケーリング(毎朝9時に台数を増やす等)が使えるんだよ。

ひよこ ひよこ

Kubernetesの場合はどうなるの?

ペンギン先生 ペンギン先生

KubernetesにはHPA(Horizontal Pod Autoscaler)があるよ。metrics-serverがPodCPUやメモリ使用率を収集して、設定した目標値に近づくようにPod数を自動調整するんだ。さらにPrometheusと連携すれば、リクエスト数やカスタムメトリクスでもスケールできる。コンテナだから起動が速くて、スケールアウトの反応が早いのが強みだね。

ひよこ ひよこ

増やしたり減らしたりを繰り返してバタバタしないの?

ペンギン先生 ペンギン先生

いい質問だね。それはフラッピング(スラッシング)と呼ばれる問題で、実際に起きやすいんだ。たとえばCPU使用率が閾値を行ったり来たりすると、増やす→減らす→また増やす…と無駄な動きをしてしまう。それを防ぐために『クールダウン期間』や『安定化ウィンドウ』を設定して、スケール後しばらくは次の判定を待つようにするんだよ。

ひよこ ひよこ

なるほど、落ち着くまで様子を見る時間を入れるんだね。もっと賢い方法はないの?

ペンギン先生 ペンギン先生

あるよ。最近は予測スケーリングといって、過去のトラフィックパターンを機械学習で分析して、ピークが来る前にあらかじめスケールアウトしておく手法が使われているんだ。AWSのPredictive Scalingが代表例だね。さらにサーバーレスの世界ではKnativeやKEDAを使ってスケール・トゥ・ゼロ、つまりリクエストがないときはインスタンスをゼロにして、来たら起動するということもできるんだよ。

ひよこ ひよこ

ゼロにまでできるんだ!でもそこまで自動化すると、何か落とし穴もありそう…。

ペンギン先生 ペンギン先生

鋭いね。現場でよくある落とし穴は、アプリ層だけスケールアウトしてもデータベースボトルネックになるケース。サーバーが10台に増えたのにDBの接続数上限に引っかかって結局エラーになる、なんてことがある。コネクションプーリングリードレプリカの準備も合わせて考える必要があるんだ。それから大量のインスタンスが同時に起動してDBに一斉接続するコネクションストームも厄介な問題だね。オートスケーリングは魔法じゃなくて、システム全体を見て設計する必要があるよ。