GH GambleHub

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

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

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

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

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

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

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