GH GambleHub

Քեշինգի ռազմավարությունը

1) Ինչու՞ քաշել և որտե՞ ղ դա անել։

Քեշը արագ հիշողության շերտն է, որը նվազեցնում է լատենտությունը և բեռը թանկ ռեսուրսների վրա (CPU/BD/արտաքին API)։ Կարևոր նպատակներ

Արագությունը (p95/p99 ցածր), արժեքը (ավելի քիչ egress/CPU), կայունությունը (ավելի քիչ կախվածություն պիկի տակ)։

Պիկի հարթումը և «աղմկոտ հարևաններից» մեկուսացումը։

Տիպիկ մակարդակները

1. Հաճախորդը (զննարկիչ/բջջային) - HTTP-քեշ, IndexeddDB, wwww.al storage։

2. Edge/CDN - POP-112 ավելի մոտ օգտագործողի, ստատիկա և API-ի մի մասը։

3. L7-դարպասը/Reverse-proxy-Nginx/Envoy/Varnish (միկրոկեշ, SWR)։

4. Ծառայողական քեշը Redis/Memcached-ն է։

5. Ներերակային - in-memory (Caffeine/Guava/LRU-map)։

6. Քեշը BD-ում նյութական ներկայացումներ են, հիբրիդային ինդեքսներ։

Կանոնն այն է, որ հնարավորինս մոտ լինեք սպառողին, բայց ճշմարտությունը պահեք մեկ անգամ։

2) Keshing Patterns

2. 1 Cache-aside (“lazy loading”)

Ծրագիրը նախ կարդում է քեշից։ բաց թողնելիս 'աղբյուրից, ապա գրում է քեշին։

Պլյուսներ ՝ պարզություն, վերահսկողություն։ Մինուսները 'սառը մեկնարկները, հեռացման պատուհանները։

2. 2 Read-through

Ընթերցումը միշտ քեշի միջոցով է, որն ինքնին գնում է աղբյուրին պրոմախի ժամանակ (գրադարան/հավաքող շերտ)։

Հարմար է կենտրոնացնել TTL/սերիլիզացիան։

2. 3 Write-through / Write-back (write-behind)

Write-through-ը 'քեշի ձայնագրումը և աղբյուրը սինխրոնորեն համապատասխանում է վերևի համակարգմանը, լատինականությունը ավելի բարձր է։

Write-back: Քեշի ձայնագրումը, ասինխրոն ֆլեշ ձայնագրությունը աղբյուրում արագ է, բայց միգրացիայի և հակամարտությունների ռիսկերը։

2. 4 Refresh-ahead (proactive)

Կանխատեսում է «շուտով ոչնչացնել TTL» և նորարարել բանալին ֆոնի վրա, կանխելով stampede։

2. 5 Negative caching

Քեշինգը «չկա տվյալներ/404/դատարկ» կարճ TTL-ի վրա նվազեցնում է աղբյուրի բեռը։

2. 6 Micro-caching

Շատ կարճ TTL (0։ 5-5 s) L7-ում «գրեթե դինամիկայի» համար (ցուցակները, հիմնականը) - կտրուկ նվազեցնում է պոչը։

3) HTTP-kash: վերնագրեր և վերահսկողություն

3. 1 Հիմնական վերնագրեր

`Cache-Control`: `max-age`, `s-maxage` (для shared кэшей), `public/private`, `no-store`, `stale-while-revalidate`, `stale-if-error`.

Վալիդատորներ ՝ «ETag» (բովանդակության հեշ), «Lox-Modified»։

Պայմաններով հարցումները '«If-None-Match», «If-Modified-Since» 36304 Dist Modified։

3. 2 Vary և բանալիներ

«Vary: Accept-Encoding, Authorization, Cookie, Accept-Language» - ձևավորում է քեշի տարբեր տարբերակներ։ Microsoft 'Vary ", որպեսզի չխանգարի" պայթեցնել "կարդինալությունը։

3. 3 HTTP պատասխանը


Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60
ETag: "a1b2c3"
Vary: Accept-Encoding

4) Windows և TTL նախագծումը

4. 1 Բանալիներ

Կառուցեք ' user:> id _: profile: v3> (միացրեք սխեմայի տարբերակը)։

Խուսափեք PII-ից։

Հավաքածուների համար + հարցման պարամետրեր (նորմալ և հեռացված)։

4. 2 TTL և համաձայնություն

Կարճ TTL-ն նվազեցնում է անհամաձայնությունը, բայց ավելացնում է բացթողումները։

Կրիտիկական տվյալների համար 'վալիդատորներ («ETag») և SWR (stale-wile-revalidate)։

Հազվադեպ փոփոխողների համար 'երկար TTL + «bombook» հաշմանդամության համար։

4. 3 Տարբերակումը/բաստինգը

Անհամատեղելի փոփոխություններով 'փոխեք նախածանցը/ստեղնաշարի տարբերակը («v2-v3»)։

Ստատիկ ռեսուրսների համար ֆայլի անունով ententh hash-ն է։

5) Հաշմանդամություն 'ռազմավարություն և պրակտիկա

