GH GambleHub

エッジキャッシュとPOP

1) POPとは何か、なぜ「エッジ」なのか"

POP (Point of Presence)は、コンテンツ配信ネットワーク(CDN/edge)ノードで、地理的にユーザーに近い。エッジキャッシュ-レスポンスをPOPに直接保存するレイヤーで、以下を削減します:
  • 待ち時間(クライアントよりも少ないRTT)。
  • 原産地当たりの負荷とコスト(オフロード)。
  • 地域/雲の間の交通(出口節約)。

Edgeはキャッシュだけではありません。最新のPOPは、L7ルーティング、WAF/ボットフィルタ、レートリミット、A/B/カナリア、変換、エッジコンピューティング(スクリプト/関数)をサポートしています。

2)エッジキャッシングアーキテクチャ

2.1階層型とフラット型

フラット:すべてのPOPは原点に行きます。シンプルですが、原産地のために高価です。
階層型/シールド:POP→Shield POP(中央キャッシュ)→origin。シールドはキャッシュミスを蓄積し、オリジンの傘を作成します。

2.2地域セグメント

地域/管轄(GDPR/データのローカライズ)ごとにキャッシングドメインを分離します。
バリアント:「EU専用POPs」と「グローバルPOPs」、別々のキー/ルール。

2.3 Anycast+レイテンシ/ジオアウェアルーティング

AnycastはBGP経由でクライアントを最寄りのPOPに持ち込みます。
アクティブなRTT/エラー測定時にPOP/リージョナルプール間のジオスイッチ/レイテンシ対応スイッチ。

3)キャッシュキー、'Vary'、 TTLおよび新鮮さ

3.1キーデザイン

Normalize queries: sort query parameters、 remove noise (utm、 ref)。
セマンティック軸:'tenant'、 'locale'、 'schema version' ('v=3')を含むが、PIIは避ける。
プライベートコンテンツについては、パブリックキャッシュとプライベートキャッシュを分離します(第7条を参照)。

3.2キャッシュ制御(HTTP)

タイトル:
  • 'Cache-Control: public、 max-age=60、 s-maxage=300、 stale-while-revalidate=60、 stale-if-error=120'
  • 'ETag'/'Last-Modified'は条件付きGET (304)である。
  • Vary: cardinality (「Accept-Encoding」、 「Accept-Language」、時には「Authorization」/「Cookie」)を最小化します。
  • 「ニアスピーカー」のためのマイクロキャッシュ:1-5秒+SWR。

3.3古い戦略

SWR (stale-while-revalidate):古い答えを出し、バックグラウンドで更新します。
SIE (stale-if-error):オリジンエラーの場合、'SIE' -TTLの前にキャッシュを使用します。
ソフト/ハードTTL:ソフト用語(古くなることができます)、ハード(フルミス)。

4)障害: 「エッジ」を更新する方法"

4.1キーとタグによる

URL/接頭辞によるPURGE/BAN-大まかですが高速です。
Surrogate-Key/Tags:オブジェクトにタグを割り当てる('article: 42'、 'category: 7')、タグで禁止-URLのブルートフォースなしで大量障害。

4.2イベント障害者

原点でデータを変更する場合、イベント(Kafka/NATS)→エッジ無効呼び出しBAN/PURGE/soft-expireを発行します。

4.3アーティファクトのバージョン管理

静的の場合-ファイル名のcontent-hash。
APIの場合、互換性のない変更のためにキーバージョン('v=4')を変更します。

5)起源の保護および性能

5.1オリジンシールド

Shield POPを1つのミス・ポイントとしてオンにします。

5.2合体/シングルフライト

端で、1つの要求はミスでキャッシュを「打つ」;残りの待機(キャッチアップスタンピードなし)。

5.3 Rate-limit/Queue/Shedding

オーバーロードされている場合は、originではなくPOPに低優先度/匿名のリクエストをドロップします。

5.4署名されたURL/署名されたクッキー

起源は縁の後ろに隠れています。プライベートコンテンツへのアクセス-「みんな」に配布しないように、TTLと属性(IP/Geo/Path)で署名されたリンク/クッキーによって。

6)輸送と変換

6.1 HTTP/2-3キック

