⚖️

ロードバランシングの仕組み - 負荷分散でサービスを安定化

14分 で読める | 2025.12.18

ロードバランシングとは

ロードバランシング(負荷分散)は、複数のサーバーにトラフィックを分散させ、システム全体の可用性とパフォーマンスを向上させる技術です。

なぜ必要か: 1台のサーバーでは処理できない大量のリクエストに対応し、サーバー障害時もサービスを継続するために不可欠です。

ロードバランサーの基本構成

flowchart TB
    LB["ロードバランサー"]
    LB --> S1["Server 1"]
    LB --> S2["Server 2"]
    LB --> S3["Server 3"]

クライアントはロードバランサーのIPアドレスにアクセスし、ロードバランサーが適切なサーバーにリクエストを振り分けます。

L4とL7ロードバランシング

L4(トランスポート層)ロードバランシング

TCP/UDPレベルで負荷分散を行います。

  • 動作: IPアドレスとポート番号で振り分け
  • メリット: 高速、低オーバーヘッド
  • デメリット: HTTPコンテンツを見られない

L7(アプリケーション層)ロードバランシング

HTTPレベルで負荷分散を行います。

  • 動作: URL、ヘッダー、Cookieなどで振り分け
  • メリット: 柔軟なルーティング
  • デメリット: 処理負荷が高い
L7ロードバランシングの例:
/api/*      → APIサーバー群
/static/*   → 静的ファイルサーバー
/admin/*    → 管理画面サーバー

主要な負荷分散アルゴリズム

ラウンドロビン(Round Robin)

順番に各サーバーへリクエストを振り分けます。

リクエスト1 → Server A
リクエスト2 → Server B
リクエスト3 → Server C
リクエスト4 → Server A(繰り返し)

適している場合: サーバー性能が均一な場合

重み付きラウンドロビン(Weighted Round Robin)

サーバーの性能に応じて振り分け比率を調整します。

Server A (weight: 3) → 3リクエスト
Server B (weight: 2) → 2リクエスト
Server C (weight: 1) → 1リクエスト

最小接続数(Least Connections)

現在の接続数が最も少ないサーバーに振り分けます。

Server A: 10接続中
Server B: 5接続中  ← 次のリクエストはここへ
Server C: 8接続中

適している場合: 処理時間にばらつきがある場合

IPハッシュ(IP Hash)

クライアントIPアドレスのハッシュ値でサーバーを決定します。

hash(192.168.1.100) % 3 = 1 → Server B
hash(192.168.1.101) % 3 = 0 → Server A

適している場合: セッションの維持が必要な場合

ヘルスチェック

ロードバランサーは定期的にサーバーの状態を確認し、障害サーバーを自動的に除外します。

アクティブヘルスチェック

ロードバランサー → GET /health → 各サーバー
                      ↓
              200 OK → 正常(振り分け対象)
              5xx/タイムアウト → 異常(除外)

パッシブヘルスチェック

実際のリクエストの成功/失敗を監視します。

連続5回失敗 → サーバーを除外
30秒後 → 再度振り分け試行

セッション維持(スティッキーセッション)

同じユーザーのリクエストを同じサーバーに送り続ける仕組みです。

実現方法

方式説明
CookieサーバーIDをCookieに保存
IPアドレスクライアントIPで固定
URLパラメータセッションIDをURLに含める

注意点

スティッキーセッションは負荷の偏りを生む可能性があります。可能であれば、セッション情報を外部ストア(Redis等)で管理し、ステートレスな設計を目指しましょう。

代表的なロードバランサー

ソフトウェア

名前特徴
Nginx高性能、リバースプロキシ機能
HAProxy高可用性、豊富な機能
Envoyクラウドネイティブ、サービスメッシュ対応

クラウドサービス

サービスプロバイダー
ALB/NLBAWS
Cloud Load BalancingGoogle Cloud
Azure Load BalancerMicrosoft Azure

高可用性構成

ロードバランサー自体の冗長化も重要です。

flowchart TB
    VIP["仮想IP<br/>(VIP/Floating IP)"]
    VIP --> Active["LB (Active)"]
    Standby["LB (Standby)"] -->|監視| Active
    Active --> Servers["サーバー群"]

Active-Standby構成で、アクティブなロードバランサーに障害が発生すると、スタンバイが自動的に引き継ぎます。

まとめ

ロードバランシングは、現代のWebサービスにおいて不可欠な技術です。適切なアルゴリズムの選択、ヘルスチェックの設定、高可用性構成により、安定したサービス運用を実現できます。

← 一覧に戻る