5. 1 Ուղիղ հեռացում

«DEL key »/« PURGE» -ը մրցույթի վրա։ Վտանգը 'հեռացման և բազմաթիվ ընթերցողների միջև մրցավազքը։

5. 2 Tegi/Surrogate keys

Փաստաթուղթը կապեք մի շարք թեստերի հետ (կատեգորիա/հեղինակը)։ Հաշմանդամությունը թեգով է։

В Varnish/Edge — `Surrogate-Key: article:42 tag:author:7` + `BAN tag:author:7`.

5. 3 Event-driven հաշմանդամություն

Pub/Sub (Kafka/NATS) 'աղբյուրի փոփոխության ժամանակ, մենք հրապարակում ենք «medalidate» իրադարձությունը։

Քեշի կոնսուումերները լսում և թարմացնում են բանալիները։

5. 4 Երկբևեռ

Նախ, մենք փակցնում ենք հնացած բանալին (sporTTL), սլայդը, նորարարության և ատոմային փոխարինման ֆոնին։

6) Պայքարը stampede/dogpile և տաք բեկորների հետ

6. 1 Request coalescing (singleflight)

Մեկ արտադրողը նորարարում է բանալին, մնացածը սպասում են արդյունքին (մյուտեքս/պիտակը «նորարարվում է»)։

6. 2 Jitter к TTL

Ավելացրեք պատահականությունը (10-20%) TTL-ի հետ, որպեսզի խուսափեք սինխրոն խորտակումից։

6. 3 Soft-TTL + hard-TTL

Մինչև Soft-TTL-ը քեշից, զուգահեռ refresh-ը։ hard-TTL-ն համարվում է բացթողումներ։

6. 4 Տաք բանալիներ

Տեղական քեշները ընդհանուր (two-tier) վերևում։

Տաք ստեղնաշարի կրկնապատկումը մի քանի գնդակների և ռանդոմային ընտրության մեջ (միայն read-only)։

Rate limit-ը կոնկրետ բանալին նորարարելու համար։

6. 5 Օրինակ Redis + Lua (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 Eviction

LRU 'պարզապես և լավ տեղական համար։

LFU 'ավելի լավ է «երկար» տաք բաների ժամանակ։

ARC/TinyLFU: recency/frequency հավասարակշռությունը։

7. 2 Admission (1934)

Թույլ մի տվեք հսկայական հազվագյուտ օբյեկտներ (TinyLFU/Bloom ֆիլտրեր)։

Մեծ արժեքների թեմը (LZ4/Zstd) սահմանին «չափի/լատենտության»։

8) Շարդինգը և տեղաբանությունը

8. 1 Consistent hashing

Կայուն բաշխում է ստեղները, նվազեցնում շարժումները աճի/սեղմման ժամանակ։

8. 2 Redis/Memcached

Redis Cluster (արցունքներ/շարդներ), Sentinel (feilover), read-only կրկնօրինակումը։

Memcached-ը Sharding-ի հաճախորդն է (ketama hashing), առանց վերարտադրման սերվերի մակարդակում։

8. 3 Տեղական + բաշխված

Կասկադ 'in-proc (միկրո-TTL/LRU) no Redis (TTL ավելի երկար) ռուսական աղբյուրը։

Զգույշ եղեք TTL-ի և քաշ-վալիդատորների հետ։

9) Edge, CDN և L7-kes

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 և պայմանները)

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)

Օգտագործեք «Surrogate-Key» և «ban» պիտակները փաթեթային հաշմանդամության համար։

10) Քեշը և տվյալների ներդաշնակությունը

10. 1 Read-your-writes

Օգտագործողների համար/զամբյուղները տրամադրեք կամ կարճ TTL, կամ ձայնագրությունը քեշի միջոցով (write-through) կամ հաճախորդի մակնշումը (bypass N վայրկյանում ձայնագրելուց հետո)։

10. 2 Eventual vs Strong

Խորհրդատվական/վերլուծական համար 'eventium + երկար TTL։

Փողի/պատվերների կարգավիճակի համար կարճ TTL, վալիդացիա, երբեմն առանց քեշի կրիտիկական ճանապարհների վրա։

10. 3 Ինվարանտներ

Մի քշեք այն դաշտերը, որոնք ազդում են անվտանգության/ACL-ի վրա, առանց խիստ TTL-ի և տեխնիկական ստուգման։

11) Դիտարկումը, SLO և կառավարումը

11. 1 Մետրիկա

hit_ratio (общий и per-route), byte_hit_ratio, miss_rate.
stampede_prevented_total, refresh_ahead_total, ban/purge_total.

Լատենտ ՝ p50/p95/p99 աղբյուրից։

hot _ keys _ topN և նրանց QPS/բայթ։

11. 2 Լոգներ և հետքեր

Լոգո 'X-Cache: HIT/MISS/STALE/MSATING "։

