CDN кэш жана TTL оптималдаштыруу
Кыскача резюме
CDN кэш - бул колдонуучу менен origin ортосундагы "ылдамдаткыч + калкан". Ал жакшы иштейт, качан:1. Кэш ачкычы (cache key) туруктуу жана "ызы-чуу" жок.
2. TTL-жүктөө саясаты: 's-maxage '/' max-age' + 'stale-while-revalidate/if-error'.
3. майыптыгы башкарылат: тегдер/префикстер + "жумшак" purge.
4. tiered-cache/origin-shield жана negative-cache кирет.
5. Байкоо бар: катмарларда hit-ratio, p95 TTFB, кайтаруу үлүшү 304.
Негизги хедерлер жана алар эмнени билдирет
`Cache-Control`:- 'max-age =
' - Браузер үчүн TTL. - 's-maxage =
' - CDN/прокси үчүн TTL ('max-age' менен жабылат). - 'stale-while-revalidate =
' - эскиргенин беребиз, ошону менен бирге жаңылайбыз. - 'stale-if-error =
' - эскирген origin катасын беребиз. - 'immutable' - ресурс өзгөрбөйт (версияланган assets үчүн ылайыктуу).
- 'ETag '/' Last-Modified' - 304 үчүн шарттар, байттарды/CPU origin үнөмдөө.
- 'Vary' - кэш ачкычына таасир этүүчү аталыштардын тизмеси (токтоо колдонуу!).
- 'Surrogate-Control' - CDN үчүн "Advanced" Cache-Control (колдосо).
- 'Expires' - эскирген, бирок дагы эле кардарлар тарабынан эске алынат.
Cache-Control: public, max-age=31536000, immutable
Мисал (коопсуз эскирүү менен жарым-динамикасы):
Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."
Кэш ачкычы: дизайн жана нормалдаштыруу
Максаты - суроо-талаптардын бир эле объектке түшүүсү.
URL нормалдаштыруу: каттоо, кош слэштер, трейлинг слэш, query параметрлери тартиби.
Ignor "ызы-чуу": 'utm _', 'fbclid', 'gclid', өзүм билемдик ref теги.
Чектелген Vary: гана реалдуу мааниге ээ аталыштар ('Accept-Encoding', кээде 'Accept', 'Accept-Language' жергиликтүү үчүн).
Device-class: керек болсо, чексиз user-агент бутактарын эмес, 2-3 классты (mobile/desktop/tablet) колдонуңуз.
Auth-контекст: демейки жеке кэш жок; колдонуңуз signed-URLs/cookies-bypass же коомдук/жеке жолдорду бөлүштүрүү.
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
Контент түрлөрү боюнча TTL стратегиялары
Майыптык саясаты
By URL/Префикс: "Баарын ылдый жылдыруу '/static/2025-11-05/'".
By Tag/Key: "бүт 'catalog' жана 'product: 123' алып салуу".
Soft purge: эскирген катары белгилөө, объектти жууп жок - тез кайра толтуруу.
Event-driven: CI/CD же админ-окуя webhook чакырат "invalidate tags".
Сунуш: эки тактикасын бириктирип: ассеталар үчүн жолдорду версиялоо + мазмун/барактар үчүн tag-purge.
Tiered-cache, origin-shield и prewarm
Tiered-cache: Аймактык CDN катмарларын → origin үчүн аз суроо.
Origin-shield: origin бир "калкан" POP - жергиликтүү жана hit-ratio жакшыртат.
Prewarm (pre-fetch): ысык URL/кэш event/релиз алдында жылытуу.
Negative-cache: кыска убакыт 5xx/Timeout кэш (30-120 с) оригиналдуу бороон-чапкын retrains толуп калбашы үчүн.
API кэш: качан мүмкүн
Гана GET/HEAD жана idempotent.
Ачкыч: жол + маанилүү query (мисалы, '? category =... & page =...').
Валидация: 'ETag '/' Last-Modified' жана кыска 's-maxage'.
Колдонуучу чыпкалары: кардарга/edge функциясына жекелештирүүнү алып келиңиз же signed-requests + "коомдук" жоопту колдонуңуз.
Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"
Уу кэш коргоо (cache poisoning)
URL/аталыштарды катуу нормалдаштыруу; ачкычтагы параметрлердин ак тизмеси.
Шектүү аталыштарды/дубликаттарды кыркуу ('X-Forwarded-', кеңейтилген 'Accept').
Чектөө 'Vary' жана контролдоо көлөмү/саны аталыштары.
Домендерди бөлүштүрүү: жеке/админ - кэшсиз өзүнчө аталышта.
Жоопторду тастыктоо: 4xx кэш жок (статиктер үчүн 404 башка), ачык саясат жок "колдонуучу" барактарды кэш жок.
Кысуу жана форматтар
текст үчүн Brotli (js/css/json), gzip - fallback; алдын ала кысылган assets жол берилет.
Images: колдоо бар webp/avif; колдонуңуз 'Vary: Accept' + туунду туундулары.
Видео/аудио үчүн Range-requests: CDN чанктарды кэш.
Content-Negotiation: ачкычтын төмөн кардиналдуулугун сактоо (чийки UA ордуна device-класс).
Байкоо жана SLO
Негизги метриктер
Hit-ratio (by bytes/requests) на edge/tier/shield.
p50/95/99 региондор жана түрлөрү боюнча TTFB (статикалык/API).
Fill-rate/Origin egress - канча origin барат.
304 rate жана жооп орточо өлчөмү.
Error budget: үлүшү 'stale-if-error '/' SWR' эмиссиясы; purge жыштыгы.
SLO мисалдар
'p95 TTFB' статика аймактык ≤ 120-150 ms, API GET кэш ≤ 200-250 ms.
Edge hit-ratio статика ≥ 90%, жарым-динамиктер ≥ 60%.
ката stale-бутагынын жооп үлүшү ≤ 0. 5% 30 күндүн ичинде.
Шпаргалка
Nginx (CDN же өзүн-өзү PoP алдында reverse-прокси)
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, түшүнүк)
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
"тез" Assets үчүн Heders
Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br
Жарым динамика үчүн хедерлер (каталогдор)
Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept
FinOps: кэш акчаны үнөмдөйт
Egress origin ↓, аз CPU/DB-жүгү → төмөн инфраструктуралык чыгымдар.
Акы төлөнүүчү Backends (search/index/images) чейин азыраак суроо.
Максаттуу метрика: $/p95 төмөндөшү жана $/egress төмөндөшү 1 ГБ - пост-башталгыч эффектке көз салуу.
iGaming/Fintech үчүн өзгөчөлүктөрү
Провайдерлердин каталогдору/assets: версияланган жолдор + жылдык TTL.
Иш-чаралардын/турнирлердин мөөнөтү: 1-5 мин 's-maxage' + 'SWR' 10-30 мин; тактоо-purge.
Liv-беттер (коэффициенттер/таблицалар): JSON-блоктордун жарым-жартылай кэши, кыска TTL (5-30 с), жеке блоктор үчүн - кардар рендер.
PSP/төлөм EndPoint: кэш жок, катуу 'no-store'; каталогдорду гана кэш (BIN-таблицалар, статустар).
Antibot: статикалык кэш/GET, шектүү ASN үчүн "боз" маршруттар; ызы-чуу аталыштары боюнча 'Vary' жол бербөө.
Киргизүү чек-тизмеси
- Кэш ачкычы сүрөттөлгөн: URL нормалдаштыруу, query уруксат тизмеси, 'Vary' гана туура.
- Коомдук/жеке жолдор бөлүнгөн; жеке менчик - 'no-store' жана bypass CDN.
- мазмун түрлөрү боюнча TTL тепкичтер киргизилген; 'SWR/if-error' орнотулган.
- орнотулган tiered-cache + origin-shield; negative-cache 5xx (кыска) кирет.
- tag/URL purge, жумшак purge бар; CI/CD менен интеграция.
- Компрессия киргизилген (br/gzip), сүрөттөр жана range жооптор веб-формат.
- Метрика: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; ийгиликсиз Алерта.
- Playbook: жогорку чейин кэш жылытуу, шашылыш purge, origin деградация.
Типтүү каталар
Жок-Version Assets менен чоң TTL → "жабышып" Бандл колдонуучулар.
Ашыкча 'Vary' ('User-Agent' боюнча, бардык аталыштар) → кардиналдуулуктун жарылуусу жана төмөн hit-ratio.
4xx/401/403/жеке мазмунду кэшдоо.
Жок negative-cache → көчкү өтүнүчтөр деградация origin.
No tag-purge → массалык чекит purge жана "бороон" re-fill.
Кэш ачкычы "ызы-чуу" UTM/ref параметрлерин камтыйт.
Статика үчүн өтө кыска TTL → CDN жана origin боюнча ашыкча жүк.
Mini Playbook
1) окуя алдында кэш жылытуу
1. Top-N URL жыйноо → 2) Региондор боюнча параллелдүү prefetch (rate-limited) → 3) Текшерүү hit-ratio ↑ жана p95 ↓.
2) Өзгөчө soft-purge catologists
1. Жөнөтүү 'PURGE '/tag-clear → 2) CDN stale берет жана жаңы тартат фон → 3) origin боюнча тикенектердин жоктугун текшерүү.
3) баш origin
1. 'stale-if-error' куткарат X саат → 2) кошуу баннер "техникалык иш" боюнча edge → 3) калыбына келтирүү боюнча - максаттуу warm-up.
Жыйынтык
Күчтүү CDN стратегиясы = туура кэш ачкычы + SWR/if-error + башкарылуучу майыптык + tiered/shield + байкоо менен маанилүү TTL. Headers жана IaC саясатын чечүү, hit-ratio жана p95 өлчөө, чокулары боюнча жылытуу пландаштыруу - жана колдонуучулар ар дайым тез жооп алышат, ал эми origin да ысык саатта тирүү калат.