コンテンツにスキップ

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が低レイテンシな具体的理由

  1. パケットレベルの転送
  2. NLBはパケットの中身(ペイロード)を見ない。TCPヘッダの情報だけで転送先を決めるため、処理に必要なCPUサイクルが圧倒的に少ない
  3. ALBはHTTPリクエスト全体をバッファリングしてから解析するため、その分のメモリとCPUが余計にかかる

  4. コネクションの透過性

  5. NLBはクライアント→バックエンド間のTCPコネクションをそのまま通す(DSR: Direct Server Returnも可能)
  6. ALBは必ず「クライアント→ALB」と「ALB→バックエンド」の2つのTCPコネクションを確立する(プロキシ型)。この2つ目のコネクション確立にもレイテンシがかかる

  7. 静的IPアドレス

  8. NLBにはElastic IPを割り当て可能。クライアントはDNS解決をスキップして直接IPアドレスでアクセスできる
  9. ALBはDNS名のみで、IPアドレスは動的に変わる。DNS解決の時間が追加される(通常は数ms程度だが、キャッシュが効いていない場合はもっとかかる)

  10. スループット性能

  11. NLBは毎秒数百万リクエストを処理可能で、トラフィックの急増にも即座に対応
  12. ALBも高性能だが、HTTPの解析処理がボトルネックになり得る

数値感覚

  • NLBのレイテンシ: 通常 ~100マイクロ秒 程度の追加レイテンシ
  • ALBのレイテンシ: 通常 数ミリ秒 の追加レイテンシ
  • この差は10〜100倍になり得る

実務での使い分け

ALBを選ぶべきケース: - Webアプリケーション(HTTP/HTTPS)のルーティングが必要 - URLパスベースのルーティング(/api/* → APIサーバー、/static/* → 静的サーバー) - ホストベースのルーティング(api.example.comweb.example.com を分離) - WebSocket接続のサポート - AWS WAF(Web Application Firewall)との連携 - Cognito認証の統合

NLBを選ぶべきケース: - 超低レイテンシが求められるリアルタイムシステム(ゲーム、金融取引) - TCP/UDPプロトコルを直接扱うサービス(データベース、メッセージキュー) - 静的IPアドレスが必要な場合(ファイアウォールのホワイトリスト等) - 極めて高いスループットが必要な場合 - gRPCのパススルー(ALBのgRPCサポートを使わない場合) - AWS PrivateLinkとの連携

面接で差がつくポイント

単に「NLBはL4だから速い」で終わらず、以下を説明できると高評価: - なぜL4が速いのか(パケットヘッダだけ見れば良い)を具体的に説明 - トレードオフを理解している(NLBはHTTPレベルのルーティングができない) - 実際のユースケースを挙げて使い分けを説明できる

リンク