最終更新:

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


負荷に合わせてサーバーを増減
① 監視② 判定閾値や目標値③ 増減+起動までの時間・台数の上限も確認稼働台数の推移(仮の例)5台3台1台0時12時24時
図の台数は実測ではありません。監視・判定・台数調整の方式、反応時間、上限は構成によって異なります。予定や予測に基づく方式もあります。
ひよこ ひよこ
オートスケーリングってよく聞くけど、何がそんなにすごいの?
ペンギン先生 ペンギン先生
たとえばセールの日にECサイトへアクセスが殺到したとするよね。普段の10倍のサーバーを常に用意しておくと、平日はほとんど遊んでいてお金がもったいない。かといって少なすぎるとサイトが落ちる。オートスケーリングは、アクセス量に合わせてサーバーを自動で増やしたり減らしたりしてくれる仕組みなんだよ。
ひよこ ひよこ
必要なときだけ増えて、いらなくなったら減るってこと?お財布にも優しいね!
ペンギン先生 ペンギン先生
必要な処理能力に合わせて無駄を減らせるのが利点だね。1台のCPUやメモリを増強するのがスケールアップ、台数を増やすのがスケールアウト。ここでは台数を自動調整する仕組みを見ていこう。ただし、増設には起動時間がかかるから、急増した負荷を必ずさばけるわけではないよ。
ひよこ ひよこ
じゃあ実際にはどうやって『今、増やすべきだ』って判断してるの?
ペンギン先生 ペンギン先生
負荷に反応する方式なら、メトリクスの監視→ルールで判定→台数の調整、という流れだよ。CPU使用率などを見て、閾値や目標値に応じて増減する。AWSでロードバランサーと連携したASGなら、起動したインスタンスは自動で登録されるんだ。予定時刻や予測に基づいて増やす方式もあるよ。
ひよこ ひよこ
CPU使用率以外にも見るものがあるんだ?
ペンギン先生 ペンギン先生
うん。1台当たりのリクエスト数やキューの滞留数なども候補になるよ。ただし、使える指標は製品と方式によるんだ。AWSのターゲット追跡では、台数を増やすと1台当たりの負荷が下がるような指標が適している。監視したい値が何でもそのまま自動調整に向くわけではないよ。
ひよこ ひよこ
AWSだとどういう仕組みになってるの?
ペンギン先生 ペンギン先生
EC2 Auto ScalingではASGというグループで容量を管理するよ。動的スケーリングには、CPU使用率50%などの目標へ近づけるターゲット追跡、閾値からの超過幅で増減量を変えるステップ、クールダウンを使うシンプルの3方式がある。これらとは別に、時刻を指定するスケジュール方式や、過去の負荷から先回りする予測方式もあるんだ。
ひよこ ひよこ
Kubernetesの場合はどうなるの?
ペンギン先生 ペンギン先生
HPAがCPUなどの指標を使ってPod数を調整するよ。CPU使用率を目標にするなら、対象コンテナのCPU requests設定と、通常はMetrics Serverなどの指標提供元が必要なんだ。カスタム指標には対応するAPIへの連携も必要。Podを増やす指示が出ても、ノードの空き容量やアプリの起動時間によっては、すぐ処理できるとは限らないよ。
ひよこ ひよこ
増やしたり減らしたりを繰り返してバタバタしないの?
ペンギン先生 ペンギン先生
増減を繰り返すフラッピングには対策があるよ。ただし仕組みは同じではないんだ。AWSのシンプル方式はクールダウンで次の増減を待つけれど、ターゲット追跡やステップ方式は同じ待ち方をしない。HPAの縮小時の安定化ウィンドウは、過去の推奨Pod数の最大値を使って急な縮小を抑えるもので、判定そのものを止めるわけではないよ。
ひよこ ひよこ
自動化しても、システム全体を見ないといけないんだね。ほかに落とし穴はある?
ペンギン先生 ペンギン先生
鋭いね。現場でよくある落とし穴は、アプリ層だけスケールアウトしてもデータベースがボトルネックになるケース。サーバーが10台に増えたのにDBの接続数上限に引っかかって結局エラーになる、なんてことがある。コネクションプーリングなど、DBへの接続負荷を抑える設計も必要なんだ。それから大量のインスタンスが同時に起動してDBに一斉接続するコネクションストームも厄介な問題だね。オートスケーリングは魔法じゃなくて、システム全体を見て設計する必要があるよ。

セールの混雑を、レジの応援で考える

お店の行列が長くなったら応援を呼び、落ち着いたら人数を戻す。それに似た考え方で、サーバーやPodの数を調整します。ただし応援が持ち場に着くまで時間がかかるように、新しいサーバーも起動して準備が整うまで待つ必要があります。

ここで考えたいのは「行列の何を測るか」です。注文を待つ仕事の数ならキューの滞留、Webの受付なら1台当たりのリクエスト数など、処理能力と結びつく指標を選びます。単にアクセス総数が増えたというだけで、同じ設定をどのアプリにも当てはめるわけではありません。

図を読んだら、①増減の判断材料、②起動までの時間、③増やせる上限、の3点を見つけてみましょう。その後にアプリの保存先であるDBも余裕があるかを確認します。次はスケールアウトで台数を増やす考え方を整理し、KubernetesとDocker Composeの比較へ進めます。

参考資料