Logo GH

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' - ресурс өзгермейді (нұсқаланған ассеттер үшін жарамды).
  • 'ETag '/' Last-Modified' - 304 үшін шарттар, байттарды/CPU origin үнемдейді.
  • 'Vary' - кэш кілтіне әсер ететін тақырыптар тізімі.
  • 'Surrogate-Control' - CDN үшін «кеңейтілген» 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-параметрлер тәртібі.
«Шу» белгісі: 'utm _', 'fbclid', 'gclid', ерікті реф-тегтер.
Шектеулі Vary: тек нақты мәнді тақырыптар ('Accept-Encoding', кейде 'Accept', 'Accept-Language' жергілікті үшін).
Device-class: қажет болса, шексіз user-agent тармақтарын емес, 2-3 сыныпты (mobile/desktop/tablet) пайдаланыңыз.
Auth-контекст: әдепкі бойынша жекеменшікті кешіктірмеңіз; signed-URLs/cookies-bypass немесе жария/жеке жолдарды бөлуді пайдаланыңыз.

Fastly-стиль (псевдо):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

Мазмұн түрлері бойынша TTL-стратегиялар

ТүріTTL CDN (`s-maxage`)Шолғыш ('max-age')Қосымша
Нұсқаланған ассеттер ('/app. a1b2. js`)1 жыл1 жыл`immutable`; мүгедектіктің қажеті жоқ
Каталогтар/лендингтер1-10 мин30-120 с`stale-while-revalidate=10–30 мин`
Кескіндер (ресайзерлер)10-60 мин5-15 минVary по `Accept` (webp/avif)
GET API (кэштелетін)10-120 с0-30 сТек демпотентті; 'stale-if-error' 5-60 мин
500/timeout қателері00Negative-cache 30-120 с (CDN деңгейінде), кэшемеу 401/403/POST

Мүгедектік саясаты

By URL/Prefix: «бәрін '/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: бір «қалқанды» POP к origin - жергілікті және hit-ratio жақсартады.
Prewarm (pre-fetch): ивент/релиз алдында ыстық URL/кэштерді жылыту.
Negative-cache: 5xx/Timeout (30-120 с) қысқа уақыт кешіктіріңіз.

API кэші: мүмкін болғанда

Тек GET/HEAD және демпотентті.
Кілт: жол + маңызды query (мысалы, '? category =... & page =...').
Валидация: 'ETag '/' Last-Modified' және қысқа 's-maxage'.
Пайдаланушы сүзгілері: клиентке/edge функциясына дербестендіруді енгізіңіз немесе signed-requests + «көпшілік» жауабын пайдаланыңыз.

Мысал (API, 30 с + SWR):

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; Алдын ала қысылған ассеттер жарамды.
Images: webp/avif қолдау көрсетілетін жерде; 'Vary: Accept' + туынды деривативтерін пайдаланыңыз.
Видео/аудио үшін Range-requests: CDN күбілерді кэштейді.
Content-Negotiation: кілттің төменгі кардиналдылығын сақтаңыз (шикі UA орнына device-class).

Бақылау және 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 мс. API GET кешенделетін ≤ 200-250 мс.
Edge hit-ratio статикасы ≥ 90%, жартылай динамикасы ≥ 60%.
Қателер кезінде stale-тармақтан жауаптар үлесі ≤ 0. 30 күнде 5%.

Шпаргалка

Nginx (CDN алдында немесе self-PoP-де 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, тұжырымдама)

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

«Жылдам» ассеталарға арналған хедерлер


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-жүктеме → төмен инфрақұрылымдық шығыстар.
Ақылы бэкендтерге дейін аз сұраулар (search/index/images).
Мақсатты метрика: $/p95 төмендеуі және $/egress 1 ГБ төмендеуі - іске қосылғаннан кейінгі әсерді қадағалаңыз.

iGaming/финтех ерекшелігі

Провайдерлер каталогтары/ассеттер: нұсқаланған жолдар + жылдық TTL.
Оқиғалар/турнирлер лендингі: 1-5 мин 's-maxage' + 'SWR' 10-30 мин; tag-purge жаңартылғанда.
Лив-беттер (коэффициенттер/кестелер): JSON-блоктардың ішінара кэші, қысқа TTL (5-30 с), дербес блоктар үшін - клиенттік рендер.
PSP/төлем эндпоинттері: кешірмейміз, қатаң 'no-store'; тек анықтамалықтарды кэштеңіз (BIN-кестелер, мәртебелер).
Антибот: статиктерді/GET кэштеу, күдікті ASN үшін «сұр» маршруттар; 'Vary' дегенді шулы тақырыптарда жібермеңіз.

Енгізу чек-парағы

  • Кэш кілті сипатталған: URL қалыпқа келтіру, рұқсат етілген query тізімі, 'Vary' тек қажетті бойынша.
  • Жария/жекеше жолдар бөлінген; жеке меншік - 'no-store' және bypass CDN.
  • Мазмұн түрлері бойынша TTL-баспалдақтар енгізілді; 'SWR/if-error' баптаған.
  • tiered-cache + origin-shield баптаулары; қосылған negative-cache 5xx (қысқа).
  • tag/URL purge, soft purge бар; CI/CD біріктіру.
  • Компрессия (br/gzip), веб-кескін пішімдері және range жауаптар қосылды.
  • Өлшемдер: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; құлдырау қаупі.
  • Ойнатқыштар: шыңдар алдында кэшті жылыту, шұғыл purge, origin деградациясы.

Типтік қателер

Пайдаланушыларда үлкен TTL → «жабысқақ» бандласы бар нұсқасыз ассеттер.
Шамадан тыс 'Vary' ('User-Agent', барлық тақырыптар бойынша) → түбегейлі жарылыс және төмен hit-ratio.
4хх/401/403/жеке мазмұнды кэштеу.
negative-cache → тозған origin сұрауларының болмауы.
tag-purge → жаппай нүктелік purge және «шторм» re-fill жоқ.
Кэш кілті «шулы» UTM/реф параметрлерін қамтиды.
Статика үшін тым қысқа TTL → CDN және origin артық жүктеме.

Шағын ойнатқыштар

1) Оқиға алдында кэшті жылыту

1. Топ-N URL жинағы → 2) Өңірлер бойынша параллель prefetch (rate-limited) → 3) Тексеру hit-ratio ↑ және p95 ↓.

2) Шұғыл soft-purge катологтар

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. Хедерлер мен IaC саясатын белгілеңіз, hit-ratio мен p95 өлшеңіз, шыңға жылынуды жоспарлаңыз - және пайдаланушылар әрқашан жылдам жауап алады, ал origin ең ыстық сағатта да тірі қалады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.