CDN және edge кэштеу
CDN және edge кэштеу
1) Мақсаттар
CDN (Content Delivery Network) жасырындылықты және origin жүктемесін төмендетеді: edge-тораптардағы статикалық және шартты динамикалық контентті кэштейді, масштабты, орнықтылықты және қауіпсіздікті қамтамасыз етеді (DDoS/WAF), edge-логиканы қосады (жауаптарды/сұрауларды қайта жазу, аутентификация, A/B).
2) Кэштеу моделі және кілттер
Ключ кеша = `scheme + host + path +?(selected query params) + headers (Vary)`
Мыналар ұсынылады:- query ('utm _' алынып тасталсын, 'v', 'lang', 'country' және т.б.) қалыпқа келтірілсін.
- 'Vary' дегенді азайтыңыз (мысалы, 'Vary: Accept-Encoding, Accept-Language'), 'Vary:' дегеннен аулақ болыңыз.
- API үшін - маршруттан кілт + нұсқа идентификаторы (semver, hash, build id) + қажетті query/headers (мысалы, 'X-Tenant').
- Дербестендірілген беттер үшін - edge-сегментация (cookie/гео бойынша) немесе Skip-Cache.
3) TTL саясаты және тақырыптар
Негізгі тақырыптар:- `Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=60, stale-if-error=300`
- 'Surrogate-Control' (егер қолдау көрсетілсе) - CDN үшін шолғыштан ерекшеленетін жеке саясат.
- 'ETag '/' Last-Modified' - шартты сұрау салулар (304) және трафикті үнемдеу.
- Жекелік үшін: 'Cache-Control: private, no-store', егер кэштеу мүмкін болмаса.
- Кэшке рұқсат беретін API: 'Cache-Control: public, s-maxage = 60' + нұсқасы бойынша кілт.
Ұсынылған тәсіл: «мәңгілік» ресурстар (файл атауындағы fingerprint) → 'max-age = 31536000, immutable'; «беттер/JSON» → қысқа TTL + SWR.
4) Мүгедектігі: purge/soft-purge
Purge by URL: нүктелі.
Purge by tag/key: топтық тазалау ('Surrogate-Key: products: 42 category: food' пайдаланыңыз).
Soft-purge: мазмұнды «ескірген» деп белгілейді, жаңа нұсқаны алғанға дейін edge stale береді.
«Жылы» жылыту: деплойдан кейін өңірлерден негізгі беттерді алыңыз.
5) Edge-өнімділік үлгілері
Stale-While-Revalidate: жылдам жауап «ескірген» көшірме + өңдік жаңарту.
Сындарлы ресурстардың prefetch (preload, preconnect, dns-prefetch).
Compression: gzip/br (мәтіндік), егер CDN қолданатын болса zstd.
HTTP/2/3 (QUIC): мультиплексиялау және аз жасырындылық.
TLS session resumption және OCSP stapling периметрінде.
6) Суреттер мен бейнелер
Image optimization at edge: resize/format negotiation (`Accept: image/avif,webp`), авто-WebP/AVIF, DPR-варианты.
Lazy-load и responsive (`srcset`, `sizes`).
Видео: HLS/DASH, fragmented MP4, origin-shield (орталық кэш) «дауылды» төмендету үшін.
Thumbnail қызметтері және жеке суреттер үшін URLs белгісі.
7) Периметр қауіпсіздігі
WAF: OWASP ережелері, елдерді бұғаттау/ASN, кілті бар rate-limits (IP + cookie + token).
DDoS: L3/4 scrubbing, L7-чекерлер, JS-челлендждер/turnstile.
Қол қойылған URL/cookies (бейне/есептер): TTL + HMAC/EdDSA.
Geo-fencing және комплаенс (мысалы, өңірлерге тыйым салу).
8) Edge-compute (шетіндегі логика)
Кейстер:- Кэш үзіліссіз дербестендіру: сегменттер (A/B), гео, тіл edge, ал контент - кэштеу.
- Жауаптарды/тақырыптарды қайта жазу, редакциялар, AB-сплиттер.
- Токендік аутентификация: JWT қолтаңбасын тексеру, кілтті байланыстыру.
- Canary бойынша cookie/percent: трафиктің бір бөлігі - жаңа backend.
Технология мысалдары: Cloudflare Workers/Durable Objects, Fastly Compute @Edge, AWS Lambda @Edge.
9) Multi-CDN және жаһандық периметр
Себептері: жабу, SLA, құны, өңірлік шектеулер, инциденттерді оқшаулау.
GSLB/Traffic Steering: гео/latency/нақты қателер бойынша; бірнеше vantage-нүктелерден health-checks.
Бірыңғай кілт/тақырып схемасы (Surrogate-Key), үндестірілген purge ережелері.
Origin-shield барлық CDN үшін ортақ, мүгедектік кезінде origin «соққыламау» үшін.
10) Логика және метрика
Жинаңыз:- Hit ratio (cache, CDN → edge/origin), byte hit ratio.
- Latency p50/p95/p99, error-rate код/бағыт бойынша.
- Origin fetches: RPS/байт/қателер (артық қателіктерден қорғау).
- Аймақтық графиктер (POP/ASN/ел бойынша).
- Observability: Prometheus (экспорттаушылар арқылы pull), Grafana/OTel (edge-логдардан push) қосыңыз.
11) SEO и SPA/SSR
SWR және қысқа TTL бар SEO беттері - жылдам және «жаңа».
Sitemap/robots - ұзақ кэштейміз, бірақ soft-purge рұқсат.
Service Worker: оффлайн кэширлеу, сыни жолдардың prefetch, мақсатты жаңартулар.
12) Конфигурациялар мен тақырыптардың үлгілері
12. 1 Cache-Control профильдері
fingerprint статикасы:
Cache-Control: public, max-age=31536000, immutable
HTML/SSR:
Cache-Control: public, max-age=60, s-maxage=600, stale-while-revalidate=60, stale-if-error=600
Surrogate-Control: max-age=600, stale-while-revalidate=120
API (кэштелетін сөре):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (origin) - query/headers қалыпқа келтіру
nginx map $arg_utm_source $utm_skip { default 1; "" 0; }
map $args $normalized_args {
default "";
"~(^ &)v=([a-z0-9]+)(& $)" "v=$2";
}
proxy_cache_key "$scheme://$host$request_uri?$normalized_args";
add_header Surrogate-Key "product:{{id}} category:{{cat}}";
12. 3 Fastly VCL - soft-purge және кілттер
vcl sub vcl_recv {
set req. hash += req. http. host req. url. path;
set req. hash += querystring. decode(req. url, "v,lang");
if (req. method == "PURGE") {
if (req. http. Fastly-Soft-Purge) { softpurge; } else { purge; }
return (synth(200, "purged"));
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "product:42 category:food";
}
12. 4 Cloudflare Workers - қол қойылған URL
js export default {
async fetch(req, env) {
const url = new URL(req. url);
if (url. pathname. startsWith("/private/")) {
const token = url. searchParams. get("token");
if (!token! verify(token, env. SIGNING_KEY)) return new Response("Forbidden", { status: 403 });
}
return fetch(req);
}
}
12. 5 Lambda @Edge - гео-нұсқалар
js exports. handler = async (event) => {
const req = event. Records[0].cf. request;
const country = req. headers['cloudfront-viewer-country']?.[0]?.value 'US';
if (country === 'DE') req. headers['accept-language'] = [{ key:'Accept-Language', value:'de' }];
return req;
};
13) Жеке деректер және API
Құпия жауаптарды кілтті оқшауламай ешқашан кэштемеңіз (per-пайдаланушы/per-токен).
Signed Cookies/Headers және 'Vary: Authorization' бағдарламаларын тек қатаң бақылауда қолданыңыз (басқаша - cache-bust).
Қауіпсіз балама: көпшілік қабаты мен жеке инклюдтерді (ESI/edge-композиция) бөліңіз.
14) Гео/мазмұн ережелері
Лицензиялық шектеулер: edge-дегі geo-deny, origin блоктауының орнына плейсхолдерлер.
Жас/реттегіш баннерлер - edge-дегі рендер (кэшті тесуге болмайды).
15) Қарсы үлгілер
'no-cache, no-store' бүкіл сайт үшін → CDN әсерінің жоғалуы.
Тұрақсыз тақырыптар бойынша 'Vary' (мысалы, 'User-Agent') → түбегейлі.
Әрбір релизде бүкіл кэшті тазалау.
SWR жоқ қысқа TTL → origin «дауыл».
Дербес беттер сегментациясыз/токен-кілтсіз кэштеледі.
origin-shield → көптеген параллель қателіктердің болмауы.
16) Енгізу чек-парағы (0-45 күн)
0-10 күн
Статика (immutable )/HTML/API ресурстарын жіктеу.
gzip/br, HTTP/2/3, query, 'Surrogate-Key' баптауларын қосу.
SWR/IFE және негізгі purge енгізу.
11-25 күн
Кескіндерді оңтайландыру (resize/format), origin-shield.
Қол қойылған жеке медиа URL, WAF/DDoS профильдері.
Дашбордтар: hit ratio, origin fetches, p95 POP бойынша.
26-45 күн
Multi-CDN немесе GSLB-стратегия, периметрдегі канареялық салмақтар.
Сегменттеу үшін Edge-compute/АВ/гео, кілттер бойынша soft-purge.
Автожылыту және purge-ді CI/CD-ге біріктіру.
17) Жетілу метрикасы
Byte hit ratio ≥ 85% статика үшін, ≥ 60% HTML/шартты динамика үшін.
Origin RPS шыңдалған кезде тұрақты («дауыл» жоқ).
p95 TTFB негізгі өңірлер бойынша 30% ≥ төмендетілді.
Оқыс оқиғалар кезінде stale жауаптары%> 90% (пайдаланушы елемеді).
Релиз-пайплайндағы purge-кілттерді толық автоматтандыру.
18) Қорытынды
CDN тиімді контуры - бұл кілттер/TTL/нұсқалар, мүгедектік тәртібі және edge-логика. SWR/IFE, origin-shield, медиа оңтайландыру және қатаң қауіпсіздік (WAF, URL қол қойылған) қосыңыз. Өлшемдерді стандарттаңыз және purge-ді CI/CD-ге біріктіріңіз - және сіз ең жоғары жүктемелер мен «қара аққындарға» дайын жылдам, үнемді және тұрақты периметрді аласыз.