システムの可用性とパフォーマンスを確保するうえで欠かせないロードバランシングには、実はさまざまな種類と方式があります。
DNS負荷分散・L4ロードバランシング・L7ロードバランシングといったレイヤ別の分類から、最少接続・IPハッシュ・ラウンドロビンなどのアルゴリズムまで、目的と環境に応じた選択が重要です。
本記事では、ロードバランシングの種類と各方式の特徴・アルゴリズムの違い・ヘルスチェックの仕組みについて詳しく解説します。
インフラ設計やクラウドアーキテクチャに関わる方はぜひ参考にしてみてください。
ロードバランシングの種類はレイヤと方式で分類される(結論)
それではまず、ロードバランシングの種類とその分類方法について解説していきます。
ロードバランシングの種類はOSIモデルのどのレイヤで動作するか、またどのような仕組みで負荷分散するかによって分類できます。
| 分類軸 | 種類 | 概要 |
|---|---|---|
| レイヤ別 | L4(トランスポート層) | IPアドレス・ポートで振り分け |
| レイヤ別 | L7(アプリケーション層) | HTTP内容・URLで振り分け |
| レイヤ別 | L3(ネットワーク層) | IPアドレスのみで振り分け |
| 方式別 | DNS負荷分散 | DNSで複数IPを返して分散 |
| 方式別 | ハードウェア型 | 専用アプライアンス機器 |
| 方式別 | ソフトウェア型 | 汎用サーバー上のソフト |
| 方式別 | クラウド型 | マネージドサービス |
ロードバランシングの種類を正しく選ぶことは、システムのコスト・パフォーマンス・運用負担に直結します。単純な負荷分散ならL4で十分ですが、URLベースのルーティングやSSL終端が必要ならL7が必要です。要件を整理してから選択することが重要です。
L4ロードバランシングの詳細
L4ロードバランシングはOSIモデルのトランスポート層(第4層)で動作します。
TCP/UDPのIPアドレスとポート番号だけを見てリクエストを転送するため、パケットの中身(HTTPの内容など)を解析しません。
そのため処理速度が非常に速く、スループットが高いという特徴があります。
TCPコネクションを維持したまま転送するため、クライアントとサーバー間の直接接続に近いパフォーマンスが得られます。
代表的な製品・サービスとしてはNGINX(streamモジュール)・HAProxy・AWS NLB(Network Load Balancer)などがあります。
L7ロードバランシングの詳細
L7ロードバランシングはアプリケーション層(第7層)で動作し、HTTPリクエストの内容(URL・ヘッダー・クッキー・ボディなど)を解析して振り分け先を決定します。
L4より処理コストはかかりますが、非常に細かい制御が可能です。
L7ロードバランシングでできること
・URLパスによる振り分け(/api/* → APIサーバー)
・ホスト名による振り分け(api.example.com → APIクラスタ)
・HTTPヘッダーによる振り分け
・クッキーベースのスティッキーセッション
・SSL/TLS終端(ロードバランサーでHTTPS処理)
・HTTPリクエストの書き換え・リダイレクト
・WAF(Webアプリケーションファイアウォール)との統合
代表的な製品・サービスとしてはNGINX・HAProxy・AWS ALB(Application Load Balancer)・GCP HTTP(S) Load Balancingなどがあります。
DNS負荷分散の仕組みと特徴
続いては、DNS負荷分散の仕組みと特徴について確認していきます。
DNS負荷分散はロードバランサーを使わずに負荷分散を実現する手法として、シンプルで低コストな選択肢です。
DNSラウンドロビンの仕組み
DNSラウンドロビンは1つのドメイン名に対して複数のIPアドレスを登録し、DNSクエリのたびに異なるIPアドレスを返すことで負荷分散します。
example.com → 192.168.1.1(サーバーA)
example.com → 192.168.1.2(サーバーB)
example.com → 192.168.1.3(サーバーC)
DNSクエリのたびに順番を変えて返す
→ クライアントは毎回異なるサーバーに接続
実装が非常に簡単でコストが低い反面、サーバー障害を自動検知できないという大きな欠点があります。
DNS負荷分散の限界
DNSラウンドロビンにはいくつかの重要な限界があります。
まず、ヘルスチェックができないため障害サーバーにもリクエストが転送されます。
次に、DNSキャッシュのためTTLが切れるまでクライアントが古いIPを使い続けます。
またセッション維持ができず、同一クライアントが毎回異なるサーバーに接続される可能性があります。
DNS負荷分散はシンプルなグローバル負荷分散の第1段階としては有効ですが、高可用性が必要なシステムでは通常のロードバランサーと組み合わせて使います。
GeoDNSによる地理的負荷分散
GeoDNSはクライアントの地理的位置(IPアドレスから判定)に基づいて、最も近いデータセンターのIPアドレスを返すDNSサービスです。
世界中のユーザーに対してレイテンシを最小化できるため、グローバルサービスに非常に有効です。
AWS Route 53のGeolocationルーティング・Cloudflare Load Balancingなどがこれを実現するマネージドサービスです。
ロードバランシングのアルゴリズム詳細
続いては、ロードバランシングの各アルゴリズムの詳細と使い分けについて確認していきます。
最少接続(Least Connections)の詳細
最少接続アルゴリズムは現在アクティブな接続数が最も少ないサーバーにリクエストを転送します。
各サーバーの実際の処理負荷をリアルタイムに反映できるため、処理時間がリクエストごとに大きく異なる環境に適しています。
変形版として「最少応答時間(Least Response Time)」があり、応答時間と接続数の両方を考慮してより精度の高い振り分けを行います。
IPハッシュの詳細と活用場面
IPハッシュはクライアントのIPアドレスのハッシュ値を計算し、その値に基づいて常に同じサーバーに振り分けます。
セッションアフィニティ(セッション維持)が自然に実現されるため、ステートフルなアプリケーションに有用です。
ただし、サーバーの追加・削除時に多くのクライアントの振り分け先が変わるという問題があります。
この問題を改善した手法が「コンシステントハッシング(Consistent Hashing)」です。
コンシステントハッシングはサーバーの追加・削除時に影響を受けるクライアントを最小限に抑えられるため、分散キャッシュシステムやCDNで広く使われています。
ランダム選択とリソースベース
ランダム選択はサーバーをランダムに選ぶシンプルなアルゴリズムで、大数の法則により長期的には均等分散に近づきます。
リソースベース(Resource Based)アルゴリズムは各サーバーのCPU使用率・メモリ使用量などの実リソース情報をエージェントから収集し、最も余裕のあるサーバーに振り分けます。
最も実態に即した分散が可能ですが、エージェントの導入と管理コストがかかります。
ヘルスチェックの種類と設定
続いては、ロードバランシングにおけるヘルスチェックの種類と適切な設定について確認していきます。
ヘルスチェックの種類
ヘルスチェックはロードバランサーが各バックエンドサーバーの死活を確認する仕組みです。
| ヘルスチェック種類 | 方法 | 確認できること |
|---|---|---|
| TCPヘルスチェック | 指定ポートへのTCP接続 | プロセスの起動確認 |
| HTTPヘルスチェック | HTTP GETリクエスト | アプリケーションの動作確認 |
| HTTPSヘルスチェック | HTTPS GETリクエスト | SSL含むアプリの動作確認 |
| カスタムヘルスチェック | 専用エンドポイント(/health) | DB接続・依存サービスの状態確認 |
ヘルスチェックの設定パラメータ
ヘルスチェックの主な設定パラメータを理解することで、障害検知の速さと誤検知のバランスを調整できます。
主なヘルスチェックパラメータ
・チェック間隔(interval):ヘルスチェックの実行頻度(例:10秒ごと)
・タイムアウト(timeout):応答を待つ最大時間(例:5秒)
・正常しきい値(healthy threshold):何回連続成功で正常判定(例:2回)
・異常しきい値(unhealthy threshold):何回連続失敗で異常判定(例:3回)
チェック間隔を短くすると障害検知が速くなりますが、サーバーへの負荷も増えます。
本番環境では適切なバランスに設定することが重要です。
パッシブヘルスチェック
アクティブにリクエストを送って確認するヘルスチェックに対して、実際のリクエスト・レスポンスを監視して障害を検知する「パッシブヘルスチェック」もあります。
NGINXのpassive health checksはバックエンドへのリクエストが一定回数失敗したり、レスポンスが遅かったりした場合に自動的にそのサーバーを一時的に除外します。
まとめ
ロードバランシングの種類はL4・L7・DNS負荷分散などのレイヤ・方式による分類と、ラウンドロビン・重み付き・最少接続・IPハッシュなどのアルゴリズムによる分類があります。
L4は高速・シンプルで、L7はURLやヘッダーを使った細かい制御が可能です。
DNS負荷分散はシンプルで低コストですが、ヘルスチェックができないため高可用性システムでは補完的な役割に留まります。
ヘルスチェックはロードバランシングの可用性を支える重要な機能で、TCPからカスタムエンドポイントまで様々な種類があります。
システムの要件に応じて適切な種類・アルゴリズム・ヘルスチェック設定を選択し、信頼性の高い負荷分散構成を実現してみてください。