AWS - どのロードバランサーがより低いレイテンシを提供するか¶
原文¶
インタビューの質問。 AWS において、どのロードバランサーがより低いレイテンシを提供し、なぜですか? A - アプリケーションロードバランサー B - ネットワークロードバランサー
要約¶
AWSの面接でよく出る質問。ALB(L7)とNLB(L4)のレイテンシ比較。NLBはL4で動作するためパケット処理が軽く低レイテンシ。ALBはL7でHTTPヘッダ解析等が入るため相対的にレイテンシが高い。
回答¶
B - ネットワークロードバランサー(NLB) がより低いレイテンシを提供する。
解説¶
そもそもロードバランサーとは¶
ロードバランサーは、クライアントからのリクエストを複数のバックエンドサーバーに分散させる仕組み。1台のサーバーに負荷が集中するのを防ぎ、可用性とスケーラビリティを実現する。AWSでは主に3種類のロードバランサーが提供されている。
AWSのロードバランサー3種類¶
| 種類 | 正式名 | OSI層 | 主なプロトコル |
|---|---|---|---|
| ALB | Application Load Balancer | L7(アプリケーション層) | HTTP/HTTPS/gRPC |
| NLB | Network Load Balancer | L4(トランスポート層) | TCP/UDP/TLS |
| CLB | Classic Load Balancer | L4/L7(旧世代) | HTTP/HTTPS/TCP |
OSI参照モデルとレイテンシの関係¶
ここが最も重要な理解ポイント。OSI参照モデルでは、上位レイヤーほど処理が複雑になる。
L7 アプリケーション層 ← ALBはここで動く(HTTPの中身を見る)
L6 プレゼンテーション層
L5 セッション層
L4 トランスポート層 ← NLBはここで動く(TCP/UDPだけを見る)
L3 ネットワーク層
L2 データリンク層
L1 物理層
ALB(L7)がリクエストを受けた時の処理: 1. TCPコネクションを確立する 2. TLSハンドシェイクを行う(HTTPSの場合) 3. HTTPリクエスト全体を読み取る 4. HTTPヘッダを解析する(Host、Path、Cookie等) 5. ルーティングルールに基づいて転送先を決定する 6. バックエンドへ新しいTCPコネクションで転送する
→ 3〜5のステップが追加の処理コストとなり、レイテンシが増える
NLB(L4)がリクエストを受けた時の処理: 1. TCPパケット(またはUDPデータグラム)のヘッダだけを見る 2. 送信元IP・ポートと送信先IP・ポートに基づいて転送先を決定 3. パケットをそのまま(ほぼ無加工で)バックエンドに転送する
→ HTTPの中身を見ないので、処理が格段に軽い
NLBが低レイテンシな具体的理由¶
- パケットレベルの転送
- NLBはパケットの中身(ペイロード)を見ない。TCPヘッダの情報だけで転送先を決めるため、処理に必要なCPUサイクルが圧倒的に少ない
-
ALBはHTTPリクエスト全体をバッファリングしてから解析するため、その分のメモリとCPUが余計にかかる
-
コネクションの透過性
- NLBはクライアント→バックエンド間のTCPコネクションをそのまま通す(DSR: Direct Server Returnも可能)
-
ALBは必ず「クライアント→ALB」と「ALB→バックエンド」の2つのTCPコネクションを確立する(プロキシ型)。この2つ目のコネクション確立にもレイテンシがかかる
-
静的IPアドレス
- NLBにはElastic IPを割り当て可能。クライアントはDNS解決をスキップして直接IPアドレスでアクセスできる
-
ALBはDNS名のみで、IPアドレスは動的に変わる。DNS解決の時間が追加される(通常は数ms程度だが、キャッシュが効いていない場合はもっとかかる)
-
スループット性能
- NLBは毎秒数百万リクエストを処理可能で、トラフィックの急増にも即座に対応
- ALBも高性能だが、HTTPの解析処理がボトルネックになり得る
数値感覚¶
- NLBのレイテンシ: 通常 ~100マイクロ秒 程度の追加レイテンシ
- ALBのレイテンシ: 通常 数ミリ秒 の追加レイテンシ
- この差は10〜100倍になり得る
実務での使い分け¶
ALBを選ぶべきケース:
- Webアプリケーション(HTTP/HTTPS)のルーティングが必要
- URLパスベースのルーティング(/api/* → APIサーバー、/static/* → 静的サーバー)
- ホストベースのルーティング(api.example.com と web.example.com を分離)
- WebSocket接続のサポート
- AWS WAF(Web Application Firewall)との連携
- Cognito認証の統合
NLBを選ぶべきケース: - 超低レイテンシが求められるリアルタイムシステム(ゲーム、金融取引) - TCP/UDPプロトコルを直接扱うサービス(データベース、メッセージキュー) - 静的IPアドレスが必要な場合(ファイアウォールのホワイトリスト等) - 極めて高いスループットが必要な場合 - gRPCのパススルー(ALBのgRPCサポートを使わない場合) - AWS PrivateLinkとの連携
面接で差がつくポイント¶
単に「NLBはL4だから速い」で終わらず、以下を説明できると高評価: - なぜL4が速いのか(パケットヘッダだけ見れば良い)を具体的に説明 - トレードオフを理解している(NLBはHTTPレベルのルーティングができない) - 実際のユースケースを挙げて使い分けを説明できる