Стратегияҳои кэшкунӣ
1) Чаро кэш ва дар куҷо бояд кард
Кэш як қабати хотираи зуд аст, ки ниҳонӣ ва сарбориро ба захираҳои гаронбаҳо коҳиш медиҳад (CPU/DB/API беруна). Ҳадафҳои муҳим:- Суръат (p95/p99 камтар), арзиш (камтар egress/CPU), устуворӣ (вобастагии камтар аз қулла).
- Ҳамворкунии қуллаҳо ва ҷудоӣ аз "ҳамсояҳои пурғавғо".
1. Клиент (браузер/мобил) - кеши HTTP, индексатсия, захираи маҳаллӣ.
2. Гиреҳҳои Edge/CDN - POP ба корбар, кэш статикӣ ва қисми API наздиктаранд.
3. L7-gateway/Reverse-proxy - Nginx/Envoy/Varnish (microcash, SWR).
4. Кэши хидматрасонӣ - Redis/Memcached дар дохили кластер.
5. Дар ҷараён - дар хотира (Кофеин/Гуава/LRU-харита).
6. Кэш дар махзани маълумот - намояндагиҳои моддӣ, индексатсияҳои дуюмдараҷа.
Қоида: кэш то ҳадди имкон ба истеъмолкунанда наздик аст, аммо ҳақиқатро як бор нигоҳ доред.
2) Намунаҳои кэш
2. 1 Кэш-канор ("боркунии танбал")
Ариза аввал аз кэш мехонад; дар ҳолати пазмон шудан - аз манбаъ, баъд ба кэш менависад.
Тарафдор: содда, назорат. Омӯз: оғози хунук, номувофиқатии тирезаҳо.
2. 2 Хондан
Хониш ҳамеша тавассути кэш аст, ки ҳангоми пазмон шудан ба манбаъ меравад (китобхона/қабати прокси).
Мутамарказ кардани сиёсати TTL/serialization қулай аст.
2. 3 Навиштан/Навиштан (навиштан аз қафо)
Навиштан: навиштан ба кэш ва манбаъ ба таври синхронӣ § мувофиқати баландтар, ниҳонӣ баландтар.
Навиштан: ба кэш нависед, флеши асинхронӣ ба сарчашма → зуд нависед, аммо хатари гум шудан ва низоъ.
2. 4 Бозсозӣ (фаъолона)
Пешгӯиҳо "TTL ба қарибӣ ба итмом мерасад" ва калидро дар замина навсозӣ мекунад ва тамғаро пешгирӣ мекунад.
2. 5 Кэши манфӣ
Caching "no data/404/холӣ" ба TTL кӯтоҳ сарбориро дар манбаъ коҳиш медиҳад.
2. 6 Micro-caching
TTL-ҳои хеле кӯтоҳ (0. 5-5 с) дар L7 барои "қариб динамика" (рӯйхат, асосӣ) - думҳоро якбора кам мекунад.
3) Кэши HTTP: сарлавҳаҳо ва назорат
3. 1 Сарлавҳаҳои асосӣ
'Кэш-назорат': 'макс-синну сол', 's-maxage' (для муштарак кешей), 'давлатӣ/хусусӣ', 'no-store', 'кӯҳна-ҳангоми таҷдиди назар', 'кӯҳна-агар-хато'.
Валидаторҳо: 'ETag' (ҳаши мундариҷа), 'Last-Modified'.
Дархостҳо бо шартҳо: 'If-None-Match', 'If-Modified-Das' → 304 Тағир дода нашудааст.
3. 2 Фарқ ва калидҳо
'Фарқ: Рамзгузорӣ, Авторизатсия, Куки, Қабул-Забон' - имконоти гуногуни кэшро эҷод мекунад. 'Vary' -ро кам кунед, то ки кардинализмро "тарконед".
3. 3 Намунаи посухи HTTP
Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60
ETag: "a1b2c3"
Vary: Accept-Encoding
4) Тарҳи калидӣ ва TTL
4. 1 Калид
Сохтор: 'иҷорагир: {id}: профил: v3' (версияи схемаро дар бар мегирад).
Дар калид PII пешгирӣ кунед.
Барои маҷмӯаҳо - параметрҳои калидӣ + дархост (муқарраршуда ва мураттаб).
4. 2 TTL ва пайдарҳамӣ
TTL кӯтоҳ номувофиқатиро коҳиш медиҳад, аммо пазмонҳоро зиёд мекунад.
Барои маълумоти интиқодӣ - валидаторҳо ('ET' ag ') ва SWR (кӯҳна-ҳангоми бозсозӣ).
Барои кам тағир ёфтан - TTL + "бомбаҳои" маъюбӣ.
4. 3 Версия/basting
Барои тағироти номувофиқ префикс/нусхаи калидиро тағир диҳед ('v2 → v3').
Барои захираҳои статикӣ - hash мундариҷа дар номи файл.
5) маъюбӣ: стратегияҳо ва амалия
5. 1 Нест кардани мустақим
'Калиди DEL '/' PURGE' дар прокси. Хатар: Нажодҳо байни хориҷшавӣ ва хонандагони сершумор.
5. 2 Калидҳои суррогатӣ
Ҳуҷҷатро бо маҷмӯи барчасбҳо пайваст кунед (категория/муаллиф). Маъюбӣ - аз рӯи барчасп.
V Varnish/Edge - 'Суррогат-Калид: мақола: 42 tag: author: 7' + 'BAN tag: author: 7'.
5. 3 Маъюбӣ дар асоси ҳодиса
Pub/Sub (Kafka/NATS): вақте ки манбаъ тағир меёбад, мо чорабинии "беэътибор" -ро нашр мекунем.
Истеъмолкунандагони кэш калидҳоро гӯш мекунанд ва нест мекунанд/навсозӣ мекунанд.
5. 4 Ду марҳила
Аввалан, мо калиди кӯҳна (TTL мулоим) -ро қайд мекунем, ба кӯҳна хидмат мерасонем, онро дар замина навсозӣ мекунем ва атомиро иваз мекунем.
6) Муносибат бо калидҳои мӯҳрдор/dogpile ва гарм
6. 1 Якҷоя кардани дархост (яклухт)
Як истеҳсолкунанда калидро нав мекунад, боқимондаҳо натиҷаро интизоранд (мутекс/тамғакоғазҳо "навсозиҳо").
6. 2 Jitter k TTL
Барои пешгирии варамҳои синхронӣ ба TTL тасодуфӣ (± 10-20%) илова кунед.
6. 3 Soft-TTL + hard-TTL
Пеш аз мулоим-TTL, мо аз кэш хизмат мекунем, дар баробари триггери тароватбахш; бо hard-TTL - мо пазмон мешуморем.
6. 4 Калидҳои гарм
Кэшҳои маҳаллӣ бар муштарак (думарҳилагӣ).
Такрори калидҳои гарм ба якчанд shards ва интихоби тасодуфӣ (танҳо хондан).
Меъёри меъёри навсозии калиди мушаххас.
6. 5 Намунаи Редис + Луа (singleflight-эскиз)
lua
-- SETNX lock with TTL to avoid deadlocks local ok = redis. call("SET", KEYS[1], "1", "NX", "EX", ARGV[1])
if ok then return "LOCKED"
else return "WAIT"
end
7) Сиёсати пешакӣ ва қабули кэш
7. 1 Хориҷшавӣ
LRU: оддӣ ва хуб барои маҳал.
LFU: Беҳтар барои калидҳои гарм "дарозумр".
ARC/Tiny .LFU: тавозуни recency/басомад.
7. 2 Қабул
Ба объектҳои азими нодир роҳ надиҳед (филтрҳои Tiny
Фишурдани қиматҳои калон (LZ4/Zstd) дар ҳудуди андоза/ниҳонӣ.
8) Нақшакашӣ ва топологияҳо
8. 1 Хэш пайваста
Калидҳоро ба гиреҳҳо ба таври устувор тақсим мекунад, ҳаракатро ҳангоми афзоиш/фишурдани кластер коҳиш медиҳад.
8. 2 Топологияҳои Redis/Memcached
Кластери Редис (ҷойҳо/рехтҳо), Сентинел (feilover), танҳо нусхабардории хондан.
Memcached як аккоси муштарӣ аст (хэшинги кетама), бидуни такрори сатҳи сервер.
8. 3 Локалӣ + Тақсимшуда
Каскад: in-proc (micro-TTL/LRU) → Редис (TTL дарозтар) → манбаъ.
Бо колонҳои TTL ва валидаторҳои кэш эҳтиёт шавед.
9) кеши Edge, CDN ва L7
9. 1 Микро-кэш на Nginx
nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:100m inactive=10m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }
server {
location /api/list {
if ($skip_cache) { add_header Cache-Control "no-store"; }
proxy_cache api;
proxy_cache_valid 200 2s; # micro-cache proxy_cache_use_stale error timeout updating;
proxy_cache_background_update on; # SWR add_header X-Cache $upstream_cache_status;
proxy_pass http://upstream;
}
}
9. 2 Фиристанда (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. http. cache. file_system_http_cache. v3. FileSystemHttpCacheConfig cache_path: "/var/cache/envoy"
9. 3 Лак (Калидҳои суррогатӣ)
Истифодаи 'Surrogate-Key' ва 'манъи' барчасбҳо барои маъюбии партия.
10) Кэш ва мувофиқати маълумот
10. 1 Хонед-нависед
Барои профилҳои корбар/қуттии такрорӣ, ё TTL-и кӯтоҳ, навиштан ё аломатгузории муштариро таъмин кунед (пас аз навиштани N сония пас аз навиштан).
10. 2 Оқибат против қавӣ
Барои тавсия/таҳлилӣ - оқибат + TTL дароз.
Барои вазъи пул/фармоиш - TTL кӯтоҳ, санҷиш, баъзан бе кэш дар роҳҳои интиқодӣ.
10. 3 Инвариантҳо
Майдонҳои кэшро, ки ба амният/ACL таъсир мерасонанд, бидуни TTL-ҳои қатъӣ ва дубора тасдиқ накунед.
11) Мушоҳида, SLO ва идоракунӣ
11. 1 Ченак
hit_ratio (общий и ҳар як масир), byte_hit_ratio, miss_rate.
stampede_prevented_total, refresh_ahead_total, ban/purge_total.
Таъхир: p50/p95/p99 аз кэш vs аз манбаъ.
hot_keys_topN ва QPS/байтҳои онҳо.
11. 2 Гузоришҳо ва пайҳо
Сабти 'X-Cache: HIT/MISS/STALE/UPDATING'.
Дар нишонаҳо манбаи посухро қайд кунед ('кэш = ҳақиқат', 'сатҳ = канори' хидмат 'маҳаллӣ').
11. 3 Равиши SLO
Мисол: "барои API/каталоги p99 250 ms, кэш 85%, мӯҳр 0. 1% дархостҳо"
11. 4 Runbook
"Пазмонҳо афзоиш меёбанд" → санҷиши TTL, гармӣ/маъюбӣ, калидҳои гарм, андозаи кэш ва сиёсати қабул.
12) Бехатарӣ ва бисёрҳуҷрагӣ
Ҷойгиркунии иҷорагир дар калидҳо (ва дар 'Vary' барои HTTP).
Ҷавобҳои хусусиро ҳамчун "оммавӣ" нигоҳ надоред.
Рамзгузории кэш бо маълумоти ҳассос ё нигоҳ доштани танҳо ғайри PII/ID.
13) Дорухатҳои маъмулӣ
13. 1 Каталог/лента (қариб динамикӣ)
Edge-microcash 1-3 s + SWR, дар дохили - Редис барои 15-60 с, маъюбӣ тавассути рӯйдодҳои навсозӣ.
13. 2 Профили корбар
Ғайр аз кэш бо TTL 30-120 s, пас аз 5-10 с пас аз навсозии профил (куки/сарлавҳа) ё навиштан.
13. 3 Курсҳои асъорӣ/маълумотномаҳо
TTL дароз (дақиқаҳо-соатҳо) + маъюбии мақсаднок ҳангоми интишори маълумоти нав; 'ET' барои GET-ҳои шартӣ.
13. 4 Натиҷаҳои ҷустуҷӯ
Edge-microcash 1-2 s, дар дохили - тароват ва пешрафт, ба эътидол овардани параметрҳои дархост дар калид.
14) Анти-намунаҳо
Пули нақд бе маъюбӣ: умед танҳо ба TTL → тирезаҳои дарозмуддати номарбут.
Бузургҷусса 'Vary': "таркиш" -и опсияҳо → сатҳи пасти хит.
Кэши ягона барои prod/experiments → ифлосшавӣ.
Ҳангоми ба охир расидани мӯҳлати TTL ҳеҷ гуна муҳофизат аз тамғаи тамғагузорӣ ва сарчашма вуҷуд надорад.
Кэши нақд/ҳуқуқҳо/ACL бидуни кафолати қатъӣ.
Фишурдани "ҳама чиз дар як саф" - изофаи CPU, бад шудани p99 дар объектҳои хурд.
15) Рӯйхати назорати амалисозӣ
- Сатҳи кэш ва ҳадафҳои онҳоро муайян кунед (канор/хидмат/маҳаллӣ).
- Калидҳои тарроҳӣ (версия, иҷорагир, нормализатсияи параметр).
- Намунаро интихоб кунед (кэш-канор/хондан/тароватбахш).
- Танзими TTL/soft-TTL/jitter, SWR-ро фаъол созед.
- Татбиқи ҳамбастагӣ/яклухт, муҳофизати мӯҳр.
- Ташкили маъюбӣ (чорабиниҳо, барчаспҳо, поксозӣ/манъкунӣ).
- Нишондиҳандаҳои хит-таносуб/ниҳонӣ ва панели панели 'X-Cache' -ро ворид кунед.
- Санҷишҳои сарбории гармро иҷро кунед.
- SLO ва runbooks нависед.
- Ҷудокунии амният/иҷорагир ва 'Vary' -ро санҷед.
16) FAQ
Савол: Чиро интихоб кардан лозим аст - кэш-канор ё хондан?
A: Барои хидматҳои оддӣ - кэш-канор. Мо ба мутамарказ ва сиёсати ягона ниёз дорем - хондан.
Савол: TTL-и оптималиро чӣ гуна бояд фаҳмид?
Ҷ: Оғоз аз фарсудашавии иҷозатдодашуда, басомади навсозиҳо ва суръати ҳадаф; ҷиттерро илова кунед ва p95/p99/арзишро риоя кунед.
Савол: Кай навиштан мувофиқ аст?
Ҷ: Барои ҷараёнҳои баландшиддат, ки дар он мувофиқати ниҳоӣ қобили қабул аст ва барои "илова кардан" навбати боэътимод/сабти ном мавҷуд аст.
Савол: Оё посухҳои ваколатдор метавонанд кэш карда шаванд?
A: Бале, аммо аломати "хусусӣ" ва/ё иҷорагир/корбарро дар тугмаи/' Vary 'дохил кунед. Барои воқеан хусусӣ - кэш муштарӣ.
Савол: Кэшро чӣ гуна гарм кардан мумкин аст?
A: Рӯйхати калидҳои маъмул, кирми пасзамина, такрори гузоришҳо, гарм кардани пеш аз озодшавӣ/қулла (ҷумъаи сиёҳ ва ғайра).
17) Натиҷаҳо
Кэшинги самаранок тарҳи калидӣ + TTL-и оқилона + намунаи хуб интихобшуда мебошад, ки бо маълулияти ҳодиса, SWR/тароватбахш ва муҳофизати мӯҳр такмил дода шудааст. Сатҳи кэш (муштарӣ/канор/хидмат), мушоҳидаҳо ва SLO-ро илова кунед ва думҳои ниҳонии устувор, арзиши пешбинишаванда ва устувории қуллаҳоро гиред.