GH GambleHub

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 ռազմավարությունը բովանդակության տիպերի վերաբերյալ

ՏեսակըTTL CDN (`s-maxage`)Զննարկիչ («max-age»)Ավելին
Տարբերակված ազդանշաններ ('/app. a1b2. js`)1 տարի1 տարի`immutable`; հաշմանդամություն չունի
Aleksandi/lendings1-10 րոպե30-120 s`stale-while-revalidate=10–30 мин`
Նկարներ (resaise)10-60 րոպե5-15 րոպեVary по `Accept` (webp/avif)
API GET (քշված)10-120 s0-30 sՄիայն idempotent; «stale-if-error» 5-60 րոպե
Սխալներ 500/timeout00Negative-cache 30-120 s (CDN մակարդակում), 401/403/POST

Հաշմանդամության քաղաքականությունը

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-ը կենդանի կմնա նույնիսկ ամենաթեժ ժամում։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։