Kesmek strategiýalary
1) Näme üçin kesmek we nirede etmek
Kesh, gymmat bahaly çeşmelere (CPU/BD/daşarky API) gizlinligi we ýüküni azaldýan çalt ýat gatlagydyr. Möhüm maksatlar:- Tizlik (p95/p99 pes), çykdajy (egress/CPU az), durnuklylyk (pik aşagyndaky az garaşlylyk).
- Iň ýokary nokatlary tekizlemek we "şowhunly goňşulardan" izolýasiýa etmek.
1. Müşderi (brauzer/jübi) - HTTP-kesh, IndexedDB, local storage.
2. Edge/CDN - POP düwünleri ulanyja has ýakyn, statikany we API-iň bir bölegini açýar.
3. L7-şlýuzy/Reverse-proxy - Nginx/Envoy/Varnish (mikrokeş, SWR).
4. Hyzmat keşi - Klasteriň içinde Redis/Memcached.
5. Prosessor içi - in-memory (Caffeine/Guava/LRU-map).
6. DB-daky nagt pul - maddy pikirler, ikinji derejeli indeksler.
Düzgün: sarp edijä mümkin boldugyça ýakynlaşyň, ýöne hakykaty bir gezek saklaň.
2) Kesmek patternleri
2. 1 Cache-aside (“lazy loading”)
Programma ilki bilen kesden okaýar; sypdyran ýagdaýynda - çeşmeden, soň bolsa kese ýazýar.
Artykmaçlyklary: ýönekeýlik, gözegçilik. Minuslar: sowuk başlangyçlar, gabat gelmeýän penjireler.
2. 2 Read-through
Okamak elmydama sypdyrylanda çeşmä gidýän keş arkaly (kitaphana/proks gatlagy).
TTL/serilizasiýa syýasatlaryny merkezleşdirmek amatly.
2. 3 Write-through / Write-back (write-behind)
Write-through: kese ýazmak we çeşme sinhron → has ýokary yzygiderlilik, has ýokary gizlinlik.
Write-back: nagt ýazgy, çeşmä asinxron fleş ýazgy → çalt, ýöne ýitgiler we gapma-garşylyklar töwekgelçiligi.
2. 4 Refresh-ahead (proactive)
"TTL ýakyn wagtda gutarar" diýip çaklaýar we stampede öňüni alyp, fonda açary täzeleýär.
2. 5 Negative caching
Gysga TTL-de "maglumat ýok/404/boş" kesmek çeşmäniň ýüküni azaldar.
2. 6 Micro-caching
Örän gysga TTL (0. 5-5 s) L7-de "dinamika diýen ýaly" (sanawlar, esasy) - guýruklaryny düýpgöter peseldýär.
3) HTTP-kesh: sözbaşylar we gözegçilik
3. 1 Esasy sözbaşylar
`Cache-Control`: `max-age`, `s-maxage` (для shared кэшей), `public/private`, `no-store`, `stale-while-revalidate`, `stale-if-error`.
Tassyklaýjylar: 'ETag', 'Last-Modified'.
"If-None-Match", "If-Modified-Since" → 304 Not Modified.
3. 2 Wary we açarlar
'Vary: Accept-Encoding, Authorization, Cookie, Accept-Language' - keşiň dürli görnüşlerini emele getirýär. Kardinallygy "partlatmazlyk" üçin "Wary" -ni azaldyň.
3. 3 HTTP jogap mysaly
Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60
ETag: "a1b2c3"
Vary: Accept-Encoding
4) Açar dizaýny we TTL
4. 1 Açarlar
Gurluş: 'tenant: user: {id}: profile: v3' (shema wersiýasyny goşuň).
Açarda PII-den gaça duruň.
Kolleksiýalar üçin - açar + haýyş parametrleri (kadaly we tertipli).
4. 2 TTL we sazlaşyk
Gysga TTL düşünişmezligi azaldýar, ýöne ýalňyşlyklary artdyrýar.
Möhüm maglumatlar üçin - walidatorlar ('ETag') we SWR (stale-while-revalidate).
Seýrek üýtgeýän adamlar üçin - maýyplygyň uzyn TTL "bombalary".
4. 3 Wersiýalaşdyrmak/basting
Gabat gelmeýän üýtgeşmeler - açaryň prefiksini/wersiýasyny üýtgediň ('v2 → v3').
Statik çeşmeler üçin - faýlyň adynda content hash.
5) Maýyplyk: strategiýalar we amallar
5. 1 Göni aýyrmak
'DEL key '/' PURGE' proxy. Howp: aýyrmak bilen köp okyjylaryň arasyndaky ýaryş.
5. 2 Bellikler/Surrogate keys
Resminamany taglar toplumy bilen baglanyşdyryň (kategoriýa/awtor). Maýyplyk - tagt boýunça.
В Varnish/Edge — `Surrogate-Key: article:42 tag:author:7` + `BAN tag:author:7`.
5. 3 Event-driven maýyplyk
Pub/Sub (Kafka/NATS): çeşme üýtgese - "invalidate" wakasyny çap edýäris.
Keş müşderileri açarlary diňleýärler we pozýarlar/täzeleýärler.
5. 4 Iki fazaly
Ilki bilen açary köne diýip belleýäris (soft TTL), stale hyzmat edýäris, fonda täzelenýäris we atom bilen çalyşýarys.
6) Stampede/dogpile we gyzgyn açarlar bilen göreşmek
6. 1 Request coalescing (singleflight)
Bir prodýuser açary täzeleýär, galanlary netijä garaşýarlar ("täzelenýär").
6. 2 Jitter к TTL
Sinhron çişmezlik üçin TTL-e tötänlik (10-20% ±) goşuň.
6. 3 Soft-TTL + hard-TTL
Soft-TTL-e çenli kesişden hyzmat edýäris, paralel refresh triggerimi; hard-TTL boýunça - ýalňyşlyk hasaplaýarys.
6. 4 Gyzgyn açarlar
Umumylaryň üstündäki ýerli keşler (two-tier).
Gyzgyn açary birnäçe şarda we random saýlamakda köpeltmek (diňe read-only üçin).
Belli bir açary täzelemek üçin rate limit.
6. 5 Redis + Lua mysaly (singleflight-eskiz)
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) Göçürmek we nagt pul kabul etmek syýasaty
7. 1 Eviction
LRU: ýerli ýer üçin aňsat we gowy.
LFU: "uzak ömürli" gyzgyn açarlar bilen has gowudyr.
ARC/TinyLFU: balans recency/frequency.
7. 2 Admission (giriş)
Ullakan seýrek zatlary (TinyLFU/Bloom süzgüçleri) goýbermäň.
"Ululyk/gizlinlik" serhedinde uly gymmatlyklaryň (LZ4/Zstd) gysylmagy.
8) Şardlamak we topologiýalar
8. 1 Consistent hashing
Açarlary nodalar boýunça yzygiderli paýlaýar, klaster ulalanda/gysylanda hereketleri azaldar.
8. 2 Topologiýalar Redis/Memcached
Redis Cluster (slotlar/toplar), Sentinel (feýlower), replikasiýa read-only.
Memcached - serwer derejesinde göçürme bolmazdan, müşderi-saýd şarding (ketama hashing).
8. 3 Lokal + paýlanan
Kaskad: in-proc (mikro-TTL/LRU) → Redis (TTL has uzyn) → çeşme.
TTL iki nokatlaryna we keş tassyklaýjylaryna seresap boluň.
9) Edge, CDN we L7-kesh
9. 1 Micro-cache на 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 Envoy (SWR we şertler)
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 Varnish (Surrogate keys)
Bukjaly maýyplyk üçin 'Surrogate-Key' we 'ban' belliklerini ulanyň.
10) Maglumatlaryň keş we utgaşdyrylmagy
10. 1 Read-your-writes
Ulanyjy profilleri/sebetleri üçin gysga TTL-leri ýa-da keş arkaly ýazgyny (write-through) ýa-da müşderi belligini (ýazgydan soň N sekuntda bypass) beriň.
10. 2 Eventual vs Strong
Maslahat beriş/seljeriş üçin - eventual + uzyn TTL.
Pul/sargyt statusy üçin - gysga TTL, tassyklama, käwagt möhüm ýollarda nagt däl.
10. 3 Üýtgeşik
Berk TTL we gaýtadan barlamazdan, howpsuzlyga/ACL täsir edýän meýdanlary kesip almaň.
11) Gözegçilik, SLO we dolandyryş
11. 1 Metrikler
hit_ratio (общий и per-route), byte_hit_ratio, miss_rate.
stampede_prevented_total, refresh_ahead_total, ban/purge_total.
Gizlinlik: p50/p95/p99 keş çeşmesi vs.
hot_keys_topN we olaryň QPS/baýtlary.
11. 2 Ýazgylar we yzarlamalar
Login 'X-Cache: HIT/MISS/STALE/UPDATING'.
Treklerde jogap çeşmesini belläň ('cache = true', 'tier = edge' service 'local').
11. 3 SLO çemeleşmesi
Mysal: "API/catalog p99 ≤ 250 ms, cache hit ≥ 85%, stampede ≤ 0. Soraglaryň% 1".
11. 4 Runbooks
"Sypdyrmalar artýar" → TTL, gyzdyrmak/maýyplyk, hot-keys, nagt pul ululygy we kabul ediş syýasatyny barlamak.
12) Howpsuzlyk we köp tenantlyk
Tenant-id-i açarlara salyň (we HTTP-de 'Vary' -de).
Şahsy jogaplaryňyzy 'public' diýip gizlemäň.
Duýgur maglumatlar bilen keseki şifrläň ýa-da diňe PII/ID saklamaň.
13) Adaty reseptler
13. 1 Katalog/lenta (dinamika diýen ýaly)
Edge-mikrokeş 1-3 s + SWR, içinde - Redis 15-60 s, täzeleniş wakalary boýunça maýyplyk.
13. 2 Ulanyjy profili
Cache-aside with TTL 30-120 s, bypass 5-10 s profil täzelenenden soň (cookie/heder) ýa-da write-through.
13. 3 Walýuta hümmetleri/gollanmalar
Uzyn TTL (minut-sagat) + täze maglumatlar çap edilende maksatly maýyplyk; şertli GET üçin 'ETag'.
13. 4 Gözleg netijesi
Edge-mikrokeş 1-2 s, içinde - refresh-ahead we coalescing, açarda query-parametrleriň kadalaşmagy.
14) Anti-patternler
Maýypsyz nagt pul: diňe TTL-de umyt → uzak penjireler ähmiýetsizdir.
Ullakan 'Wary': "partlama" wariantlary → pes hit-rate.
Prod/experiments → hapalanma üçin ýekeje keş.
TTL gutaranda çeşmede stampede → piklerden gorag ýok.
Berk kepilliksiz pul/hukuk/ACL nagt pul.
"Yzly-yzyna hemme zady" gysmak - goşmaça CPU, ownuk obýektlerde p99-yň ýaramazlaşmagy.
15) Girizmegiň çek-sanawy
- Keshiň derejesini we maksatlaryny kesgitläň (edge/service/local).
- Açarlary düzüň (wersiýa, tenant, parametrleriň kadalaşmagy).
- Desen saýlaň (cache-aside/read-through/refresh-ahead).
- TTL/soft-TTL/jitter sazlaň, SWR-i açyň.
- coalescing/singleflight, stampede garşy goragy durmuşa geçiriň.
- Maýyplygy guraň (wakalar, bellikler, purge/ban).
- Hit-ratio/latentlik ölçeglerini we 'X-Cache' dashbordlaryny giriň.
- Gyzgyn açarlar bilen ýük synaglaryny geçiriň.
- SLO we runbooks belläň.
- Howpsuzlyk/tenant-izolýasiýa we 'Vary' barlaň.
16) FAQ
Q: Näme saýlamaly - cache-aside ýa-da read-through?
A: Ýönekeý hyzmatlar üçin - cache-aside. Merkezleşdirmek we bitewi syýasat gerek - read-through.
Q: Iň amatly TTL-e nädip düşünmeli?
A: Rugsat berilýän köne, täzelenme ýygylygy we maksat hit-rate; jitter goşuň we p95/p99/bahasyna syn ediň.
Q: write-back haçan ýerlikli?
A: eventual-yzygiderlilik kabul edilip bilinjek we "goşmaça ýazmak" üçin ygtybarly nobat/log bar bolan ýokary ýüklenen akymlar üçin.
Q: Ygtyýarly jogaplary kesmek mümkinmi?
A: Hawa, ýöne 'private' we/ýa-da tenant/user belgisini/' Vary 'düwmesine goşuň. truly-private üçin - müşderi keşi.
Q: Keşi nädip gyzdyrmaly?
A: Meşhur açarlaryň sanawlary, arka aýlawly wormer, jülgelerden aglamak, çykmazdan ozal gyzdyrmak/iň ýokary (gara anna we ş.m.).
17) Netijeler
Netijeli kesmek - açar dizaýny + akylly TTL + wakalar boýunça maýyplyk, SWR/refresh-ahead we stampede garşy gorag bilen güýçlendirilen başarnykly saýlanan pattern. Nagt pullary (müşderi/edge/hyzmat) derejelere bölüň, syn edilişini we SLO-ny goşuň we durnukly gizlinlik guýruklaryny, öňünden aýdyp boljak bahany we iň ýokary ýüklere garşylygy alyň.