個人的な備忘録：AWSの Application Load Balancer (ALB) と Network Load Balancer (NLB) の違いを体系的に整理してみた

## はじめに

AWSには複数のロードバランサーが提供されており、その中でも特にApplication Load Balancer (ALB) と Network Load Balancer (NLB) は広く利用されています。

:::note info
**これらは用途や動作レイヤーが異なり、適切に選択することでシステムのパフォーマンスや可用性を最適化できます。**
:::

今回は、ALB と NLB の主な違いを整理し、それぞれの特徴や使いどころについて考察していきます。

## 書こうと思ったきっかけ

過去にさまざまな技術検証を行い、その中でロードバランサーに関する調査も行いました。

https://qiita.com/free-honda/items/d8fbcd649a711e8f283a

https://qiita.com/free-honda/items/fdc8d57d6d7d41eef40d

https://qiita.com/free-honda/items/d7fba9f7761f582cb1dc

https://qiita.com/free-honda/items/6c377c2fb391743f9163

https://qiita.com/free-honda/items/ab519bba23545063f021

これらの経験を踏まえ、ALBとNLBの違いを一度整理し、備忘録としてまとめておきたいと思いました。

***また、これからAWSを学ぶ人や、適切なロードバランサーの選択に悩んでいる人にとっても有用な情報になればと思います。***

## いろいろな観点でまとめてみた

### 1. 主な用途

**ALB（Application Load Balancer）**
- **HTTP/HTTPS トラフィック向け**
- **アプリケーション層（L7: Layer 7）で動作**
- **パスベースやホストベースのルーティングが可能**
- **Webアプリケーションや API の負荷分散に適している**

**NLB（Network Load Balancer）**
- **TCP/UDP トラフィック向け**
- **ネットワーク層（L4: Layer 4）で動作**
- **高スループット・低レイテンシーに最適化**
- **ゲームサーバーや金融系アプリ、リアルタイム通信向け**

### 2. プロトコルの違い

**ALB**
- **HTTP, HTTPS, WebSocket に対応**
- **HTTP ヘッダーやクエリパラメータを見てルーティング可能**

**NLB**
- **TCP, UDP, TLS に対応**
- **IP アドレスやポート単位での負荷分散**

### 3. ルーティング機能

**ALB**
- **パスベースルーティング**（例: `/login` はサーバA、`/products` はサーバB）
- **ホストベースルーティング**（例: `app.example.com` はグループA、`api.example.com` はグループB）
- **クエリパラメータやヘッダーに基づくルーティング**

**NLB**
- **ルーティングの柔軟性はない**（基本は TCP/UDP ポートごとの単純な振り分け）

### 4. 耐障害性

**ALB**
- **AWS リージョン内の複数の AZ（アベイラビリティゾーン）にトラフィックを分散可能**
- **負荷分散の仕組みは AWS 側が管理**

**NLB**
- **1つの固定 IP アドレスを提供可能（ELB の中で唯一）**
- **ゾーンごとのヘルスチェックが可能で、障害発生時には別のゾーンへ自動でトラフィックを振り分け**

### 5. パフォーマンス

**ALB**
- **HTTP/HTTPS のリクエスト処理が必要なため、遅延が若干発生する**
- **軽量なリクエストに適しているが、大量の小さいリクエストにはやや不向き**

**NLB**
- **AWS の内部ネットワークを直接利用するため、超低レイテンシー**
- **高スループットを必要とするアプリケーションに最適**
- **1秒間に数百万リクエストを処理可能**

### 6. コスト

**ALB**
- **使用時間 + 処理リクエスト数 に応じて課金**
- **小規模な Web アプリなどではコストが比較的安い**

**NLB**
- **使用時間 + 処理データ量（GB 単位） に応じて課金**
- **データ転送量が多い場合、ALB よりコストがかかることも**

### 7. TLS（SSL）ターミネーション

**ALB**
- **HTTPS リクエストの SSL/TLS 終端が可能**
- **証明書を ALB に登録し、内部通信を HTTP にすることができる**

**NLB**
- **TLS パススルー（エンドツーエンド暗号化）が可能**
- **内部サーバーで SSL 処理を行う必要がある**

### 8. 固定 IP

**ALB**
- **固定 IP なし（DNS 名でアクセス）**
- **IP アドレスが変わる可能性があるため、IP ベースの許可リストに登録しづらい**

**NLB**
- **固定 IP を提供**
- **固定 IP を必要とするアプリケーションやファイアウォール設定に適している**

## ALB と NLB の比較表

| 項目               | ALB (Application Load Balancer) | NLB (Network Load Balancer) |
|--------------------|--------------------------------|----------------------------|
| **動作レイヤー**   | L7 (アプリケーション層)        | L4 (ネットワーク層)        |
| **対応プロトコル** | HTTP, HTTPS, WebSocket       | TCP, UDP, TLS             |
| **ルーティング機能** | パス・ホスト・ヘッダーで振り分け | シンプルなポートベース     |
| **パフォーマンス** | 標準                           | 高スループット・低遅延     |
| **耐障害性**      | マルチ AZ 対応                | マルチ AZ + 固定 IP        |
| **TLS 終端**      | 可能                           | パススルーのみ             |
| **固定 IP**       | なし                           | あり                        |
| **コスト**        | リクエスト数課金              | データ転送量課金           |

## まとめ

ご覧いただきありがとうございました。***今回は AWS の基本的なサービスの違いについてまとめましたが、知識を体系的に振り返る良い機会となりました。***

今回の内容がどこまで参考になるか分かりませんが、どなたかの技術の助けになれば幸いです。