GH GambleHub

CDN önbelleğe alma ve TTL optimizasyonu

Kısa Özet

Bir CDN önbelleği, kullanıcı ile kaynak arasında bir "hızlandırıcı + kalkan'dır. Şu durumlarda iyi çalışır:

1. Önbellek anahtarı sabittir ve "gürültü" içermez.

2. Yük altında TTL poliçesi:'s-maxage'/' max-age '+' stale-while-escalate/if-error '.

3. Engellilik yönetilir: etiketler/önekler + "yumuşak" temizleme ile.

4. Katmanlı önbellek/origin-shield ve negatif önbellek dahildir.

5. Gözlemlenebilirlik vardır: katmanlara göre isabet oranı, p95 TTFB, dönüş payı 304.

Temel başlıklar ve ne anlama geldikleri

'Önbellek Kontrolü':
  • 'max-age = ' - Tarayıcı için TTL.
  • 's-maxage = '- CDN/proxy için TTL (' max-age'ile örtüşür).
  • 'bayat-while-revalidate = ' - modası geçmiş, paralel olarak güncelleyin.
  • 'bayat-if-error = ' - origin hatası oluştuğunda eski olanı döndürürüz.
  • 'Değişmez' - kaynak değişmez (sürümlü varlıklar için uygundur).
  • 'ETag'/' Last-Modified' - 304 için koşullar, bayt/CPU kaynağı kaydedin.
  • 'Vary' - önbellek anahtarını etkileyen başlıkların bir listesi (kısıtlama ile kullanın!).
  • 'Vekil Kontrol' - CDN için "genişletilmiş" Önbellek Kontrolü (destekleniyorsa).
  • 'Süresi doluyor' - eski, ancak yine de müşteriler tarafından hesaplanıyor.
Örnek (statik, yıl):

Cache-Control: public, max-age=31536000, immutable
Örnek (güvenli eskimeye sahip yarı hoparlör):

Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."

Önbellek Anahtarı Tasarımı ve Normalleştirme

Amaç, esasen aynı isteklerin aynı nesneye düşmesidir.

URL normalleştirme: durum, çift eğik çizgi, izleyen eğik çizgi, sorgu parametrelerinin sırası.
"Gürültü" yok sayın: 'utm _',' fbclid ',' gclid ', keyfi ref etiketleri.
Sınırlı Çeşitlilik: Yalnızca gerçekten önemli başlıklar ('Kabul-Kodlama', bazen 'Kabul', yerel ayar için 'Kabul-Dil').
Cihaz sınıfı: gerekirse, 2-3 sınıf (mobil/masaüstü/tablet) kullanın, sonsuz kullanıcı aracısı dalları kullanmayın.
Auth bağlamı: varsayılan olarak private önbelleğe almayın; İmzalı URL'ler/çerezler-bypass veya ayrı genel/özel yollar kullanın.

Hızlı stil (sözde):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

İçerik türüne göre TTL stratejileri

YazıTTL CDN ('s-maxage ')Tarayıcı ('max-age')Ek olarak
Sürümlenmiş varlıklar ('/app. a1b2. js ')1 yıl1 yıl'değişmez'; Engellilik gerekli değil
Kataloglar/açılış sayfaları1-10 dk30-120 s'bayat-while-revalidate = 10-30 мин'
Görüntüler (Resays)10-60 dk5-15 dkVary по'kabul et '(webp/avif)
GET API'leri (önbelleğe alınmış)10-120 s0-30 sSadece idempotent; 'bayat-eğer-hata' 5-60 dk
500/zaman aşımı hataları00Negatif önbellek 30-120 sn (CDN düzeyinde), önbellek kullanmayın 401/403/POST

Engellilik politikaları

URL/Önek ile: "'/static/2025-11-05/' altındaki her şeyi süpürün".
Etiket/Anahtar ile:'tüm 'katalog've' ürün: 123 'kaldırmak ".
Yumuşak temizleme: eski olarak işaretleyin, nesneyi silmeyin - daha hızlı yeniden doldurma.
Olay odaklı: CI/CD veya admin olayı webhook'u çağırır "etiketleri geçersiz kıl".

