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.
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.
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
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.
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.