L4/L7 Load Balancerについて

ロードバランサーには、L7 (Layer 7) と L4 (Layer 4) の2種類があり、それぞれ異なる役割を果たしています。この記事では、その違いを明確にし、各ロードバランサーがどのような場面で役立つかを解説します。

# 1. TL;DR
1. L7ロードバランサー
    1. URLやHTTPヘッダーの内容に基づいてトラフィックを分散する。単一ドメイン内での細かなルーティングやアクセス制御に最適。
1. L4ロードバランサー
    1. IPアドレスやポートレベルでトラフィックを分散する。高スループットで効率的な負荷分散に適しているが、アプリケーション層の詳細な制御はできない。

# 2. L7 Load Balancer (Layer 7 ロードバランサー)

L7ロードバランサーは、OSI参照モデルの第7層（アプリケーション層）で動作し、HTTPやHTTPSのようなプロトコルに基づいてトラフィックをルーティングします。たとえば、以下のような場合にL7ロードバランサーが使われます。
1. URLに基づくルーティング: 例えば、`<domain>/us/*` を米国のサーバーに、`<domain>/jp/*` を日本のサーバーにルーティングしたい場合に、L7ロードバランサーを使うことが可能です。この方法を使えば、単一のドメインで地域ごとに異なるサーバーを利用できます。
1. ヘッダーやCookieに基づくルーティング: 例えば、特定のクッキー値やヘッダー情報に基づいて、異なるバックエンドにトラフィックを送ることができます。これにより、特定のユーザーセグメントやABテストのグループ分けを実現できます。

## 2.1. KubernetesにおけるL7ロードバランサー

[KubernetesのIngress](https://kubernetes.io/docs/concepts/services-networking/ingress/)は、L7ロードバランサーの一例です。外部からのリクエストを受け、クラスター内部の特定のサービスやPodにリクエストを転送します。HTTPリクエストのパスやホストに基づいてトラフィックを振り分けるので、アプリケーションの細かい管理が可能です。

## 2.2. まとめ

L7ロードバランサーは、アプリケーション層での詳細なトラフィック管理が必要な場合に非常に有効です。単一のドメインで多様なリソースを提供したり、URLのパスやHTTPヘッダーでトラフィックを細かく制御したい場合には、L7ロードバランサーが必要です。

# 3. L4 Load Balancer (Layer 4 ロードバランサー)

L4ロードバランサーは、OSI参照モデルの第4層（トランスポート層）で動作し、IPアドレスとポート番号に基づいてトラフィックを分散します。主に以下のような特徴があります。
1. シンプルかつ高パフォーマンス: L4ロードバランサーは、IPパケットレベルでの負荷分散を行うため、非常に高速でシンプルな処理が可能です。アプリケーション層の詳細には関与しないため、L7ロードバランサーよりも高スループットを提供します。
1. ポート単位での負荷分散: 異なるポートやサーバーへの分散処理を簡単に行えます。例えば、複数のWebサーバーに対して負荷分散する場合、L4ロードバランサーは特定のIPとポートにトラフィックを振り分けます。

## 3.1. KubernetesにおけるL4ロードバランサー

[KubernetesのService](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)（cluster ipなど）は、L4ロードバランサーの一例です。外部トラフィックを内部のPodに負荷分散しますが、アプリケーション層の詳細なルーティングは行いません。

## 3.2. まとめ
L4ロードバランサーは、アプリケーション層の情報を考慮せず、シンプルにトラフィックを分散したい場合に最適です。特に高いスループットや効率的な負荷分散が求められる場合に有効です。

# 4. 結論
L4ロードバランサーとL7ロードバランサーは、それぞれ異なる目的で使われる技術です。どちらが必要かは、負荷分散の目的やアプリケーションの構造に依存します。L7ロードバランサーは、細かいトラフィック管理が必要な場合に、L4ロードバランサーはシンプルで高速な負荷分散を行いたい場合に役立ちます。

# 4.1. 補足

他にもL7LBはWAFなどと組み合わせることもあるためセキュリティの側面として役に立つ場面もあります。

# 5. 参考記事一覧

この記事では基本的事項しか触れることができなかったため、詳細な内容については[［24時間365日］サーバ/インフラを支える技術 ……スケーラビリティ、ハイパフォーマンス、省力運用：書籍案内｜技術評論社](https://gihyo.jp/book/2008/978-4-7741-3566-3)や以下の資料を参考にいただけると幸いです。

以下の記事については全て 2024/09/22 にアクセスしました。

1. [What Is the OSI Model? | IBM](https://www.ibm.com/think/topics/osi-model)
1. [AWS Load Balancer Controller を使った Blue/Green デプロイメント、カナリアデプロイメント、A/B テスト | Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/using-aws-load-balancer-controller-for-blue-green-deployment-canary-deployment-and-a-b-testing/)
1. [Chapter 10. Implementing layer 7 load balancing | Red Hat Product Documentation](https://docs.redhat.com/en/documentation/red_hat_openstack_platform/13/html/using_octavia_for_load_balancing-as-a-service/implement-l7-lb_rhosp-lbaas#implement-l7-lb_rhosp-lbaas)
1. [Layer 4 vs. Layer 7 Load Balancing: Learn the Difference - Kemp](https://kemptechnologies.com/blog/layer-4-vs.-layer-7-load-balancing-what%27s-the-difference-and-which-one-do-i-need)
1. [レイヤー4負荷分散とレイヤー７負荷分散の違いとは？｜用語集｜A10ネットワークス　アプリケーション配信｜プロキシ｜SSL可視化｜DDoS対策](https://www.a10networks.co.jp/glossary/how-do-layer-4-and-layer-7-load-balancing-differ.html)
1. [アプリケーション ロードバランサの概要  |  Load Balancing  |  Google Cloud](https://cloud.google.com/load-balancing/docs/application-load-balancer?hl=ja)