Öneri: Her iki taktiği birleştirin: varlıklar için sürüm oluşturma yolları + içerik/sayfalar için etiket temizleme.

Katmanlı-önbellek, origin-shield и ön warm

Katmanlı önbellek: CDN bölgesel katmanları - daha az kaynak isteği.
Origin-shield: Orijine bir "shield" POP - lokaliteyi ve isabet oranını iyileştirir.
Prewarm (pre-fetch): Olay/sürümden önce sıcak URL'leri/önbellekleri ısıtın.
Negatif önbellek: Kısa bir süre için önbellek 5xx/Timeout (30-120 s), böylece kökeni bir retras fırtınası ile boğmamak için.

API Önbelleği: Ne Zaman Yapabilirsiniz

Sadece GET/HEAD ve idempotent.
Anahtar: yol + temel sorgular (örneğin, '? kategori =... & sayfa =... ').
Doğrulama: 'ETag'/' Last-Modified've kısa's-maxage'.
Kullanıcıya göre filtreler: istemci/kenar işlevine kişiselleştirme getirin veya imzalı istekleri + "Genel" yanıtı kullanın.

Örnek (API, 30 s + SWR):

Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"

Önbellek zehirlenmesi koruması

Sabit URL/başlık normalleştirme; Anahtardaki parametrelerin beyaz listesi.
Şüpheli başlıkları/kopyaları kırpma ('X-Forwarded-', genişletilmiş 'Kabul Et').
'Vary' değerini sınırlayın ve başlıkların boyutunu/sayısını kontrol edin.
Etki alanı ayrımı: private/admin - önbellek olmadan ayrı bir ad üzerinde.
Yanıtların doğrulanması: 4xx'i önbelleğe almayın (statik için 404 hariç), açık bir politika olmadan "kullanıcı" sayfalarını önbelleğe almayın.

Sıkıştırma ve Formatlar

Metin için Brotli (js/css/json), gzip - fallback; önceden sıkıştırılmış varlıklar kabul edilebilir.
Görüntüler: webp/avif nerede destek; 'Vary: Accept' + türevlerini kullanın.
Video/ses için aralık istekleri: CDN parçaları önbelleğe alır.
Content-Negotiation: Anahtar kardinalitesini düşük tutun (ham UA'lar yerine cihaz sınıfı).

Gözlemlenebilirlik ve SLO

Anahtar Metrikler

Vuruş oranı (bayt/istek) на kenar/katman/kalkan.
Bölgeye ve türe göre p50/95/99 TTFB (statik/API).
Fill-rate/Origin çıkışı - orijine ne kadar gider.
304 oranı ve ortalama yanıt boyutu.
Hata bütçesi: 'bayat-if-error'/' SWR' sorunlarının paylaşımı; Arındırma frekansı.

SLO örnekleri

Bölgesel olarak 'p95 TTFB' statiği ≤ 120-150 ms, API GET önbelleğe alınmış ≤ 200-250 ms.
Kenar isabet oranı statiği ≥ %90, yarı hoparlörler ≥ %60.
Hata içeren bayat daldan gelen yanıtların yüzdesi 0 ≤. 30 günde %5.

Yapılandırma hile sayfaları

Nginx (CDN'den önce veya kendi kendine PoP'de ters proxy)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN:512m max_size=100g inactive=7d;

map $args $clean_args {
"~(^    &)(utm_    gclid    fbclid) """; # default $ args simplified example;
}

server {
listen 443 ssl http2;
set $cache_key "$scheme$request_method$host$uri?$clean_args    $http_accept    $http_accept_encoding";
location /static/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_ignore_headers Set-Cookie;
add_header Cache-Control "public, s-maxage=86400, max-age=3600, stale-while-revalidate=600" always;
proxy_pass https://origin_static;
}

location /api/public/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_cache_valid 200 30s;
add_header Cache-Control "public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600" always;
proxy_set_header If-None-Match $upstream_http_etag;
proxy_pass https://origin_api;
}
}

Elçi (SWR + negatif önbellek, kavram)

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. cache. simple_http_cache. v3. SimpleHttpCacheConfig
Cache-Control/Surrogate-Control Header Cache Policies
We cache 5xx errors briefly via route/retry policy + local_rate_limit

"Hızlı" varlıklar için başlıklar


Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br