HTTP/2:多重化、ヘッダー圧縮。
HTTP/3/QUIC: p95/p99 TTFBの下の失われた→チャネルのより少ないHOLロックおよびよりよい。

6.2圧縮と画像

テキスト用のBrotli、画像用のAVIF/WebP、エッジでの画像サイズ変更(レスポンシブサイズ、DPR)。
フォーマット/サイズによるキャッシュバリアント:キーには'width/format'(または'Vary: Accept '/Client-Hints)が含まれます。

6.3 TLS/0-RTT(きちんとした)

セッションのリプレイはインストールをスピードアップします0-RTT、リプレイの脆弱性がある可能性があります。

7)パブリックキャッシュとプライベートエッジキャッシュ

7.1パブリック

'Cache-Control: public、 s-maxage=……'と最小の'Vary'

カタログ、ニュース、映像、CDNの静的のために適した。

7.2プライベート/パーソナライズ

オプション:
  • 共有レベルでキャッシュしないでください:'Cache-Control: private'(ブラウザキャッシュ)。
  • キーセグメンテーション:キーにテナント/ユーザーID(またはトークンハッシュ)を含め、プライベート共有としてマークします(ストレージとPIIに注意してください)。
  • 署名されたCookieとEdge-auth: cacheは公開されていますが、署名によってアクセスされます(エッジに暗号化されたセッション状態のオプション)。

8)エッジコンピューティング(Worker/Functions)

POP上の簡単な関数:パス/ヘッダーの書き換え、A/B分割、キー正規化、SWRロジック、近隣リソースのプリフェッチ。
POP上のローカルKV/Cache APIをミリ秒単位で実行します。
制限事項:短いタイムアウト/メモリ、長寿命の接続の欠如、PII/地域との慎重な作業。

疑似例(労働者のような)

js export default {
async fetch(req, env) {
const key = normalize(req);
let res = await caches. default. match(key);
if (res) return withHitHeader(res, "HIT");

res = await fetch(req, { cf: { cacheEverything: true }});
const ttl = computeTTL(res);
eventWaitUntil(caches. default. put(key, res. clone(), { expirationTtl: ttl }));
return withHitHeader(res, "MISS");
}
}

9)構成例

9.1 Nginx:マイクロキャッシュ+SWR

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:200m inactive=30m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }

server {
location /api/list {
proxy_cache api;
proxy_cache_key "$scheme://$host$uri$is_args$args";
proxy_cache_valid 200 2s;          # micro-cache proxy_cache_use_stale error timeout updating;# SIE + SWR proxy_cache_background_update on;
add_header X-Edge-Cache $upstream_cache_status;
proxy_pass http://origin_pool;
}
}

9.2ワニス:サロゲートキーズのBAN

vcl sub vcl_recv {
if (req. method == "BAN") {
if (req. http. Surrogate-Key) {
ban("obj. http. Surrogate-Key ~ " + req. http. Surrogate-Key);
return (synth(200, "Banned"));
}
}
}

sub vcl_deliver {
set resp. http. Surrogate-Key = "article:42 tag:author:7";
set resp. http. Cache-Control = "public, s-maxage=300, stale-while-revalidate=60";
}

9.3 Envoy(エッジキャッシュフィルタ)

yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. http. cache. simple_http_cache. v3. SimpleHttpCacheConfig

9.4 CloudFrontスタイルの動作(サムネイル)

動作A: '/images/'-長いTTL、圧縮、フォーマットによって異なります。
動作B: '/api/'-短いTTL、 SWR、署名されたクッキー、WAF/ボット保護。
Origin Shieldが有効な状態500/502/504→'stale-if-error'。

10)観察可能性、SLOおよびレポート

10.1メトリクス

(POP/region/routeによる)、 。
origin_offload=1 − (origin_requests/ edge_requests)。
質量、stale_responses_total、 revalidations_totalによるTTFB/TTL。
、 。 。
shield_hit_ratio(階層化されている場合)、origin_egress_bytes(コスト)。

10.2ログ/トレイル

「HIT/MISS/STALE/UPDATING/BYPASS」、キー、TTL、 POP、テナントのログ。
分散トレースでは、ソース('edge'、 'origin')と原因(revalidate/stale/error)をマークします。

