結論: L4ロードバランサーは、IPアドレスとポート番号など、通信の基本情報を見て、サーバーに振り分けます。L7ロードバランサーは、URL・ホスト名・ヘッダー・Cookieなど、HTTPの中身まで見て振り分けます。選ぶ基準は、「何を見て、振り分けたいか」です。URLごとに振り分けたい・同じ利用者を同じサーバーに固定したいならL7、HTTP以外の通信を、速く、単純に振り分けたいならL4が向きます。
まず、ロードバランサーとは
ロードバランサーは、届いたアクセスを、複数のサーバーに振り分けて、負荷を分散する仕組みです。基本は、ロードバランサーとは?で解説しています。ここでは、振り分けの**「見る範囲」**による、2つの種類の違いを整理します。
「L4」「L7」の「L」は、レイヤー(層)
ネットワークの通信は、役割ごとに、**7つの層(レイヤー)**に分けて考えます(OSI参照モデル)。そのうち、ロードバランサーの話で出てくるのは、次の2つです。
| 名称 | 層 | 見る情報 |
|---|---|---|
| L4 | 第4層(トランスポート層) | 送信元・送信先のIPアドレスと、ポート番号、通信の種類(TCP・UDP) |
| L7 | 第7層(アプリケーション層) | HTTPの中身(URL・ホスト名・ヘッダー・Cookieなど) |
ポート番号の意味は、ポート番号とはで解説しています。
郵便にたとえると、L4は、封筒に書かれた住所(宛先)だけを見て、配達先を決めるイメージです。L7は、封筒を開けて、中の手紙の内容を読んでから、担当の部署に回すイメージです。
L4とL7の違い
| 項目 | L4 | L7 |
|---|---|---|
| 見るもの | IPアドレス・ポート番号 | URL・ホスト名・ヘッダー・Cookieなど |
| 振り分けの細かさ | シンプル | 細かい制御ができる |
| 処理の速さ | 速い傾向 | 中身を読むぶん、重くなりやすい |
| 扱える通信 | HTTP以外も扱える(TCP・UDPなど) | 主にHTTP/HTTPSなど、対応する通信 |
| 設定の多さ | 少なめ | 多め(ルール・証明書など) |
| 向いている場面 | 単純な振り分け、高い処理性能が必要、HTTP以外の通信 | URLごとの振り分け、Cookieでの固定、通信の中身を使った制御 |
L7でできること
L7は、通信の中身を読むため、次のような制御ができます。
- URLのパスで、振り分ける:たとえば、
/api/は、APIのサーバーへ、/images/は、画像用のサーバーへ - ホスト名で、振り分ける:同じ入口で、複数のサイトを、別々のサーバーに振り分ける
- Cookieで、同じ利用者を、同じサーバーに固定する(セッション維持。いわゆる「スティッキーセッション」)
- ヘッダーを、追加・書き換える:たとえば、元の利用者のIPアドレスを、サーバー側に伝える
- HTTPSの暗号を、ここで解く(TLS終端):証明書の管理を、ロードバランサーに集められる
- 特定のURLだけ、別の扱いにする:メンテナンス画面の表示、リダイレクトなど
URLの「/(スラッシュ)」から始まる部分や、ヘッダーという用語に、なじみがなければ、HTTPステータスコードとはも参考になります。
L4が向く場面
L4は、通信の中身を読まないため、速く、単純です。
- HTTP以外の通信を扱う(メール、データベース、独自のプロトコル、ゲームの通信など)
- 処理性能を、最優先したい
- 振り分けは、宛先のポートだけで足りる
- 暗号化された通信を、そのまま、サーバーまで通したい(TLSパススルー)
HTTPSの暗号を、ロードバランサーで解かずに、サーバー側で解く構成にしたい時は、L4が向きます。
TLS(HTTPSの暗号)の扱いが、構成を左右する
L7で、URLやCookieを読むには、暗号を解いて、中身を見る必要があります。そのため、L7では、次のような構成になります。
| 構成 | 内容 | 注意点 |
|---|---|---|
| TLS終端 | ロードバランサーで、暗号を解く | 証明書を、ロードバランサーに置く。以降の通信は、構成によって、平文になる場合がある |
| 再暗号化 | 解いたあと、サーバーへ向けて、もう一度暗号化する | 設定・証明書の管理が増える |
| パススルー(L4) | 暗号を解かず、サーバーまで、そのまま通す | URLやCookieは、読めない |
暗号を解くかどうかは、セキュリティと、運用の負担に関わります。 証明書の仕組みは、SSL/TLSとは?で解説しています。