Yarı hoparlörler için başlıklar (kataloglar)


Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept

FinOps: Nakit para tasarrufu nasıl

Çıkış kaynağı ↓, daha az CPU/DB yükü - daha düşük altyapı maliyetleri.
Ücretli arka uçlara daha az istek (arama/dizin/resim).
Hedef metrik: P95'te $/düşüş ve 1 GB ile çıkışta $/düşüş - lansman sonrası etkiyi izleyin.

iGaming/fintech'e özel

Sağlayıcı katalogları/varlıkları: sürümlü yollar + yıllık TTL.
Etkinlik/turnuva inişleri: 10-30 dakika boyunca 1-5 dk's-maxage '+' SWR '; Yükseltmede etiket temizliği.
Liv sayfaları (katsayılar/tablolar): JSON bloklarının kısmi önbelleği, kısa TTL (5-30 s), kişisel bloklar için - istemci oluşturma.
PSP/ödeme uç noktaları: önbelleğe almayın, sıkı 'depolama yok'; Yalnızca referans kitapları önbelleğe alın (BIN tabloları, durumlar).
Antibot: statik/GET önbelleğe alma, şüpheli ASN'ler için gri yollar; 'Vary'i gürültülü manşetlerden uzak tutun.

Uygulama kontrol listesi

  • Açıklanan önbellek anahtarı: URL normalleştirme, izin verilen sorguların listesi, sadece istenen için 'Vary'.
  • Kamu/özel yollar ayrılmış; özel - 'mağaza yok've CDN'yi atlayın.
  • TTL merdivenleri tanıtılan içerik türüne göre; 'SWR/if-error' yapılandırıldı.
  • katmanlı-önbellek + origin-shield yapılandırılmış; Negatif önbellek 5xx (kısa) etkin.
  • Etiket/URL temizleme, yumuşak temizleme var; CI/CD ile entegrasyon.
  • Sıkıştırma (br/gzip), web görüntü formatları ve aralık yanıtları içerir.
  • Metrikler: katmana göre isabet oranı, p95 TTFB, 304 oranı, orijin çıkışı; başarısızlıklara karşı uyarır.
  • Playbooks: Zirvelerden önce önbellek ısınması, acil durum temizliği, orijin bozulması.

Yaygın hatalar

Büyük bir TTL ile versio olmayan varlıklar - kullanıcılardan "yapışkan" demetleri.
Aşırı 'Vary' ('User-Agent'tarafından, tüm başlıklar) - bir kardinalite patlaması ve düşük bir isabet oranı.
Önbelleğe alma 4xx/401/403/özel içerik.
Negatif önbellek eksikliği - bozulmuş orijin taleplerinin bir çığ.
Etiket temizleme yok - büyük nokta temizleme ve fırtına yeniden doldurma.
Önbellek anahtarı "gürültülü" UTM/ref parametrelerini içerir.
Statikler için çok kısa TTL - CDN ve orijinde ekstra yük.

Mini oyun kitapları

1) Olaydan önce önbelleği ısıtın

1. Üst-N URL'lerinin günlüklerle toplanması - 2) Paralel prefetch (bölgeye göre oran sınırlı) - 3) Hit-ratio ↑ ve p95 ↓ kontrol edin.

2) Acil yumuşak temizleme katologları

1. Gönder 'ARTIRMA'/tag-clear - 2) CDN bayat verir ve arka plan ile taze yukarı çeker - 3) Orijinde hiçbir sivri için kontrol edin.

3) Köken hatası

1. 'Bayat-if-error' X saat yardımcı olur - 2) Kenarda "teknik çalışma" afişini etkinleştirin - 3) Kurtarma üzerine - hedef ısınma.

Sonuç

Güçlü CDN stratejisi = doğru önbellek anahtarı + SWR/if-error + yönetilen engellilik + katmanlı/kalkan + gözlemlenebilirlik ile anlamlı TTL. Üstbilgilerdeki ve IaC'deki politikayı düzeltin, isabet oranını ve p95'i ölçün, zirvelere ısınmayı planlayın - ve kullanıcılar her zaman hızlı bir cevap alacak ve köken en sıcak saatlerde bile hayatta kalacaktır.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.