Թրեյսներում նշեք պատասխանների աղբյուրը ("cache = www.ru", "tier = edge" wwww.ru ")։

11. 3 SLO մոտեցում

Օրինակ ՝ "API/catalog p99-250 ms, cache hit 2485 տոկոսը, stampede 240-ը։ Հարցումների 1 տոկոսը"։

11. 4 Runbooks

«Promahi» -ը սկսում է ստուգել TTL-ը, տաքացումը/հաշմանդամությունը, hot-keys-ը, քեշի չափը և ընդունման քաղաքականությունը։

12) Անվտանգություն և մուլտֆիլմ-տենանտիզմ

Կառուցեք tenault-id բանալին (և «Vary» -ում HTTP-ում)։

Մի՛ քշեք մասնավոր պատասխանները որպես «public»։

Ծածկագրեք զգայուն տվյալներ կամ պահեք միայն-PII/ID։

13) Տիպային բաղադրատոմսեր

13. 1 Գրացուցակ/ժապավեն (գրեթե դինամիկա)

Edge-միկրոկեշ 1-3 + SWR-ի հետ, ներսում 'Redis-ը 15-60 s-ով, հաշմանդամություն ունեցող։

13. 2 Օգտագործողի պրոֆիլը

Cache-aside-ը TTL 30-120 s, bypass 5-10-ից հետո (cookie/heder) կամ write-through-ից։

13. 3 Վալյուտո դասընթացներ/ուղեցույցներ

Երկար TTL (րոպե ժամացույց) + նպատակային հաշմանդամություն նոր տվյալների հրապարակման ժամանակ; «ETag» պայմանական GET-ի համար։

13. 4 Որոնման խառնուրդ

Edge-միկրոքեշ 1-2 s, ներսում 'refresh-ahead և coalescing, query-international բանալին։

14) Anti-patterna

Քեշը առանց հաշմանդամության 'հույսը միայն TTL-ի վրա երկար պատուհաններ է։

Հսկա 'Vary': «պայթյունը» տարբերակները ցածր hit-rate են։

Մեկ քեշը կոդավորման/experiments-ի համար բացատրվում է աղտոտումը։

Չկա պաշտպանություն stampede piki աղբյուրի վրա TTL-ի մասնակցությամբ։

Փողի/իրավունքների/ACL-ն առանց խիստ երաշխիքների։

Ֆինլանդիան «միայն անընդմեջ» - ավելացված CPU, փ99 վատացումը փոքր օբյեկտներում։

15) Ներդրման չեկի ցուցակ

  • Քեշի և նրանց նպատակների ստանդարտ մակարդակները (edge/www.dal)։
  • Նախագծեք բանալիները (տարբերակումը, tenault, ստանդարտացումը)։
  • Ընտրեք pattern (cache-aside/read-through/refresh-ahead)։
  • TTL/sport-TTL/jitter, միացրեք SWR-ը։
  • Իրականացրեք coalescing/singleflight, պաշտպանություն stampede-ից։
  • Հաշմանդամություն կազմակերպեք (իրադարձություններ, թեգեր, purge/ban)։
  • Մուտքագրեք hit-ratio/լատենտ և dashbords 'X-Cache "։
  • Տաք բեկորներով բեռի թեստեր կատարեք։
  • Բացեք SLO և runbooks։
  • Անվտանգություն/tenault-մեկուսացում և «Vary»։

16) FAQ

Q 'Ի՞ նչ ընտրել' cache-aside կամ read-through։

A 'Պարզ ծառայությունների համար' cache-aside։ Անհրաժեշտ է կենտրոնացում և միասնական քաղաքականություն 'read-through։

Q: Ինչպե՞ ս հասկանալ օպտիմալ TTL-ը։

Ա 'Հեռացեք թույլատրելի չափից, հաճախականությունից և www.hit-rate; ավելացրեք jitter և դիտեք r95/r99/արժեքը։

Q: Ե՞ րբ է տեղավորվում write-back-ը։

A 'Բարձր բեռնված հոսքերի համար, որտեղ ընդունելի է eventium-կոնսիստենտիվությունը և կա հուսալի հերթը/լոգը «վերագրելու» համար։

Q 'Հնարավո՞ ր է արդյոք գուշակել հեղինակի պատասխանները։

Այո, բայց տեղադրեք «private» և/կամ միացրեք tenault/user բանալին/« Vary »։ Truly-private-ի համար հաճախորդների քեշն է։

Q 'Ինչպե՞ ս տաքացնել քեշը։

A 'Հանրաճանաչ կոմպոզիցիաների ցուցակները, background-wormer, replay logs, տաքացնելով ձուլման/պիկի առջև (սև ուրբաթ և այլն)։

17) Արդյունքները

Արդյունավետ քեշինգը wwww.+ խելացի TTL + դիզայնն է, որը իրավասու է արտոնագիր, որն ամրապնդվում է հաշմանդամություն ունեցող անձանց, SWR/refresh-ahead և պաշտպանություն stampede-ից։ Բաժանեք քեշը մակարդակներում (հաճախորդ/edge/ծառայություն), ավելացրեք դիտարկումը և SLO-ը, և կստանաք կայուն լատենտային պոչեր, կանխատեսելի արժեք և դիմադրություն պիցցիոն բեռների նկատմամբ։

Contact

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

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

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

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

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

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