CDN кэшкунӣ ва оптимизатсияи TTL
Хулосаи мухтасар
Кэши CDN "суръатбахш + сипар" байни корбар ва пайдоиш мебошад. Ин хуб кор мекунад, вақте:1. Калиди кэш устувор аст ва "садо" надорад.
2. Сиёсати TTL дар зери сарборӣ: 's-maxage '/' max-age' + 'кӯҳна-ҳангоми афзоиш/агар-хато'.
3. Маъюбӣ идора карда мешавад: бо барчаспҳо/префиксҳо + тозакунии "мулоим".
4. Сатҳи кэш/пайдоиши сипар ва манфӣ-кэш дохил карда шудаанд.
5. Мушоҳидаҳо мавҷуданд: таносуби зарба аз қабатҳои, p95 TTFB, ҳиссаи бозгашт 304.
Сарлавҳаҳои асосӣ ва чӣ маъно доранд
'Назорати кэш':- 'max-age =
' - TTL барои браузер. - 's-maxage =
'- TTL барои CDN/proxy (такрори' max-age '). - 'кӯҳна-дар ҳоле-revalidate =
' - ба таври мувозӣ кӯҳна, навсозӣ кунед. - 'кӯҳна-агар-хато =
' - вақте ки хатогии пайдоиш пайдо мешавад, мо кӯҳнаи худро бармегардонем. - 'тағйирнопазир' - манбаъ тағир намеёбад (барои дороиҳои санҷидашуда мувофиқ аст).
- 'ET' ag '/' Last-Modified '- шартҳо барои 304, сарфа кардани байтҳо/пайдоиши CPU.
- 'Vary' - рӯйхати сарлавҳаҳое, ки ба калиди кэш таъсир мерасонанд (истифода бо маҳдудият!).
- 'Surrogate-Control' - "васеъ" Кэш-Назорат барои CDN (агар дастгирӣ шавад).
- 'Мӯҳлат ба охир мерасад' - кӯҳна шудааст, аммо ба ҳар ҳол аз ҷониби муштариён ҳисоб карда мешавад.
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: парванда, зарбаҳои дукарата, хати ҳаракат, тартиби параметрҳои дархост.
"Ғавғо" -ро нодида гиред: 'utm _',' fbclid ',' gclid ', барчаспҳои ихтиёрии ref.
Vary Limited: танҳо унвонҳои воқеан муҳим ('Қабул-Рамзгузорӣ', баъзан 'Қабул', 'Қабули забон' for).
Синфи дастгоҳ: дар ҳолати зарурӣ, 2-3 синфро (мобилӣ/мизи корӣ/планшет) истифода баред, на филиалҳои беохири истифодабаранда-агент.
Контексти Auth: бо нобаёнӣ махфӣ нигоҳ надоред; истифодаи URL/cookies-bypass ё роҳҳои алоҳидаи давлатӣ/хусусӣ.
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
Стратегияҳои TTL аз рӯи навъи мундариҷа
Сиёсати маъюбӣ
Бо URL/Префикс: "ҳама чизро зери '/статикӣ/2025-11-05/' тоза кунед".
Бо Tag/Key: "ҳама 'каталог' ва 'маҳсулот: 123' -ро хориҷ кунед".
Тозакунии нарм: ҳамчун кӯҳна ишора кунед, объектро тоза накунед - тезтар пур кардан.
Рӯйдодҳо: CI/CD ё ҳодисаи маъмурӣ webhook-ро "барчаспҳои беэътибор" мекунад.
Тавсия: ҳарду тактикаро муттаҳид кунед: роҳҳои таҳвил барои дороиҳо + тозакунии барчасбҳо барои мундариҷа/саҳифаҳо.
Сатҳи кэш, пайдоиш-сипари пеш аз ҷанг
Сатҳи кэш: қабатҳои минтақавии CDN → дархостҳои камтар аз пайдоиш.
Пайдоиши сипар: як "сипар" POP ба пайдоиш - маҳал ва таносуби хитро беҳтар мекунад.
Prewarm (пеш аз овардан): Пеш аз ҳодиса/озодшавӣ URL/caches гарм кунед.
Кэши манфӣ: кэш 5xx/Timeout дар муддати кӯтоҳ (30-120 с), то ки пайдоиши худро бо тӯфони ретрас бартараф накунад.
Кэши API: Вақте ки шумо метавонед
Танҳо GET/HEAD ва idempotent.
Калид: роҳ + дархостҳои асосӣ (масалан, '? категорияи =... & саҳифа =... ').
Санҷиш: 'ET' ag '/' Last-Modified 'ва кӯтоҳ' s-maxage '.
Филтрҳо аз ҷониби корбар: фардикунониро ба функсияи муштарӣ/канорӣ биёред ё дархостҳои имзошуда + посухи "оммавӣ" -ро истифода баред.
Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"
Муҳофизати заҳролудшавӣ аз кэш
Нормализатсияи URL/сарлавҳа; whitelist параметрҳо дар калид.
Буридани сарлавҳаҳои/нусхаҳои шубҳанок ('X-Forwarded-', васеъшудаи 'Қабул').
'Vary' -ро маҳдуд кунед ва андоза/шумораи сарлавҳаҳоро назорат кунед.
Ҷудосозии домейн: хусусӣ/админ - бо номи алоҳида бе кэш.
Тасдиқи ҷавобҳо: кэш 4xx (ба истиснои 404 барои статикӣ), саҳифаҳои "корбар" -ро бидуни сиёсати возеҳ пинҳон накунед.
Фишурдасозӣ ва форматҳо
Brotli барои матн (js/css/json), gzip - афтиш; дороиҳои қаблан фишурдашуда қобили қабуланд.
Тасвирҳо: webp/avif дар куҷо дастгирӣ; истифодаи 'Vary: Қабул' + ҳосилаҳои.
Дархостҳои диапазон барои видео/аудио: CDN caches chunks.
Муҳтаво-гуфтушунид: Кардинализатсияи калидиро паст нигоҳ доред (ба ҷои UA-и хом синфи дастгоҳ).
Мушоҳида ва SLO
Ченакҳои асосӣ
Таносуби хит (бо байтҳо/дархостҳо) на канор/сатҳ/сипар.
p50/95/99 TTFB аз рӯи минтақа ва намуд (статикӣ/API).
Сатҳи пуркунӣ/пайдоиши пайдоиш - чӣ қадар ба пайдоиш меравад.
304 дараҷа ва андозаи миёнаи посух.
Буҷаи хатогӣ: ҳиссаи масъалаҳои 'кӯҳна-агар-хато '/' SWR'; басомади тозакунӣ.
Намунаҳои SLO
'p95 TTFB' статикӣ дар минтақа ≤ 120-150 мс, API GET ≤ 200-250 мс.
Статикаи хит-таносуби Edge ≥ 90%, нимпайкараҳо ≥ 60%.
Фоизи ҷавобҳо аз шохаи кӯҳна бо хатогиҳои ≤ 0. 5% дар 30 рӯз.
Варақаҳои фиребро конфигуратсия кунед
Nginx (баръакс-прокси пеш аз CDN ё дар PO-P)
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;
}
}
Фиристанда (SWR + манфӣ-кэш, консепсия)
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
Финҳо: Чӣ гуна пули нақд пулро сарфа мекунад
Пайдоиши Egress ↓, CPU/DB камтар хароҷот барои инфрасохтор.
Дархостҳои камтар барои пуштибонии пардохтшуда (ҷустуҷӯ/индекс/тасвирҳо).
Метрикаи мақсаднок: $/кам шудани p95 ва $/кам шудани egress то 1 ГБ - таъсири пас аз оғозро пайгирӣ кунед.
IGaming/fintech мушаххас
Каталогҳои провайдерҳо/дороиҳо: роҳҳои санҷидашуда + TTL солона.
Фурудгоҳҳои чорабинӣ/мусобиқа: 1-5 дақиқа 's-maxage' + 'SWR' барои 10-30 дақиқа; барчасп-тозакунӣ дар навсозӣ.
Саҳифаҳои Liv (коэффисиентҳо/ҷадвалҳо): кэши қисман блокҳои JSON, TTL кӯтоҳ (5-30 с), барои блокҳои шахсӣ - пешниҳоди муштариён.
Нуқтаҳои ниҳоии PSP/пардохт: кэш накунед, қатъии 'мағоза'; Кэш танҳо китобҳои истинодӣ (ҷадвалҳои BIN, статусҳо).
Антибот: кэши статикӣ/GET, хатсайрҳои хокистарӣ барои ASN-ҳои шубҳанок; "Вары" -ро аз сарлавҳаҳои пурғавғо нигоҳ доред.
Рӯйхати назоратии татбиқ
- Калиди кэш тавсиф карда шудааст: нормализатсияи URL, рӯйхати дархостҳои иҷозатдодашуда, 'Vary' танҳо барои дархости дилхоҳ.
- Роҳҳои давлатӣ/хусусӣ ҷудо; хусусӣ - 'мағоза нест' ва гузариши CDN.
- Зинаҳои TTL аз рӯи навъи мундариҷа; танзимшудаи 'SWR/if-хато'.
- сатҳ-кэш + сипари пайдоиш танзим карда шудааст; манфӣ-кэш 5xx (кӯтоҳ) фаъол аст.
- Тозакунии барчасп/URL, тозакунии мулоим мавҷуд аст; ҳамгироӣ бо CI/CD.
- фишурдасозӣ (br/gzip), форматҳои тасвири веб ва посухҳои диапазонро дар бар мегирад.
- Нишондиҳандаҳо: таносуби хит аз рӯи қабат, p95 TTFB, 304 дараҷа, пайдоиши пайдоиш; огоҳӣ дар бораи нокомӣ.
- Китобҳои бозӣ: гарм кардани кэш пеш аз қуллаҳо, тозакунии ҳолати фавқулодда, таназзули пайдоиш.
Хатогиҳои умумӣ
Дороиҳои ғайридавлатӣ бо бастаҳои калони TTL → "часпанда" аз корбарон.
Аз ҳад зиёд 'Vary' (аз ҷониби 'User-Agent', ҳама сарлавҳаҳо) → таркиши кардинализм ва таносуби пасти хит.
Caching 4xx/401/403/мундариҷаи хусусӣ.
Набудани кэши манфӣ → тармаи дархостҳо барои пайдоиши таназзулёфта.
Не тозакунии барчасп → тозакунии нуқтаи азим ва пур кардани тӯфон.
Калиди кэш параметрҳои "ғавғо" UTM/ref -ро дар бар мегирад.
TTL хеле кӯтоҳ барои статика → бори иловагӣ ба CDN ва пайдоиши.
Китобҳои бозикунии хурд
1) Пеш аз ҳодиса кэшро гарм кунед
1. Ҷамъоварии URL-ҳои Top-N аз рӯи гузоришҳо → 2) Префетчҳои параллелӣ (меъёри маҳдуд) аз рӯи минтақа → 3) Санҷиши таносуби hit ва p95 ↓.
2) Катологҳои нарм-тоза дар ҳолатҳои фавқулодда
1. Ирсоли 'PURGE '/tag-clear → 2) CDN кӯҳна ва тару тоза бо пасзаминаи → 3) Санҷед, ки хӯшае аз пайдоиш нест.
3) Нокомии пайдоиш
1. 'stale-if-if-хато' ба X соат → 2 кӯмак мекунад) Баннерро "кори техникӣ" дар канори → 3) Ҳангоми барқароршавӣ - гармкунии мақсаднок.
Натиҷа
Стратегияи пурқуввати CDN = калиди дурусти кэш + TTL-и пурмазмун бо SWR/if-хато + маъюбии идорашаванда + дараҷа/сипар + мушоҳида. Сиёсатро дар сарлавҳаҳо ва IA ислоҳ кунед, таносуби хит ва p95-ро чен кунед, ба нақша гиред, ки ба қуллаҳо гарм шавед - ва корбарон ҳамеша ҷавоби зуд мегиранд ва пайдоиш ҳатто дар соатҳои гармтарин зинда хоҳад монд.