中級ではTTLとキャッシュ制御を見ました。上級では、キー設計・階層・エッジの内部へ。
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
エッジの内部と階層
- キャッシュキー正規化 — URL・選ばれたクエリ・Vary(言語や圧縮)で「同じ内容は同じキー」に
- 階層キャッシュ — エッジ → シールド層 → オリジン。オリジンへの問い合わせを束ねる
- collapse forwarding — 同一キーの同時ミスを1本化してオリジンを守る
やさしく言うと(中級)
CDNは、地理的に分散したエッジ拠点(PoP) のキャッシュ網です。要点は「何をキーに、いつまで、どう更新するか」。
- キャッシュキー — URLなどを鍵に、コピーを出し入れする
- TTL(有効期限) — その期間はエッジのコピーを新鮮とみなす
- オリジン — 大元。miss時やTTL切れ時に取りに行く先
アニメーション『CDNのエッジ配信』を開く
登場人物メモ:
- ※1 cache hit/miss — エッジにある(hit)/無くてオリジンへ(miss)
- ※2 パージ — エッジのコピーを強制的に無効化する操作
配信の流れ(詳細)
- エッジでキャッシュキーを計算し照合
- hit(TTL内)なら即返す。stale-while-revalidate/stale-if-errorで古くても返しつつ更新
- miss/期限切れは条件付きリクエスト(ETag・If-None-Match)でオリジンに確認
- 変わっていなければ304、変わっていれば新版を取得しTTL付きで保存
やさしく言うと(中級)
- リクエストのキャッシュキーで、エッジにコピーがあるか確認
- hit かつ TTL 内 ならそのまま返す
- miss/TTL切れ ならオリジンへ。条件付きリクエストで「変わってなければそのまま」を確認することも
- 取得したものをTTL付きでエッジに保存し、次に備える
アニメーション『エッジ配信の地理(近い=速い)』を開く
高度な機能
- エッジコンピュート — エッジで軽い処理(A/B・認証・リライト)を実行し、往復を減らす
- TLS終端をエッジで — 近い場所で暗号処理、オリジンまで再暗号化も
- Anycast — 同一IPを各地で広告し、最寄りへ誘導
- ログ集約と分析 — 多数のエッジのログを集めて可視化
やさしく言うと(中級)
- Cache-Control ヘッダ — キャッシュ可否や期間をオリジンが指示する(max-age など)。private は共有キャッシュ禁止(個人向け応答に付ける)、public は共有可、s-maxage は共有キャッシュ用のTTLを別に指定する
- ETag/If-None-Match — TTL切れ時、内容の識別子(ETag)を If-None-Match で送って問い合わせ、変わっていなければ 304(Not Modified)で本体を取り直さず、エッジのコピーを使い続ける
- バージョニング — 内容が変わったらファイル名(URL)を変える。古い版と衝突しない定石
- パージ/即時無効化 — 緊急時にエッジのコピーを消す
- 静的と動的 — 変わらないものは長めのTTL、動的なものは短いか非キャッシュ。近年はエッジで軽い処理をする方式もある
⚠️ 落とし穴
- hit率低下 — キーの細分化、キャッシュ不可ヘッダの付けすぎ
- 個人情報の誤キャッシュ — Vary設計ミスで個人向けが共有される(別途、攻撃としてのキャッシュ汚染/ポイズニングも存在)
- パージ遅延 — 全エッジへの無効化が伝わるまでの時間差
- オリジン過負荷 — シールド/collapseが無いと、ミス時に殺到
やさしく言うと(中級)
- stale(古いまま) — TTLが長すぎ/パージ漏れで、更新が届かない
- hit率が低い — キャッシュキーが細かすぎる(クエリ違いで別扱い)などで、ほとんどmiss
- 個人情報の誤キャッシュ — 個人向けの応答を誤って共有キャッシュに載せてしまう(他人に見える事故。攻撃の「キャッシュ汚染/ポイズニング」とは別物)。防ぐ鍵は Cache-Control: private を付け、共有キャッシュに載せないこと
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. キャッシュキーを不用意に細かくするとどうなる?
問2. 多数のエッジが同時にミスしてオリジンへ殺到するのを、上位の共有層で束ねて防ぐ構成は?
問3. オリジンがエラーを返したとき、期限切れのコピーでも返して可用性を保つ指示に最も近いのは?
問4. 「エッジで軽い処理(A/B・認証・リライトなど)を実行し、オリジンまでの往復を減らす」ものは?
問5. 同一キーの同時ミスを1本化してオリジンを守る仕組みを、英語(2語)で答えてください。
問6. 言語や圧縮方式ごとにキャッシュを分け、個人向け応答の取り違えも防ぐために使うHTTPヘッダを英字で答えてください。
問7. CDNで「同一IPを各地で広告し、利用者を最寄りのエッジへ誘導する」仕組みは?
問8. TTL切れ時、エッジがETagをIf-None-Matchで送り「変わっていない」と確認できたとき、オリジンが返すステータスコードは?