CDN-keshing և TTL օպտիմիզացիա
Live ռեզյումե
CDN-kash-ը օգտագործողի և origin-ի միջև «արագացուցիչ + վահան» է։ Այն լավ է աշխատում, երբ
1. Քեշի (cache key) ստեղնը չի պարունակում «աղմուկ»։
2. TTL քաղաքականությունը 's-maxage '/' max-age' + 'stale-wile-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 =
- TTL համար CDN/2019 համար (արգելափակում է «max-age»)։ - "stale-while-revalidate =
- տալիս ենք հնացած, միաժամանակ թարմացնում։ - "stale-if-error =
- տալիս ենք հնացած origin սխալի դեպքում։ - «immutable» - ռեսուրսը չի փոխվում (հարմար է տարբերակված ազդանշանների համար)։
- «ETag »/« Last-Modified» - պայմանները 304 համար, խնայում են բայթերը/CPU origin։
- «Vary» -ը քեշի բանալին ազդող վերնագրերի ցանկ է (օգտագործել զսպված)։
- «Surrogate-Corl» -ը Cache-Corl-ի «ընդլայնված» է CDN-ի համար (եթե աջակցվում է)։
- «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-2019 կարգը։
«Աղմուկի» անտեսումը '«utm _», «fbclid», «gclid», կամայական ռեփ-թեգեր։
Սահմանափակ Vary: Միայն իրական նշանակալի վերնագրեր («Accept-Encoding», երբեմն «Accept», «Accept-Language»)։
Device class: Եթե պետք է օգտագործեք 2-3 դասարաններ (mobile/desktop/tablet), ոչ թե անսահման user-agent ճյուղեր։
Auth-ենթատեքստը 'լռելյայն մի քշեք մասնավոր։ օգտագործեք signed-CORS/cookies-bypass կամ հանրային/մասնավոր ճանապարհների բաժանումը։
Fastly-ոճը (կեղծ)
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
TTL ռազմավարությունը բովանդակության տիպերի վերաբերյալ
Հաշմանդամության քաղաքականությունը
BY URL/Winfix: «Ծիծաղեք ամեն ինչ '/static/2025-11-2019/»։
By Express/Key: "նկարահանել ամբողջ" catalog "և" www.t: 123 "։
Softpurge 'նշեք որպես հնացած, մի լվացեք օբյեկտը' ավելի արագ կրկնվող լցոնումը։
Event-driven: CI/CD կամ admin-իրադարձությունը առաջացնում է webhook «dialidate tags»։
Առաջարկություն 'համատեղեք երկու մարտավարությունը' ասետների ուղիների տարբերակումը + 108-purge բովանդակության/էջերի համար։
Tiered-cache, origin-shield и prewarm
Tiered-cache: CDN-ի տարածաշրջանային շերտերը ավելի քիչ դիմում են origin-ին։
Origin-shield: մեկ «վահանաձև» POP-ը origin-ը բարելավում է տարածքը և hit-ratio-ը։
Systwarm (pre-fetch) 'տաքացնելով տաք URL/cash-ի առջև։
Negative-cache: Հակիրճ քերծեք 5xx/Timeout (30-120 s), որպեսզի չթափահարեք origin փոթորիկը։
Քեշ API 'Երբ կարող եք
Միայն GET/HEAD-ը և գաղափարական։
Բանալին 'ճանապարհը + նշանակալի query (օրինակ ՝ «? category =... & page =...»)։
Վալիդացիա ՝ "ETag "/" Last-Modified" և կարճ 's-maxage "։
Օգտագործողի ֆիլտրերը 'ներկայացրեք հաճախորդի/edge ֆունկցիայի վրա կամ օգտագործեք signed-reques.ru + «հանրային» պատասխանը։
Օրինակ (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» -ի սահմանափակումը և չափսի/kol-va վերնագրերի վերահսկումը։
Օրինագծերի բաժանումը 'մասնավոր/ադմինը' առանձին անունով առանց քեշի։
Պատասխանների վալիդացիան 'մի՛ քշեք 4xx-ը (բացառությամբ 404-ի ստատիկի համար), մի քշեք «օգտագործողի» էջերը առանց ակնհայտ քաղաքականության։
Սեղմումը և լուծումը
Brotli-ի համար տեքստային (js/css/json), gzip-fallback; @-@ սեղմված ազդանշանները թույլատրելի են։
Images: webp/avif որտեղ աջակցություն կա։ օգտագործեք 'Vary: Accept '+ ածանցյալներ։
Range-reques.ru տեսահոլովակի/աուդիո համար: CDN-ն քշում է չանկերը։
Content-Negotiation: պահեք ցածր կարդինալիտ բանալին (device-class հում UA)։
Դիտարկումը և SLO
Հիմնական մետրերը
Hit-ratio (by bytes/requests) на edge/tier/shield.
p50/95/99 TTFB տարածաշրջաններում և տեսակների (stick/API)։
Dell-rate/Origin egress-ը, որքա՞ ն է գնում origin։
304 rate և միջին չափսը։
Error budget: "stale-if-error "/" SWR '2019; purge հաճախականությունը։
SLO օրինակներ
«P95 TTFB» ստատիկները կանոնավոր կերպով կազմում են 120-150 մզ, API GET keshirures-200-250 ms։
Edge hit-ratio statio-ը 90 տոկոսն է, սեռական դինամիկան 60 տոկոսն է։
Stale-ճյուղի պատասխանների մասնաբաժինը 0-ի սխալների դեպքում։ Հինգ տոկոսը 30 օրվա ընթացքում։
Wing-shargalks
Nginx (reverse-proxy մինչև CDN կամ www.f-PoP)
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
Heders սեռի դինամիկայի համար (Alti)
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 GB-ով, հետևեք հետզհետե էֆեկտին։
Հատուկ iGaming/fintech համար
Մոսկվան և պրովայդերները/ասետները 'տարբերակված ճանապարհներ + տարվա TTL։
Իրադարձությունների լենդինգները/կիսագունդները ՝ 1-5 րոպե 's-maxage' + «SWR» 10-30 րոպե; 2019-purge նորարարության ժամանակ։
Live-էջեր (գործակիցներ/աղյուսակներ) 'JSON բլոկների մասնակի քեշը, կարճ TTL (5-30 s), անձնական բլոկների համար' հաճախորդի ռենդեր։
PMS/ստացիոնար էնդպոինտներ 'մի կեշիրու, խիստ «108-store»; տեղադրեք միայն տեղեկատուները (BIN աղյուսակներ, արձաններ)։
Անտիբոտ 'ստատիկի/GET, «մոխրագույն» երթուղիներ կասկածելի ASN-ի համար։ թույլ մի տվեք «Vary» աղմկոտ վերնագրերով։
Ներդրման թուղթ
- Քեշի բանալին 'URL-ի նորմալացում, թույլատրված query, «Vary» ցուցակը միայն ճիշտ է։
- Բաժանված են հանրային/մասնավոր ճանապարհները. մասնավոր '«108-store» և bypass CDN։
- Ներդրվել են TTL աստիճանները բովանդակության տեսակի։ տրամադրված է «SWR/if-error»։
- tiered-cache + origin-shield; ներառված է negative-cache 5xx (կարճ)։
- Կա 112/URPurge, sportpurge; ինտեգրումը CI/CD-ի հետ։
- Ներառում է թեմը (108/gzip), պատկերների վեբ կոդերը և range պատասխանները։
- Metriki: hit-ratio by layer, p95 TTFB, 304 rate, origin egress; ալտերտերը ձախողումների վրա։
- Pleybuki: տաքացնելով քեշը գագաթներից առաջ, շտապ purge, origin քայքայումը։
Տիպիկ սխալներ
Առանց տարբերակի, մեծ TTL-ի օգնականները օգտագործողների «կպչում» են։
Չափազանց «Vary» («User-Agent», բոլոր վերնագրերում) բացատրում է կարդինալության պայթյունը և ցածր hit-ratio։
4xh/401/403/մասնավոր բովանդակություն։
Negative-cache-ի բացակայությունը բացատրում է դեգրադային origin։
Ոչ 108-purge-ը զանգվածային կետային purge և «փոթորիկ» re-porl։
Քեշի բանալին ներառում է UTM/ref պարամետրեր։
Շատ կարճ TTL-ը ստատիկայի համար ավելցուկ է CDN-ի և origin-ի վրա։
Մինի պլեյբուկները
1) Նախքան իրադարձությունը կեշը տաքացնելը
1. Լավագույն N URRL-ի հավաքումը թիվ 2 լոգարիթմների վրա) Զուգահեռ efetch (rate-limited) 393 տարածաշրջաններում) Hit-ratio-ratio-ը և p95 ռուբլիները։
2) Շտապ soft-purge կատոլոգներին
1. Ուղարկել 'PURGE '/www.clear No. 2) CDN-ն տալիս է stale և ֆոնը ձգում է թարմ 353) Ստուգել չիպերի բացակայությունը origin-ում։
3) Origin մերժումը
1. 'stale-if-error "X ժամ 242) Միացրեք" տեխնիկայի "դրոշը edge 363-ի վրա) վերականգնելու համար' wwarm-up։
Արդյունքը
Ուժեղ CDN ռազմավարություն = ճիշտ քեշի բանալին + մտածված TTL-ի հետ SWR/if-error + կառավարվող հաշմանդամություն + tiered/shield + դիտարկումը։ Ամրագրեք քաղաքականությունը գլուխներում և IaC-ում, չափեք hit-ratio և p95-ը, պլանավորեք մեղմել պիկի տակ, և օգտագործողները միշտ արագ պատասխան կստանան, իսկ origin-ը կենդանի կմնա նույնիսկ ամենաթեժ ժամում։