モジュール 02ターム1 · 基礎9 ポスター項目
インターネットは実際どう動いているのか
ログインすると、進捗を複数のデバイスで保存できます。ログインするまでは、このブラウザに保存されます。
なぜ重要なのか
本番環境の「謎の」バグの多くはネットワークが原因です。まだ伝播していない DNS の変更、期限切れの TLS 証明書、遠くにいるユーザーにだけ遅いリクエスト。頭の中に描けないものは、デバッグできません。
学習目標
- ブラウザからデータベースまで、1つのリクエストを往復で追跡し、すべてのホップを名指しできる。
- DNS の名前解決、TTL、そして変更が「時間がかかる」理由を説明できる。
- TCP と UDP の違い、HTTP/2 と HTTP/3 で何が変わるかを説明できる。
- TLS を正しく設定し、内部トラフィックも暗号化できる。
- レイテンシを正しく測定できる:平均値ではなくパーセンタイルで。
レッスン
2.1 リクエストの一生
ブラウザ → DNS ルックアップ → TCP(または QUIC)接続 → TLS ハンドシェイク → CDN エッジ → リバースプロキシ/ロードバランサー → アプリサーバー → データベース/キャッシュ/サードパーティ API → 戻り。ホップを1つ経るごとにレイテンシが加わり、障害点も1つ増えます。
2.2 DNS (97)
- レコード:A/AAAA(アドレス)、CNAME(エイリアス)、MX(メール)、TXT(検証、SPF、DKIM、DMARC)、CAA(どの CA が証明書を発行できるか)。
- TTL はキャッシュを制御します。TTL はマイグレーションの最中ではなく、前日に下げておきます。
- よくある障害:ドメインの期限切れ、間違った CNAME、メール関連レコードの欠落(メールが迷惑メールに振り分けられる)、DNS プロバイダーの障害。
2.3 TCP と UDP (98)、HTTP のバージョン (99)
- TCP: 信頼性があり、順序が保証されます。パケットを1つ失うと、その後ろのすべてが止まります(head-of-line blocking)。
- UDP: 保証はなく、オーバーヘッドが小さい。動画、音声、ゲーム、DNS、QUIC で使われます。
- HTTP/1.1: 1つの接続につき、同時に1つのリクエストのみ。
- HTTP/2: 1つの TCP 接続上で多数のストリームを多重化します。ただし TCP の head-of-line blocking は残ります。
- HTTP/3: UDP 上の QUIC で動作します。ストリームが独立し、ハンドシェイクが速く、ネットワークの切り替え(Wi-Fi からモバイルへ)にも耐えます。通常は CDN を使えば追加の手間なく利用できます。
2.4 TLS、通信の暗号化 (71, 73)
- 最低でも TLS 1.2、できれば TLS 1.3 を使います。証明書は自動化します(Let's Encrypt、または利用しているプラットフォームの機能)。
- HSTS ヘッダーを設定し、ブラウザが HTTP にダウングレードしないようにします。
- 内部トラフィックも暗号化します(アプリから DB、サービス間)。「VPC の中だから大丈夫」はセキュリティ対策ではありません。
- データベース接続:SSL を必須にします(
sslmode=requireまたはそれ以上に厳格な設定)。
2.5 レイテンシ、スループット、パーセンタイル (91〜94)
- レイテンシ: 1リクエストにかかる時間。スループット: 1秒あたりのリクエスト数。
- 平均値は報告しないでください。p50、p95、p99 を報告します。100 回に1回の遅いリクエストはまれに聞こえますが、バックエンドを 20 回呼び出すページでは、ページ読み込みのかなりの割合が p99 に当たります。これがテールレイテンシの増幅です。
- すべてのエンジニアが知っておくべき目安:同一リージョン内のネットワーク往復は約 1 ms 以下、シンガポールから米国西部までは往復約 170 ms、LLM の呼び出しには数秒かかります。最も遅いホップを前提に設計してください。
Lab 2:追跡と測定
- 自分のドメインに
digを実行し、すべてのレコードと TTL を記録します。CAA を追加し、メールドメインの SPF/DKIM/DMARC を確認します。 - 2つのリージョンから、アプリに対して
curl -wによるタイミング計測(dns、connect、tls、ttfb、total)を実行します。 - オンラインの TLS 診断ツールで TLS 設定をチェックし、A 評価になるまで修正します。
- k6 で1つのエンドポイントに 10、50、100 の仮想ユーザーで負荷テストを行い、p50/p95/p99 をグラフにします。
完了の定義(Definition of Done)
AI プロンプト集
- 「すべての外部 HTTP 呼び出しについて、DNS、接続、TTFB をログに記録するタイミング計測を追加してください。」
- 「設定ファイルをもとに、このアプリのリクエスト経路をホップごとに説明してください。TLS のないホップがあれば指摘してください。」