Skip to content
Latchkey

水平スケーリングとは? マシンを増やす

水平スケーリング、すなわちスケールアウトは、一つのインスタンスを大きくするのではなく、サービスのインスタンスを増やすことで、より多くの負荷を処理します。

需要が増えると、一台のマシンにより多くのパワーを与える (スケールアップ) か、より多くのマシンを動かす (スケールアウト) ことができます。水平スケーリングはスケールアウトのアプローチであり、load balancerの背後に同一のインスタンスを追加で立ち上げます。これはクラウドの弾力性の基盤であり、ステートレスで置き換え可能なサービスへとあなたを導きます。

より大きくではなく、より多くのインスタンス

より大きなサーバーにアップグレードする代わりに、同じサービスのコピーを多数動かし、リクエストをそれらに分散します。容量はインスタンスを追加することで増え、需要が下がれば取り除けます。

魅力的な理由

  • コモディティなインスタンスの追加によるほぼ線形の容量。
  • 弾力性: スパイクにはスケールアップ、コスト削減にはスケールダウン。
  • レジリエンス: 一つのインスタンスを失っても残りが提供を続けます。
  • 単一マシンの最大サイズによる硬い上限がありません。

ステートレスであることの要件

水平スケーリングは、インスタンスが交換可能なときにのみきれいに機能します。どのリクエストもどのインスタンスに当たりうるため、ユーザーごとの状態はローカルメモリではなく、データベース・cache・session storeなど、インスタンスの外に置かなければなりません。

CI/CDに求めること

同一のインスタンスは、一つの不変なartifactを多数のマシンにデプロイすることを意味します。パイプラインはそのartifactを一度buildして展開し、health checkが各インスタンスをゲートします。再現可能で環境非依存なbuildこそが、多数の同一インスタンスを同じように振る舞わせます。

rollingデプロイが自然に適合

多数のインスタンスがあれば、一度に数台ずつ置き換え、その間ずっとサービスを稼働させ続けられます。パイプラインは各バッチをドレインし、更新し、health checkします。これは新バージョンがまだ動いている旧バージョンと後方互換を保つ場合にのみ機能します。

CI自体をスケールアウトする

同じ考えはbuild容量にも当てはまります。並列runnerが多いほど、一つの大きなrunnerよりも速くjobのバックログを片付けます。マネージドrunnerのフリート (Latchkeyなど) は自動でスケールアウトし、パイプラインjobのバーストがキューに入らず並列で走るようにします。

重要なポイント

  • 水平スケーリングは、より大きなインスタンスではなく、同一のインスタンスを増やします。
  • きれいに機能するには、ステートレスで交換可能なサービスが必要です。
  • デプロイは一つの不変なartifactを、バッチごとに多数のインスタンスへ展開します。

関連ガイド