CDN keshlash va TTL optimallashtirish
Qisqacha xulosa
CDN kesh - bu foydalanuvchi va origin orasidagi «tezlatgich + qalqon». Agar:1. Kesh kaliti (cache key) barqaror va «shovqin» mavjud emas.
2. TTL-siyosat yuk ostida:’s-maxage ’/’ max-age’+’stale-while-revalidate/if-error’.
3. Nogironlik: teglar/prefikslar + «yumshoq» purge bo’yicha boshqariladi.
4. tiered-cache/origin-shield va negative-cache yoqilgan.
5. Kuzatish mavjud: qatlamlar bo’yicha hit-ratio, p95 TTFB, qaytarish ulushi 304.
Asosiy xederlar va ular nimani anglatadi
`Cache-Control`:- ’max-age =
’ - brauzer uchun TTL. - ’s-maxage =
’ - CDN/proxy uchun TTL (’max-age’ni qoplaydi). - ’stale-while-revalidate =
’ - eskirganini beramiz, shu bilan birga yangilaymiz. - ’stale-if-error =
’ - xato roʻy berganda eskirgan originni beramiz. - ’immutable’ - resurs o’zgarmaydi (versiya qilingan assetalar uchun mos keladi).
- ’ETag ’/’ Last-Modified’ - 304 uchun shartlar, bit/CPU origin tejash.
- ’Vary’ - kesh kalitiga taʼsir qiluvchi sarlavhalar roʻyxati.
- ’Surrogate-Control’ - CDN uchun «kengaytirilgan» Cache-Control.
- ’Expires’ eskirgan, ammo mijozlar tomonidan hisobga olinadi.
Cache-Control: public, max-age=31536000, immutable
Misol (xavfsiz eskirgan yarim dinamika):
Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."
Kesh kaliti: dizayn va normallashtirish
Maqsad - bir xil so’rovlarni bir xil ob’ektga tushirishdir.
URLni normallashtirish: registr, qoʻshaloq slashlar, treyling-slashlar, query-parametrlar tartibi.
Shovqin ignori:’utm _’,’fbclid’,’gclid’, ixtiyoriy ref-teglar.
Cheklangan Vary: faqat haqiqiy mantiqiy sarlavhalar (’Accept-Encoding’, ba’zan’Accept’,’Accept-Language’lokal uchun).
Device-class: agar kerak boʻlsa, cheksiz user-agent filiallarini emas, balki 2-3-sinflarni (mobile/desktop/tablet) ishlating.
Auth konteksti: andoza ravishda shaxsiy kontekstni keshlamang; signed-URLs/cookies-bypass yoki ommaviy/shaxsiy yoʻllarni ajratishdan foydalaning.
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
Kontent turlari bo’yicha TTL-strategiyalar
Nogironlik siyosati
By URL/Prefix: «hammasini ’/static/2025-11-05/’ ostida siljiting».
By Tag/Key: «butun’catalog’va’product: 123’ni olib tashlash».
Yumshoq purge: eskirgan deb belgilash, obʼektni oʻchirmaslik - qayta toʻldirish tezroq.
Event-driven: CI/CD yoki ma’muriy hodisa webhook’invalidate tags’ga olib keladi.
Maslahat: ikkala taktikani birlashtiring: assetalar uchun yo’llarni + kontent/sahifalar uchun tag-purge.
Tiered-cache, origin-shield и prewarm
Tiered-cache: CDN → hududiy qatlamlari origin soʻrovlaridan kamroq.
Origin-shield: bitta «qalqon» POP origin - lokalizm va hit-ratio yaxshilaydi.
Prewarm (pre-fetch): issiq URL/keschni ivent/reliz oldidan isitish.
Negative-cache: retray bo’roni originni to’ldirmaslik uchun qisqa vaqt ichida 5xx/Timeout keshlang (30-120 s).
API kesh: qachon mumkin
Faqat GET/HEAD va idempotent.
Kalit: yoʻl + muhim query (masalan,’? category =... & page =...’).
Validatsiya:’ETag ’/’ Last-Modified’va qisqa’s-maxage’.
Foydalanuvchi filtrlari: mijoz/edge funksiyasiga shaxsiylashtiring yoki signed-requests + «ommaviy» javobdan foydalaning.
Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"
Kesh zaharlanishidan himoya qilish (cache poisoning)
URL/sarlavhalarni qattiq normallashtirish; kalitdagi parametrlarning oq roʻyxati.
Shubhali sarlavhalar/dublikatlarni kesish (’X-Forwarded-’, kengaytirilgan’Accept’).
«Vari» ni cheklash va sarlavhalar sonini/sonini nazorat qilish.
Domenlarni ajratish: shaxsiy/admin - keshsiz alohida nomda.
Javoblarni tasdiqlash: 4xx ni keshlamang (statik uchun 404 dan tashqari), aniq siyosatsiz «foydalanuvchi» sahifalarini keshlamang.
Siqish va formatlar
Brotli (js/css/json), gzip - fallback; oldindan siqilgan assetalar mumkin.
Images: webp/avif qo’llab-quvvatlash joyida; ’Vary: Accept’ + hosilali derivativlardan foydalaning.
Video/audio uchun Range-requests: CDN chiplarni kesh qiladi.
Content-Negotiation: kalitning past kardinalligini saqlang (xom UA oʻrniga device-class).
Kuzatish darajasi va SLO
Asosiy metriklar
Hit-ratio (by bytes/requests) на edge/tier/shield.
hududlar va turlar bo’yicha p50/95/99 TTFB (statik/API).
Fill-rate/Origin egress - origin qancha sarflaydi.
304 rate va o’rtacha javob miqdori.
Error budget: ulushi’stale-if-error ’/’ SWR’berilishi; purge chastotasi.
SLO namunalari
’p95 TTFB’ statikasi hududiy ≤ 120-150 ms, GET keshlanayotgan API ≤ 200-250 ms.
Edge hit-ratio statika ≥ 90%, yarim dinamika ≥ 60%.
Xatolarda stale-filialdan javoblar ulushi ≤ 0. 30 kun ichida 5%.
-shpargalkalar
Nginx (CDN oldidan yoki self-PoP ga 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, konsept)
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
«Tezkor» assetalar uchun xedyerlar
Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br
Yarim dinamika uchun xederlar (kataloglar)
Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept
FinOps: kesh pulni qanday tejaydi
Egress origin ↓, kam CPU/DB-yuk → past infratuzilma xarajatlari.
Pullik orqa tomonlar (search/index/images) uchun kamroq soʻrov.
Maqsadli metrika: $/p95 pasayishi va $/egress 1 GB pasayishi - ishga tushirishdan keyingi effektni kuzating.
iGaming/fintech uchun o’ziga xos
Provayderlar/assetalar kataloglari: versionlangan yo’llar + yillik TTL.
Tadbirlar/turnirlar lendinglari: 1-5 daqiqa’s-maxage’+’SWR’ga 10-30 daqiqa; yangilanishda tag-purge.
Liv-sahifalar (koeffitsiyentlar/jadvallar): JSON-bloklarning qisman keshi, qisqa TTL (5-30 s), shaxsiy bloklar uchun - mijoz renderi.
PSP/to’lov endpointlari: keshlamaymiz, qat’iy’no-store’; Faqat maʼlumotnomalarni (BIN jadvallari, holatlar) keshlab oling.
Antibot: statik/GET keshlash, shubhali ASN uchun «kulrang» yo’nalishlar; shovqinli sarlavhalar bo’yicha’Vary’ga yo’l qo’ymang.
Joriy etish chek-varaqasi
- Kesh kaliti tasvirlangan: URLni normallashtirish, ruxsat etilgan query roʻyxati,’Vary’faqat kerakli.
- Ommaviy/shaxsiy yo’llar ajratilgan; xususiy -’no-store’va bypass CDN.
- Kontent turlari bo’yicha TTL-zinapoyalar joriy etildi; ’SWR/if-error’ moslamalari.
- Tiered-cache + origin-shield moslashtirilgan; negative-cache 5xx (qisqa) yoqilgan.
- tag/URL purge, yumshoq purge mavjud; CI/CD bilan integratsiya.
- Kompresssiya (br/gzip), veb-rasm formatlari va range javoblar yoqilgan.
- Metriklar: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; muvaffaqiyatsizliklar uchun alertlar.
- Pleybuklar: cho’qqilar oldidan keshni isitish, shoshilinch purge, origin degradatsiyasi.
Tipik xatolar
Foydalanuvchilar orasida katta TTL → «yopishgan» bandlali assetalar versiyasiz.
Haddan tashqari’Vary’(’User-Agent’bo’yicha) → kardinallik portlashi va past hit-ratio.
4xx/401/403/shaxsiy kontentni keshlash.
Negative-cache → Degrading origin soʻrovlari koʻchkisi.
tag-purge → ommaviy nuqtali purge va «boʻron» re-fill yoʻq.
Kesh kalitiga «shovqinli» UTM/ref parametrlari kiradi.
Statika uchun TTL juda qisqa → CDN va origin uchun ortiqcha yuk.
Mini-pleybuklar
1) Voqea oldidan keshni isitish
1. Top-N URL yig’ish → 2) Mintaqalar bo’yicha parallel prefetch (rate-limited) → 3) Tekshirish hit-ratio ↑ va p95 ↓.
2) Shoshilinch soft-purge katologlari
1. Jo’natish’PURGE ’/tag-clear → 2) CDN stale beradi va fon yangilarini tortadi → 3) Origin’da tikanlar yo’qligini tekshirish.
3) Rad etish origin
1.’stale-if-error’X soatiga yordam beradi → 2) «texnik ishlar» bannerini edge → 3 da yoqish) Qayta tiklash bo’yicha - maqsadli warm-up.
Jami
Kuchli CDN strategiyasi = toʻgʻri kesh kaliti + SWR/if-error bilan mazmunli TTL + boshqariladigan nogironlik + tiered/shield + kuzatish. Siyosatni heeder va IaC bilan o’rnating, hit-ratio va p95 o’lchang, cho’qqilarni isitishni rejalashtiring - va foydalanuvchilar doimo tezkor javob olishadi va origin eng issiq soatlarda ham tirik qoladi.