ロードバランサーの振り分け方式には複数の種類があります。
「ラウンドロビン・最小接続・IPハッシュって何が違うの?」「どの方式を選べばいいの?」と疑問に感じる方も多いでしょう。
本記事では、ロードバランサーの主な振り分けアルゴリズムの種類・仕組み・使い分けのポイントをわかりやすく解説していきます。
システムの安定性・性能最適化に役立てたい方はぜひ最後までご覧ください。
ロードバランサーの振り分け方式一覧
それではまず、ロードバランサーの主な振り分け方式(アルゴリズム)の一覧を解説していきます。
ロードバランサーの振り分け方式は、「どの基準でどのサーバーにリクエストを送るか」を決めるアルゴリズムです。
| 方式名 | 判断基準 | 主な特徴 |
|---|---|---|
| ラウンドロビン | 順番に均等に | シンプル・均一分散 |
| 重み付きラウンドロビン | 重みに応じた比率で | サーバー性能差に対応 |
| 最小接続数(Least Connections) | 接続数が最も少ないサーバー | 動的な負荷分散 |
| IPハッシュ | クライアントIPのハッシュ値 | 同一IPは同じサーバーへ |
| URL/コンテンツベース | URLやリクエスト内容 | L7の高度な振り分け |
| レスポンスタイム最小 | 応答速度が最も速いサーバー | 高性能要件に適する |
それぞれの方式の仕組みと特徴を詳しく見ていきましょう。
ラウンドロビン(Round Robin)
ラウンドロビンは最もシンプルな方式で、リクエストをサーバーに順番に振り分けます。
【ラウンドロビンの動作例】
リクエスト1 → サーバーA
リクエスト2 → サーバーB
リクエスト3 → サーバーC
リクエスト4 → サーバーA(繰り返し)
実装が単純で各サーバーにほぼ均等にリクエストが分散されます。
ただし、各リクエストの処理時間が異なる場合、特定のサーバーに重い処理が偏る可能性があります。
リクエストの処理時間が均一なシステムではラウンドロビンが最もシンプルで効果的です。
重み付きラウンドロビン(Weighted Round Robin)
各サーバーに「重み(weight)」を設定し、重みの比率に応じてリクエストを振り分ける方式です。
【重み付きラウンドロビンの例】
サーバーA:weight=3(高性能)
サーバーB:weight=2
サーバーC:weight=1(低性能)
→ サーバーAが3/6、Bが2/6、Cが1/6の割合でリクエストを受ける
サーバーのスペックに差がある場合や、特定のサーバーを優先して使いたい場合に有効です。
性能の異なるサーバーが混在する環境では重み付きラウンドロビンが最適でしょう。
最小接続数(Least Connections)
現在の接続数(アクティブなセッション数)が最も少ないサーバーにリクエストを振り分ける方式です。
各サーバーの現在の負荷状態を考慮して動的に振り分けるため、処理時間が不均一なリクエストが混在するシステムに適しています。
データベースへの照会時間が長いリクエストと短いリクエストが混在する場合などに特に効果的です。
長時間接続を保持するWebソケット通信・セッションベースのアプリケーションに向いています。
IPハッシュ(IP Hash)
クライアントのIPアドレスをハッシュ計算し、その値に基づいて振り分けサーバーを決定する方式です。
同じIPアドレスのクライアントは常に同じサーバーに振り分けられるため、セッション情報をサーバー側で保持するシステムに適しています(スティッキーセッション)。
ただし、特定のIPからのアクセスが集中すると負荷が偏るという問題があります。
Webアプリケーションのログイン状態・ショッピングカートなどのセッション管理でよく使われます。
コンテンツベース・URL ベースの振り分け
続いては、L7ロードバランサーで使えるより高度な振り分け方式を確認していきます。
URLパスベースの振り分け
L7ロードバランサーでは、リクエストのURLパスに基づいて異なるサーバーグループへ振り分けることができます。
【URLパスベース振り分けの例】
/api/* → APIサーバーグループへ
/images/* → 画像サーバーグループへ
/admin/* → 管理サーバーへ(特定IPのみ許可)
/* → フロントエンドサーバーグループへ
マイクロサービスアーキテクチャでは、URLパスベースの振り分けでサービスごとに独立したサーバーグループに転送するパターンが非常に一般的です。
ホストヘッダーベースの振り分け
HTTPリクエストのHostヘッダー(ドメイン名)に基づいて振り分ける方式です。
同一のロードバランサーで複数ドメインを処理する「バーチャルホスト」構成が実現できます。
例えば「api.example.com」と「www.example.com」を同一のロードバランサーで別サーバーグループに振り分けるケースです。
HTTPヘッダー・クッキーベースの振り分け
HTTPヘッダーやクッキーの値に基づいて振り分けを行う高度な方式です。
A/Bテスト・カナリアリリース(一部のユーザーにだけ新バージョンを提供)などに使われます。
AWS ALBのターゲットグループのウェイト設定を使えば、カナリアリリースを簡単に実装できます。
振り分け方式の設定と選び方
続いては、実際の振り分け方式の設定と選び方のポイントを確認していきます。
nginx でのロードバランシング設定
【nginxでのラウンドロビン・最小接続・IPハッシュの設定例】
# ラウンドロビン(デフォルト)
upstream backend { server app1; server app2; }
# 最小接続数
upstream backend { least_conn; server app1; server app2; }
# IPハッシュ
upstream backend { ip_hash; server app1; server app2; }
nginxの upstream ブロックにキーワードを追加するだけで振り分け方式を切り替えられます。
システム特性に合わせた方式の選び方
振り分け方式の選び方のポイントをまとめます。
リクエストの処理時間が均一な場合 → ラウンドロビン(最もシンプル)。
サーバーのスペックに差がある場合 → 重み付きラウンドロビン。
処理時間が不均一・長時間接続がある場合 → 最小接続数。
セッション管理が必要な場合 → IPハッシュまたはスティッキーセッション。
マイクロサービス・コンテンツ別振り分けが必要な場合 → コンテンツベース(L7)。
システムの特性とトレードオフを理解して最適な振り分け方式を選択することが重要です。
まとめ
本記事では、ロードバランサーの振り分け方式(ラウンドロビン・重み付き・最小接続・IPハッシュ・コンテンツベース)の仕組み・特徴・使い分けまで詳しく解説しました。
各アルゴリズムにはそれぞれ適した用途があり、システムの特性(リクエストの均一性・セッション管理・サーバースペックの差)に合わせた選択が重要です。
振り分けアルゴリズムを理解して適切に設定することが、システムの安定性と性能を最大化するための重要なポイントです。
ぜひ本記事を参考に、自分のシステムに最適な振り分け方式を検討してみてください。