CDN ve gecikme azaltma optimizasyonu
1) Hedefler ve gecikme haritası
Gecikme = DNS + TCP/TLS + TTFB (sunucu/kaynak/önbellek) + içerik iletimi (RTT × birimleri) + istemci oluşturma.
Optimizasyon = RTT sayısını azaltır, baytları azaltır ve hesaplama/önbelleği kullanıcıya yaklaştırır.
2) CDN mimarisi
Anycast POP'lar yakın uçlu bir BGP yönlendirme düğümüdür.
Katmanlı önbellekleme/Origin Shield - orijindeki fırtınayı azaltan bir "şemsiye'ara katmanı.
Coğrafi/Bölgesel yönlendirme - kiracının/yargı alanının bağlanması (veri egemenliği, lisanslar).
Yük devretme - yedekleme kaynağı/bölgesi, sağlık örnekleri ve hızlı anahtar.
3) Önbellek: anahtarlar, başlıklar, stratejiler
3. 1 Önbellek anahtarları
Varsayılan değer 'scheme + host + path +? Sorgu '.
Sadece istediğiniz parametreleri ekleyin ('? v = ','? Lang = ','? kiracı = '). Diğerleri görmezden gelme-paramlarında.
'Vary' - minimal: 'Accept-Encoding', 'Accept-Language' (gerekirse), 'Authorization' usually breaks the cache.
3. 2 Politikalar
Genel statik: 'Cache-Control: public, max-age = 31536000, immutable' + rev (hash in name).
Yarı dinamik (dizinler, kurallar, SSS):'s-maxage = 300, bayat while-revalidate = 600, bayat-if-error = 86400 '.
API-GET: ETag/Last-Modified, 'SWR/SIE' kullanın, birleştirmeyi etkinleştirin (bir sıcak anahtar için bir istek).
Özel: kişisel yanıtlar - kenar hesaplama (ESI/kv) veya kiracı başına önbellek aracılığıyla çevre üzerinde.
3. 3 Anti-fırtına
Birleştirme isteği - eşzamanlı bayan isteklerini daraltın.
Serve-stale - köken başarısız olduğunda eski bir nesne verin.
Arka plan yeniden değerleme - arka planda güncelleme.
4) HTTP/2-3, TCP/TLS ve erken dönüş
HTTP/2: multiplex, başlık sıkıştırma; 'max eşzamanlı akışları', büyük başlıkları sınırlayın.
HTTP/3 (QUIC): mobil/yüksek kayıp TTFB büyük düşüş; Initial-rapids ve Retry'ye göz kulak ol.
TLS 1. 3: 1-RTT el sıkışma; OCSP zımbalama; HSTS.
0-RTT: sadece idempotent 'GET' için ve tekrarlama riskleri dikkate alınırsa.
103 Erken İpuçları: Kritik kaynaklar için erken 'Link: rel = preload'.
Preconnect/DNS-prefetch: '<link rel = "preconnect" href = "https ://cdn. Örnek">'.
5) Kenar hesaplama ve'ince kişiselleştirme "
Kenarda: başlık sayımı, coğrafi/kiracı sabitleme, A/B işaretleme, bir köken sormadan kolay kişiselleştirme.
Kural: PII'yi POP düğümlerinde saklamayın; Yalnızca önbellek kümeleri/genel veriler.
6) Ortam ve formatların optimize edilmesi
Görüntüler: WebP/AVIF'e otomatik dönüştürme, kenardaki yeniden boyutlandırma, 'srcset/size', 'lazyload'.
Sıkıştırma: Metinler için brotli (HTML/CSS/JS/JSON), gzip fallback.
Video: HLS/DASH, CDN-segment önbelleğe alma, 'preload = metadata', poster.
Fontlar: alt küme + 'font-display: swap'; Uzun önbelleğe sahip ana bilgisayar.
Kritik CSS: satır içi ilk ekran; Gerisi async.
7) API desenleri ve önbelleğe alma
Idempotent GET - istek anahtarlarına göre önbelleğe alıyoruz (veri sürümü dahil).
ETag: Güçlü yük hash + 'If-None-Match'.
'Cache-Control' istemcisinden ayırt etmek için Surrogate-Control (CDN'ye özgü).
İmzalı URL'ler - özel statik/ortam için.
GraphQL: anahtar önbelleğini işlem/değişkenlere göre normalleştirir; Kısmi önbellek/çözümleyici önbelleği kullanın.
WebSockets: gerçek zamanlı için - mesajları kısaltın, sıkıştırın (permessage-deflate), WS-parçalarını kullanıcıya daha yakın konumlandırın.
8) Yapılandırma örnekleri
8. 1 NGINX (köken: API-GET'i önbelleğe alıyoruz)
nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}
8. 2 Fastly VCL (SWR, birleştirme, çerezleri yoksay)
vcl sub vcl_recv {
set req. hash_ignore_busy = true; # coalescing if (req. url. qs ~ "^(?!.(lang v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}
sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}
8. 3 Cloudflare (Dönüşüm Kuralları, Önbellek Kuralları, Erken İpuçları - псевдо)
json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}
9) Mobil ağlar ve "dengesiz" İnternet
HTTP/3 agresif kullanın; Kritik yolun boyutunu küçültün (HTML + kritik CSS <14 KB).
Öncelik H2/H3: Önceliklendirme (HTML - CSS - JS - daha sonra medya).
Politikayı jitter ile retray, API için idempotency.
Boyut bütçeleri ve paketleme: kod bölme, ertelenmiş JS, kullanılmayan CSS/JS'yi kaldırma.
10) Gözlemlenebilirlik ve SLO
RUM: TTFB, LCP, INP, CLS bölgelere göre/ASN/kiracılar; P95/p99 dağılımları.
Sentetikler: POP-s tarafından kontrol yolu "/sağlık/cdn ".
Önbellek metrikleri: genel ve anahtar başına isabet oranı; köken getirme oranı; Tasarrufları birleştirmek.
Uyarılar: isabet oranı düşüşü, origin-çıkış artışı, H3-fraction bozulması, kalkan başına 5xx.
11) iGaming/Finansın Özellikleri
Oyun katalogları/oran: kısa's-maxage '+ SWR; Bölgeye duyarlı ключ ('kiracı' region 'lang').
Olay zirveleri (eşleşmeler, çekilişler): önbellek ısınması (önceden sıcak), ağır kişiselleştirmelerin "dondurulması", ayna kaynakları.
Ödeme/kabin: özel önbelleğe almayın, ancak H3 + edge-TLS ve kapatma bölgesi ile hızlandırın.
Yargı bölgeleri: bölge başına bölünmüş alanlar/yollar; 'Vary: X-Bölgesi' kontrolü.
12) Antipatterns
'Vary:'her konuda; Önbellek anahtarı gereksiz çerezlere/başlıklara bağlıdır.
SWR/SIE eksikliği: Kısa orijin hataları için siyah ekranlar.
Etiketler/anahtarlar ile nokta sakatlığı yerine'her yerde "önbelleği temizleyin.
İsim revizyonu olmayan ve 'max-age = 0' olan kaynaklar.
Herkese açık verilen yerlerde bile 'Yetkilendirme' için global reddetme önbelleği.
Birleşme eksikliği - orijinde fırtına.
POP'da erken'ağır "kişiselleştirme.
13) Prod Hazırlık Kontrol Listesi
- Anycast POP + katmanlı/kalkan; Sağlık kontrolleri ve orijin yük devretme.
- Önbellek anahtarları minimumdur; Gereksiz sorguları/çerezleri görmezden gelin; 'Vekil-Kontrol'.
- SWR/SIE etkin, birleştirici etkin; hizmet-bayat hatalar.
- HTTP/3 etkin; TLS 1. 3; 103 Erken İpuçları kritik kaynaklar için yapılandırılmıştır.
- Görüntüler: AVIF/WebP, kenarda yeniden boyutlandırma; Şarkı sözleri için Brotli.
- API-GET с ETag/Last-Modified; idempotency/geri çekilmeler; Özel profilleri önbelleğe almayın.
- Statik alanlara önceden bağlanma; Kritik CSS sıralı.
- Metrikler: isabet oranı, köken çıkışı, TTFB/LCP p95, H3-share, bölgeye/kiracıya göre.
- Olaylardan önce önbellek ısınma planı; Nokta sakatlığı (etiketler).
- Vary/keys/TTL belgeleri; Olayların oyun kitabı (isabet oranı düşüşü).
14) TL; DR
Başlangıç noktasına doğru yürüyüşe en az düzeyde devam edin: katmanlı/kalkan + uygun önbellek tuşları + SWR/SIE + birleştirme. HTTP/3/TLS 1'i açın. 3, 103 Erken İpuçları kullanın ve preconnect. Kritik CSS satır içi, kenardaki medyayı sıkıştırın ve dönüştürün. API için - ETag, düzgün 'Vary', idempotency ve makul önbellekleme 'GET'. Hit-ratio, TTFB/LCP p95, origin çıkış değerini ölçün ve tepe noktalarında önbelleği önceden ısıtın.