10.3 SLOの例

p99 TTFB ≤ 250%、エッジヒット≥ 70%、バイトヒット≥ 80%、 origin error-offload ≥ 90%"。
「'stale-if-error'応答率≤ 1日あたり1%」。

11)セキュリティ、プライバシー、コンプライアンス

WAF/ボット管理-原点へのフィルタリングのエッジ。
データの地域性:有効なPOPにのみプライベートアーティファクトを保存する。領域固有のキーとACLを使用します。
エッジの署名とトークンは、パブリックキャッシュからの個人的な回答を与えません。
PII最小化:キーに個人データを含めないでください。クッキーを暗号化する。パーソナライゼーションのための短いTTL。

12)典型的なレシピ

12.1「ほとんど動的」(テープ/リスト)

エッジに+SWRを備えたマイクロキャッシュ1-3、シールドを有効にしたシングルフライト、空の結果のためのネガティブキャッシュ1-5 s。

12.2画像/メディアクラウド

Edge Recise/Formatting (WebP/AVIF)、 'width/format'によるキャッシュオプション、長いTTL、コンテンツタグによる障害。

12.パーソナライズされた3つのAPI

'Cache-Control: private'またはsigned cookie+key-segmentation(テナント)、短いTTL、レスポンスの「ほとんど公開」部分のSWR。

12.4ビッグセールス/ピック

主要資源(プレウォーム)を温め、静的のためのTTLを増加させ、攻撃的なSWR/SIE、起源のためのハードリミット、シールドが含まれています。

13)アンチパターン

異なるレスポンス→リーク/不正確なデータを持つ'Vary'はありません。
巨大な'Vary'→cardinality→low hit。
prod/experiments→contaminationの一般的なキャッシュ。
シングルフライト→ストームは原点を逃しません。
制限のないSWR→レースと雪崩の更新はリクエストを検証します。
パブリック→セキュリティインシデントとしてのプライベートレスポンスのエッジキャッシュ。
世界的な負荷→原産地の過熱で階層化/シールドがない。

14)実装チェックリスト

  • POPカバレッジをマップし、anycast+latency-routingを有効にします。
  • 階層型/シールドと単回飛行/合体ポリシーを選択します。
  • デザインキーとVary(最小カーディナリティ、PIIなし)。
  • TTL/SWR/SIE (ソフト/ハードTTL)とネガティブキャッシュを設定します。
  • 署名されたURL/Cookieを有効にし、オリジンを非表示にし、WAF/ボットフィルタを有効にします。
  • 障害の整理:サロゲートキー/BAN+イベント駆動。
  • hit/byte-hit/offload/TTFBメトリックとper-POPダッシュボードを上げます。
  • ピーク前のウォームアップ、ストーム/オーバーロードへのランブック。
  • プライバシー/地域性テスト、キーとポリシーの監査。
  • エッジおよびTTL/SWRの自動調整基準のSLO/誤った予算。

15) FAQ

Q:端のTTLを選ぶ方法か?
A:許された陳腐化および打撃比率の目的を押して下さい。「ニアダイナミクス」-1-5 s+SWR;ディレクトリ/画像-イベント/タグによる障害のある分/時間。

Q:シールドポップはいつ必要ですか?
A:グローバルトラフィックまたはホットキーを使用すると、シールドは原点のミスを劇的に減らし、「追いつく」波を安定させます。

Q:許可された応答をキャッシュするにはどうすればよいですか?
A:「プライベート」(ブラウザ)、または署名されたCookie/URLとキーセグメンテーション(PIIなし)の公開、または一般的に重要な個人データのバイパス。

Q: HTTP/3をどうするか?
A:有効にする:特にモバイル/失われたチャネルの勝利。HTTP/2のプロキシとフォールバックの互換性を制御します。

16)合計

エッジキャッシュとPOPネットワークは、高速で経済的なプラットフォームの基盤です。成功は正しいキーと'Vary'、合理的なTTL/SWR/SIE、タグ/イベント障害、階層型/シールド起源保護、および観察(ヒット/オフロード/TTFB)およびセキュリティ/プライバシー規律によって決定されます。チェックリストに従ってください-そして「エッジ」は驚きの源ではなく、あなたのアクセラレーターになります。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。