CDN-caching və TTL-optimizasiya
Qısa xülasə
CDN-keşi istifadəçi və origin arasında «sürətləndirici + qalxandır». Bu zaman yaxşı işləyir:1. Cache key sabit və «səs-küy» yoxdur.
2. TTL-yükləmə siyasəti: 's-maxage '/' max-age '+' stale-while-revalidate/if-error '.
3. Əlillik idarə olunur: etiketlər/prefikslər + «yumşaq» purge.
4. Tiered-cache/origin-shield və negative-cache daxildir.
5. Müşahidə var: qatlarda hit-ratio, p95 TTFB, geri dönüş nisbəti 304.
Əsas hederlər və onlar nə deməkdir
`Cache-Control`:- 'max-age =
' - Brauzer üçün TTL. - 's-maxage =
' - CDN/proxy üçün TTL (üst-üstə 'max-age'). - 'stale-while-revalidate =
' - köhnəlmiş veririk, paralel olaraq yeniləyirik. - 'stale-if-error =
' - köhnəlmiş origin veririk. - 'immutable' - resurs dəyişmir (versiyalı assetlər üçün uyğundur).
- 'ETag '/' Last-Modified' - 304 üçün şərtlər, bit/CPU origin qənaət.
- 'Vary' - cache açarına təsir edən başlıqların siyahısı (təmkinli istifadə edin!).
- 'Surrogate-Control' - CDN üçün «genişləndirilmiş» Cache-Control (dəstəklənərsə).
- 'Expires' köhnəlib, lakin müştərilər tərəfindən nəzərə alınır.
Cache-Control: public, max-age=31536000, immutable
Nümunə (təhlükəsiz köhnəlmiş yarı dinamika):
Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."
Cache açarı: dizayn və normallaşma
Məqsəd eyni sorğuların eyni obyektə daxil olmasıdır.
URL normallaşdırılması: registr, ikiqat slash, treyling slash, query parametrləri qaydası.
«Səs-küy»: 'utm _', 'fbclid', 'gclid', ixtiyari rəf etiketləri.
Məhdud Vary: yalnız real mənalı başlıqlar ('Accept-Encoding', bəzən 'Accept', 'Accept-Language' yerli üçün).
Device-class: lazım gələrsə, sonsuz user-agent filialları deyil, 2-3 sinif (mobile/desktop/tablet) istifadə edin.
Auth-konteksti: Default private cache deyil; signed-URLs/cookies-bypass və ya ictimai/özəl yolların ayrılması istifadə edin.
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
Məzmun növlərinə görə TTL strategiyaları
Əlillik siyasəti
By URL/Prefix: «bütün altında silin '/static/2025-11-05/'».
By Tag/Key: «bütün 'catalog' və 'product: 123' çıxarmaq».
Soft purge: köhnəlmiş kimi qeyd edin, obyekt silinməyin - daha sürətli doldurma.
Event-driven: CI/CD və ya admin hadisəsi webhook «invalidate tags» çağırır.
Tövsiyə: hər iki taktikanı birləşdirin: assetlər üçün yolların versiyası + məzmun/səhifələr üçün tag-purge.
Tiered-cache, origin-shield и prewarm
Tiered-cache: Regional CDN qatları → origin üçün daha az sorğu.
Origin-shield: origin üçün bir «qalxan» POP - lokallığı və hit-ratio yaxşılaşdırır.
Prewarm (pre-fetch): event/azad əvvəl isti URL/cache qızdırılması.
Negative-cache: origin fırtınası retraini doldurmamaq üçün qısa bir 5xx/Timeout (30-120 s) keşfedin.
API Cache: mümkün olduqda
Yalnız GET/HEAD və idempotent.
Açar: yol + əhəmiyyətli query (məsələn, '? category =... & page =...').
Validasiya: 'ETag '/' Last-Modified' və qısa 's-maxage'.
İstifadəçi filtrləri: Client/edge funksiyasını fərdiləşdirin və ya signed-requests + «ictimai» cavabdan istifadə edin.
Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"
Cache poisoning (cache poisoning)
URL/başlıqların sərt normallaşdırılması; ağ açar parametrləri siyahısı.
Şübhəli başlıqların/dublikatların kəsilməsi ('X-Forwarded-', genişləndirilmiş 'Accept').
«Vary» limiti və başlıqların ölçüsü/sayına nəzarət.
Domen ayrılması: xüsusi/admin - cache olmadan ayrıca adda.
Cavab təsdiqi: 4xx (statik üçün 404 istisna olmaqla), açıq siyasət olmadan «xüsusi» səhifələri önbelleğe almayın.
Sıxılma və formatlar
Brotli mətnlər üçün (js/css/json), gzip - fallback; əvvəlcədən sıxılmış assets icazə verilir.
Images: webp/avif harada dəstək; istifadə edin 'Vary: Accept' + törəmə.
Video/audio üçün Range-requests: CDN çanka caches.
Content-Negotiation: açarın aşağı kardinallığını saxlayın (xam UA əvəzinə device-class).
Müşahidə və SLO
Açar metriklər
Hit-ratio (by bytes/requests) на edge/tier/shield.
Regionlar və növlər üzrə p50/95/99 TTFB (statik/API).
Fill-rate/Origin egress - origin nə qədər gedir.
304 rate və orta cavab ölçüsü.
Error budget: pay 'stale-if-error '/' SWR' emissiya; purge tezliyi.
SLO nümunələri
'p95 TTFB' statik regional ≤ 120-150 ms, API GET cashable ≤ 200-250 ms.
Edge hit-ratio statik ≥ 90%, yarı dinamik ≥ 60%.
Səhvlər zamanı stale filialından cavabların payı ≤ 0. 30 gün ərzində 5%.
Şparqal
Nginx (CDN və ya öz-PoP-dən əvvəl reverse-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;
}
}
Envoy (SWR + negative-cache, konsepsiya)
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
«Sürətli» assetlər üçün hederlər
Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br
Yarı dinamika üçün hederlər (kataloqlar)
Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept
FinOps: Cache pula necə qənaət edir
Egress origin ↓, daha az CPU/DB-yük → aşağı infrastruktur xərcləri.
Ödənişli backends (search/index/images) üçün daha az sorğu.
Hədəf metrikası: $/azalma p95 və $/azalma egress 1 GB - başlanğıc sonrası təsiri izləyin.
iGaming/Fintech üçün xüsusiyyətlər
Provayder kataloqları/assets: version yolları + illik TTL.
Tədbirlərin/turnirlərin təqdimatı: 1-5 dəq 's-maxage' + 10-30 dəq 'SWR'; tag-purge yeniləmə zamanı.
Liv-səhifələr (əmsallar/cədvəllər): qismən JSON blokları, qısa TTL (5-30 s), fərdi bloklar üçün - müştəri renderi.
PSP/ödəniş end-point: cache deyil, ciddi 'no-store'; Yalnız məlumat kitabçalarını (BIN cədvəlləri, statuslar) cache edin.
Antibot: statik/GET caching, şübhəli ASN üçün «boz» marşrutlar; səs-küylü başlıqlarda 'Vary' icazə verməyin.
Giriş çek siyahısı
- Cache açarı təsvir edilmişdir: URL normallaşdırılması, icazə verilən query siyahısı, 'Vary' yalnız lazımi.
- Paylaşılan ictimai/şəxsi yollar; şəxsi - 'no-store' və bypass CDN.
- Məzmun növlərinə görə TTL pilləkənləri təqdim edilmişdir; 'SWR/if-error'.
- Xüsusi tiered-cache + origin-shield; negative-cache 5xx (qısa) daxildir.
- tag/URL purge, yumşaq purge var; CI/CD ilə inteqrasiya.
- Kompressiya (br/gzip), görüntü veb formatları və range cavabları daxil edilmişdir.
- Metriklər: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; uğursuzluqlar üçün alertlər.
- Playbook: pik əvvəl cache qızdırılması, təcili purge, origin deqradasiya.
Tipik səhvlər
Böyük TTL ilə heç bir versiyası assets → istifadəçilər arasında «yapışmış» bandlalar.
Həddindən artıq 'Vary' ('User-Agent' tərəfindən, bütün başlıqlar) → kardinallıq partlayışı və aşağı hit-ratio.
4xx/401/403/şəxsi məzmunu caching.
Yox negative-cache → çirkli origin üçün uçqun sorğular.
No tag-purge → kütləvi nöqtə purge və «fırtına» re-fill.
Cache açarı «səs-küylü» UTM/ref parametrləri daxildir.
Statik → CDN və origin əlavə yük üçün çox qısa TTL.
Mini playbuklar
1) Hadisədən əvvəl cache qızdırılması
1. Top-N URL yığımı → 2) Regionlar üzrə paralel prefetch (rate-limited) → 3) Hit-ratio ↑ və p95 ↓ yoxlama.
2) Təcili soft-purge katoloqlar
1. Göndərin 'PURGE '/tag-clear → 2) CDN stale verir və fon təzə çəkir → 3) origin heç bir tikan yoxlamaq.
3) origin imtina
1. 'stale-if-error' X saat kömək edir → 2) edge üzərində «texniki iş» banner daxil → 3) Bərpa üçün - hədəf warm-up.
Yekun
Güclü CDN strategiyası = düzgün cache açarı + SWR/if-error + idarə olunan əlillik + tiered/shield + müşahidə ilə mənalı TTL. Heeders və IaC siyasətini düzəldin, hit-ratio və p95 ölçün, zirvələrin altında istiləşməyi planlaşdırın - və istifadəçilər həmişə sürətli cavab alacaqlar və origin ən isti saatda da sağ qalacaq.