本サイトは広告により収益を得ています

負荷分散とオートスケーリングの詳細な設計

負荷分散とオートスケーリングの詳細な設計

2025年11月10日
フリー検定
広告

目次

現在: 8 / 12

バックエンドエンジニアに関する検定はこちら

面倒な会員登録も不要!すぐに受験!

無料で受験する

大規模なWebサービスやマイクロサービス環境において、システムのスケーラビリティと可用性を確保するためには、**負荷分散(Load Balancing)オートスケーリング(Auto Scaling)**の技術が不可欠です。

エキスパートエンジニアは、これらの技術を組み合わせ、予測不可能なトラフィック変動に対応できる、弾力性のあるインフラストラクチャを設計する必要があります。


1. 負荷分散 (Load Balancing) の役割と種類

負荷分散は、複数のサーバー(アプリケーションインスタンス)にトラフィックを効率的に分散させることで、単一サーバーへの負荷集中を防ぎ、可用性を高める仕組みです。

A. 負荷分散の主な機能

  1. トラフィック分散: クライアントからのリクエストを複数のバックエンドサーバーに均等に振り分けます。

  2. ヘルスチェック: バックエンドサーバーの健全性を継続的に監視し、障害が発生したサーバーへのリクエスト送信を自動で停止します。

  3. セッション維持: 必要に応じて、特定のクライアントからのリクエストを常に同じサーバーに送る仕組み(セッションアフィニティスティッキーセッション)を提供します。

B. 負荷分散の方式(アルゴリズム)

リクエストをどのサーバーに割り当てるかを決定するアルゴリズムには、主に以下の種類があります。

  • ラウンドロビン (Round Robin): 各サーバーにリクエストを順番に均等に割り当てます。最もシンプルですが、サーバーごとの処理能力や現在の負荷は考慮しません。

  • 重み付けラウンドロビン (Weighted Round Robin): 各サーバーに設定された「重み」(処理能力)に応じて、リクエストの配分比率を調整します。

  • 最小接続数 (Least Connections): 現在、アクティブな接続数が最も少ないサーバーにリクエストを割り当てます。これは、処理負荷が低いサーバーを優先するため、最も広く利用される効率的なアルゴリズムの一つです。

  • IPハッシュ (IP Hash): クライアントのIPアドレスを基にハッシュ値を計算し、常に同じサーバーに割り当てます。セッションアフィニティを実現する単純な方法の一つです。

C. ロードバランサーの階層

負荷分散は、OSI参照モデルの階層に応じて分類されます。

  • レイヤ4 (トランスポート層) ロードバランサー: IPアドレスとポート番号に基づいてトラフィックを分散します。処理が高速ですが、アプリケーション層の情報(HTTPヘッダーなど)は参照できません。(例: TCPレベルの分散)

  • レイヤ7 (アプリケーション層) ロードバランサー: HTTPヘッダー、URLパス、Cookieなどの情報に基づいてトラフィックを分散します。より柔軟なルーティング(例: 特定のURLパスを特定のマイクロサービスに送る)が可能ですが、処理負荷は高くなります。


2. オートスケーリング (Auto Scaling) の詳細設計

オートスケーリングは、トラフィックや負荷の状況に応じて、サーバーリソース(インスタンス数)を自動的に増減させる仕組みです。これにより、ピーク時の性能を保ちつつ、アイドル時のコストを最小限に抑えます。

A. スケーリングの種類

  1. スケールアウト(水平スケーリング): サーバーの台数を増やすことで処理能力を向上させます。クラウド環境では最も推奨される手法です。

  2. スケールイン(水平スケーリング): サーバーの台数を減らすことでリソースを解放し、コストを削減します。

  3. スケールアップ(垂直スケーリング): 既存のサーバーのスペック(CPU、メモリ)を向上させます。限界があり、停止時間が発生することが多いです。

B. オートスケーリングの設計原則

オートスケーリングを設計する上で最も重要なのは、適切なメトリクスポリシーを設定することです。

  • メトリクスの選択:

    • CPU使用率: サーバーの処理能力の限界を示す一般的な指標です。

    • リクエストキューの深さ: 処理待ちのリクエストが溜まっていないかを示します。

    • レイテンシ(応答時間): ユーザー体験に直結する指標です。

    • 注意: データベースの接続数など、アプリケーション固有のメトリクスも考慮します。

  • スケーリングポリシー:

    • ターゲット追跡スケーリング: 最も推奨されるシンプルで効率的なポリシーです。(例: 「平均CPU使用率が50%になるようにインスタンス数を自動で調整する」)

    • ステップスケーリング: メトリクスの変動幅に応じて、一度に増減させるインスタンス数を段階的に設定します。

    • スケジュールスケーリング: トラフィックが予測可能な時間帯(例: 毎朝9時)に合わせて事前にリソースを増強します。

C. クールダウン期間の設計

インスタンスが起動・停止するプロセスには時間がかかります。スケーリングイベントが連続して発生し、インフラが不安定になるのを防ぐため、スケーリングが実行された後、一定期間は次のスケーリングを待機するクールダウン期間を設定することが重要です。この期間を適切に設定することで、フリッピング(サーバーが不安定に増減を繰り返す現象)を防ぎます。


3. クラウドサービスとの連携(AWS/GCP/Azure)

クラウド環境では、これらの機能がマネージドサービスとして提供されています。

  • AWS: ELB (Elastic Load Balancing)Auto Scaling Group (ASG) が連携します。

    • ELBには、レイヤ4のNLB (Network Load Balancer) と、レイヤ7のALB (Application Load Balancer) があります。

  • GCP: Cloud Load BalancingManaged Instance Group (MIG) が連携します。GCPのロードバランサーは、グローバルに分散された単一のIPアドレスを持つのが特徴です。

  • Azure: Azure Load BalancerVirtual Machine Scale Sets (VMSS) が連携します。アプリケーション層の分散には、Application Gatewayが利用されます。

エキスパートエンジニアは、これらの機能を活用し、システムのパフォーマンスとコスト効率を最大化する設計を行う必要があります。

バックエンドエンジニアに関する検定はこちら

面倒な会員登録も不要!すぐに受験!

無料で受験する
広告

検定一覧はこちらから

様々なジャンルの検定から選んで、あなたの知識を試してみましょう。

検定一覧を見る

関連記事

広告