テクノロジーとインフラストラクチャ→CDNとコンテンツキャッシュ
CDNとコンテンツキャッシュ
1) CDNとキャッシュの理由
CDN (Content Delivery Network)は、RTTとTTFBを削減し、起源をオフロードし、P95/P99の尾を安定させます。iGaming/Fintechの場合、次のとおりです:- カタログ、アセット、プロモーション、メディアのファーストファーストバイト。
- 起源の容量の爆発的な成長のないピーク安定性(トーナメント/イベント)。
- 排出の節約と予測可能なコスト。
- ジオコントロール(規制、コンテンツライセンス)。
2)基本的なキャッシュ戦略
2.1キャッシュできる回答
静的:JS/CSS/フォント/アイコン-長いTTL (30-365日)+名前のファイルハッシュ。
セミスタティック:ゲームカタログ、バナー、設定-数分から数時間までのTTL+'stale-while-revalidate'。
API GET/HEAD:ディレクトリ、価格、リードボード-正しいキーを持つ短いTTL (5-120秒)。
2.2タイトル
'Cache-Control: public、 max-age=600、 stale-while-revalidate=300、 stale-if-error=600'
'ETag'/'Last-Modified'を再検証する。
'Surrogate-Control'/' CDN-Cache-Control'(プロバイダがサポートしている場合)。
プライベートデータの場合:'Cache-Control: no-store' ('no-cache'だけではありません)。
2.3キャッシュキー
Base:レスポンスに影響を与えるメソッド+URL path+クエリパラメータ。
追加:'Accept-Encoding' (gzip/br)、 'Accept' (json/webp/avif)、ロケール('Accept-Language')、コンテンツが影響を受ける場合は地域/通貨。
キーの誤ったヘッダー(クッキー、トレースID)を避けます。
3)管理とクッキーの変更
'Vary: Accept-Encoding、 Accept-Language'は必要最小限のセットです。
キャッシュされたパスのCDNクッキー除去:ホワイトリスト以外のすべてを削除します(例:ABフラグ)。
キャッシュされたコンテンツ以外のサブドメイン/パスにセッション識別子を転送します。
4) TTLと鮮度パターン
不変静的:'Cache-Control: public、 max-age=31536000、 immutable'+ファイル名のバージョン。
SWRO/SIE: 'stale-while-revalidate'および'stale-if-error'-起源の問題におけるUX抵抗。
パーティション化されたTTL:ゲームのルートリスト-30-60秒;ゲームカード-5-10分;バナー-30分。
APIミックス:基本的な参考書-5-30分;通貨/限度-1-5分;リードボード-2-15秒。
5)階層型キャッシングの起源シールド
階層型/地域キャッシュ:エッジを通過するリクエストは、オリジンではなく地域の「シールド」で戦われます。
利点:起源のより少ないミス、「嵐」、より安い出口を滑らかにします。
地理的に最も交通密度の高いボード(EU、 TR、 BR、 LATAM)をグループ化します。
6)障害とウォームアップ
Purge by path/prefix/tag:タグはバッチクリーニング(カタログリリース、プロモーションキャンペーン)に便利です。
柔らかいパージ(恵み):コンテンツを時代遅れにマークしますが、新しいものが到着する前にそれを放棄します。
ウォームアップ(prewarm):リリース中/トーナメント前のシナリオ:人気のあるパスのポーリング、スプライトの生成、写真のバリエーション。
カナリア不能:部分的にクリーン、メトリック/エラーを検証し、展開します。
7)端の規則および機能(労働者/機能)
レスポンスの上書き:キャッシュヘッダーの追加、'Vary'の正規化、Cookieの削除。
Geo/ASNルーティング:リダイレクト、国によるロケール/通貨。
保護されたメディア/オブジェクトの署名されたURL/ヘッダー。
Edge-ABテスト:ライト、起源の負荷の増加無し(静的/半静的のためにだけ)。
Edge-compute:ライトウィジェット/パーソナライゼーションはレンダリングしますが、ホットな支払いパスではありません。
8)画像とビデオ
8.1枚の写真
Autoconversion: WebP/AVIFの場合"Accept'クライアント;'Vary: Accept'。
エッジのサイズ変更:パラメータ'w/h/fit/quality';プリセット(カード、バナー、プレビュー)を準備します。
スプライトとSVGの最適化、前面の遅延負荷。
8.2ビデオ/ストリーム
短いセグメント(2-4秒)のHLS/DASH、重複プレイリスト。
最寄りのセグメントと'stale-if-error'をプリロードします。
ライブベットの場合-TTFBカットの地域シールドにセグメントを保持します。
9) CDN経由のAPI
キャッシュ可能なGET: 'Cache-Control'と正しいキー(locale/currency/region)を追加します。
条件付きGET: 'ETag'/'If-None-Match'はバイトとTTFBを削減します。
POST/PUT:キャッシュされていません;明示的なルールとidempotentセマンティクス(まれに正当化される)の下でのみPOSTレスポンスをキャッシュすることができます。
エッジでのレート制限/WAF:ボット/異常を切断して尾を減らします。
10)セキュリティ、アクセス、コンプライアンス
WAF/ボット管理:署名、行動ヒューリスティクス、ボーナススキャナーに対する保護。
メディアおよびプライベートダウンロード用の署名付きURL/ヘッダー。
mTLS起源のIP allow-list。
GDPR/PII/PCI:機密データをキャッシュしないでください。個人的な応答を持つAPI-'no-store'。
市場の規制要件に応じてエッジでジオフィルタ/インターロック。
11)ネットワークおよび議定書
CDN、 TLS再開、OCSPステープリングのHTTP/2/3を有効にします。
テキストフォーマットのためのBrotli (br)、 gzip-フォールバック。
TCP/QUICチューニング(プロバイダ)→特にモバイルネットワークにおける損失の影響が少ない。
12) CDNのための観察可能性そしてSLO
メトリック(エッジとシールド):- Hit Ratio(全体と接頭辞による)、Origin Offload。
- 地域/ASNによるTTFB P50/P95/P99。
- ステータスコード(エッジ/オリジン)によるスループット/エラー。
- 待ち時間をパージします。
- イメージ変換の遅延(エッジのサイズ変更を使用している場合)。
- ゲームカタログ:TTFB P95 ≤ 150ミリ秒、オフロード≥ 85%。
- メディア(画像):ヒット率≥ 90%、変換エラー<0。1%.
- API GET 「directories」: TTFB P95 ≤ 200ミリ秒、Revalization Hit ≥ 60%。
13) FinOps: キャッシュ値
Offload=origin→direct$の利点を持つegressより小さい。
階層型+シールドカット「嵐」とMISS負荷。
画像最適化(AVIF/WebP/サイズ変更)により、トラフィックを最大限に節約できます。
P95レスポンスウェイトと「高価なMISS」(バイト×数×領域)を制御します。
14)構成とルール(フラグメント)
14.1原点タイトル(Nginx)
nginx статика с версионированием location ~ \.(css js woff2)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
полустатика каталога location /catalog/ {
add_header Cache-Control "public, max-age=300, stale-while-revalidate=600, stale-if-error=600";
add_header Vary "Accept, Accept-Language";
}
14.2エッジ上のキー正規化(擬似)
js addRule((req) => {
// очищаем шум req.cookies.clearExcept(['ab', 'locale']);
// ключ = method+path+критичные query key = `${req.method}:${req.path}?lang=${q.lang}¤cy=${q.cur}`;
req.setCacheKey(key);
req.setVary(['Accept', 'Accept-Encoding', 'Accept-Language']);
});
14.3署名されたURL(アイデア)
/media/{path}?exp=1735707600&sig=HMAC_SHA256(secret, path exp ip)
На edge: проверка exp и подписи, опционально привязка к IP/ASN.
15)解放および操作プロセス
リリースフック:展開後のタグ/プレフィックスによる自動パージ。
Prewarm-list:トラフィック/変換のトップパス-事前にウォームアップします。
カタログTTLマトリックス:製品/マーケティングに同意。
インシデント:MISS/TTFBの成長で-古い場合エラーをオンにし、原点が安定するまでエッジで高価な変換を「撮影」します。
16)実装チェックリスト
1.コンテンツマップ(静的/半静的/API)とTTL行列。
2.'Cache-Control'、 'ETag/Last-Modified'、 'Vary'を修正します。
3.「ノイズ」のないキャッシュキー、クッキーストリッピング、ホワイトリスト。
4.階層型キャッシュ+地域別のオリジンシールド。
5.タグ/プレフィックス、ソフトパージ、プレウォーム手順でパージします。
6.エッジ関数:正規化、ジオロジック、署名付きURL。
7.画像最適化(WebP/AVIF/リサイズ)、ビデオ用HLSセグメント。
8.WAF/ボットフィルタ、ジオ制約、原点へのmTLS。
9.SLOボード:TTFB、ヒット比、オフロード、変換エラー。
10.FinOpsレポート:$/GB、親愛なるMISS、エグレスリーディングリージョン。
17)アンチパターン
'no-cache'はどこでも「念のため」です。
キャッシュキーには、すべてのクエリ/ヘッダー→ゼロヒット比が含まれます。
Cookie依存のレスポンス(キャッシュ全体を壊します)。
各リリースのCDN全体をクリアします。
ピーク時のエッジ上の長い同期変換。
'stale-while-revalidate'/'stale-if-error'がない-UXの急激な劣化。
「no-store」のない個人データ/応答のキャッシュ。
18) iGamingコンテキスト/フィンテック: 実用的なノート
トーナメント/イベント:リーダーボード上の短いTTL (2-10秒)+SWR;プレウォームゲームカードとバナー。
ジオライセンス:エッジロック/リダイレクト国、キャッシュキーの通貨/ロケール。
プロモーションとクーポン:バナー/条件をキャッシュしますが、個人的な制限はありません。
責任あるゲーム:ポリシー/リミットページ-SWRで半静的。個人データ-'no-store'のみ。
PSP/KYC Webhook: CDN経由ではなく、キャッシュなしで、ハードタイムアウトでエッジパススルーです。
[結果]
強力なCDN戦略は、正しいヘッダーとキャッシュキー、MISS削減のための階層型/シールド、正規化と保護のためのエッジ機能、クイックリリースのための障害/ウォーミング、SLOとFinOpsによる観測性です。これらの原則を遵守することで、あなたはピークに耐え、ユーザーとパートナーのためにTTFBを予測可能にする高速かつ経済的な境界を持っています。