ロードバランシングとは
ロードバランシング(負荷分散)は、複数のサーバーにトラフィックを分散させ、システム全体の可用性とパフォーマンスを向上させる技術です。
なぜ必要か: 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/NLB | AWS |
| Cloud Load Balancing | Google Cloud |
| Azure Load Balancer | Microsoft Azure |
高可用性構成
ロードバランサー自体の冗長化も重要です。
flowchart TB
VIP["仮想IP<br/>(VIP/Floating IP)"]
VIP --> Active["LB (Active)"]
Standby["LB (Standby)"] -->|監視| Active
Active --> Servers["サーバー群"]
Active-Standby構成で、アクティブなロードバランサーに障害が発生すると、スタンバイが自動的に引き継ぎます。
まとめ
ロードバランシングは、現代のWebサービスにおいて不可欠な技術です。適切なアルゴリズムの選択、ヘルスチェックの設定、高可用性構成により、安定したサービス運用を実現できます。
← 一覧に戻る