ブラウザにURLを入力してからページが表示されるまで、裏側ではいくつかのコンポーネントが連携して動いている。ざっくりとした全体像を図で整理する。
全体の流れ

各ステップの解説
① DNS解決
ブラウザはまず「このドメイン名に対応するIPアドレスは何か」をDNSサーバーに問い合わせる。DNSサーバーが名前解決を行い、IPアドレスをブラウザに返す。
重要なのは、このIPアドレスはロードバランサーのIPであるという点だ。ユーザーのブラウザはどのサーバーに振り分けられるかを知らず、LBのIPに接続するだけで、LBが裏側でサーバーを選んでくれる。
② ロードバランサーへのHTTPリクエスト
DNS解決で得たIPアドレスに向けてHTTPリクエストを送る。受け取るのはロードバランサーだ。
③ サーバーへの振り分け
ロードバランサーは受け取ったリクエストを複数あるサーバーのどれかに振り分ける。どのサーバーに割り振るかはラウンドロビンや負荷状況などに応じた手法で決まる。
④ データベースアクセス
リクエストを受け取ったサーバーは必要に応じてデータベースにSQLクエリを送り、結果セットを受け取る。その結果をもとにレスポンスを生成する。図のグレーの破線は「どのサーバーもDBに接続できる」ことを示している。
⑤ レスポンスの返却
生成したレスポンスはロードバランサーを経由してユーザーに返る。HTTPレスポンスは来た経路を逆に辿る形になる。
インバウンド / アウトバウンドとは
図の凡例にある「Inbound(リクエスト)」「Outbound(レスポンス)」は、自分たちのインフラから見た通信の方向を指す。
- Inbound:外部からインフラへの通信(ユーザー → ロードバランサーなど)
- Outbound:インフラから外部への通信(ロードバランサー → ユーザーなど)
AWSではセキュリティグループの「インバウンドルール」「アウトバウンドルール」として、この方向ごとにポートやIPの許可を設定する。インフラを触るときにすぐ出てくる概念なので、早めに頭に入れておくと役立つ。
実際の現場ではもう少し登場人物が多い
この図はざっくりとした概念図だ。実際のプロダクションでは以下のようなコンポーネントが加わることが多い。
| コンポーネント | 役割 | 例 |
|---|---|---|
| CDN | 静的コンテンツのキャッシュ・配信 | CloudFront, Cloudflare |
| WAF | 悪意あるリクエストのブロック | AWS WAF |
| キャッシュ層 | DB負荷軽減 | Redis, Memcached |
| 複数AZ | 可用性向上のための地理分散 | AWS Availability Zones |
一言でまとめると
URL → DNS解決 → ロードバランサー → サーバー → DB → レスポンスの往復が、Webの基本的な通信経路だ。
ざっくりとした流れとしてはこの図の通りで、各コンポーネントの役割とInbound/Outboundの方向を押さえておくと、クラウドのセキュリティ設定やネットワーク設計の話が格段に理解しやすくなる。
参考文献・リンク
https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Overview
https://developer.mozilla.org/en-US/docs/Glossary/DNS
https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html