Տեխնոլոգիան և ենթակառուցվածքը Cash մակարդակները և տվյալների պահպանումը
Քեշ մակարդակները և տվյալների պահպանումը
1) Ինչո՞ ւ է անհրաժեշտ բազմաշերտ կեշ
Քեշը կարճ ճանապարհ է պատասխանելու առանց «թանկ» ենթահամակարգին (BD, արտաքին API, ցանցեր)։ Բազմազանությունը բաժանում է բեռը ՝ CDN/edge զննարկիչ, կիրառական շերտ, որը բաժանված է kesh/BD/պահեստում։ Նպատակները 'նվազեցնել P95/P99, բեռնաթափել origin, ավելի ուժեղ կանգնել պիկի և նվազեցնել բայթ։
2) Քեշի մակարդակի քարտեզը
1. Браузер: `Cache-Control`, `ETag`, `Last-Modified`, `stale-while-revalidate`.
2. CDN/Edge: TTL/ключ, Vary, Signed URLs, image-resize; tiered/shield.
3. API Gateway/WindowMesh: համառոտ պատասխան կեսը անվտանգ GET-ով։
4. Հավելված (in-process): LRU/LFU, near-cache-ի համար «տաք» կոդերի համար, միլիոնավոր։
5. Բաշխված քեշ (Redis/Memcached) 'դինամիկայի հիմնական շերտը։
6. Քեշի ԲԴ ՝ PG/Innodb, PgBouncer multiplexing, materialized views։
7. Սկավառակի/օբյեկտի սթորները ՝ precomputed proapshots, blob-kes (օրինակ, S3 + CDN)։
"Որքան ավելի մոտ է օգտագործողին, այնքան ավելի կարճ է TTL-ը և ավելի քիչ կերպարներ։ որքան ավելի մոտ է տվյալները, այնքան ավելի հարուստ է, որ պահպանողականության քաղաքականությունը"։
3) Keshing Patternes
Cache-Aside (Lazy): Մենք կարդում ենք MISS-ի դեպքում, մենք աղբյուրից բեռնում ենք կեշ։ Պարզ է, տալիս է TTL վերահսկողությունը։
Read-Through: Ծրագիրը կարդում է կեշի միջոցով, ով ինքն է քաշում աղբյուրից։ Հարմար է կենտրոնացնել քաղաքականությունը։
Write-Through-ը 'ձայնագրությունը գնում է քեշ և անմիջապես աղբյուրը։ Ավելի կոնսիստենտալ, բայց ավելի թանկ է ձայնագրությամբ։
Write-Back (Write-Behind): մենք գրում ենք քեշի մեջ, աղբյուրը նորարարվում է ասինխրոնո (հերթը)։ Բարձր արագություն, անհրաժեշտ է առաքման երաշխիքներ և կուռքեր։
Refresh-Ahead: «Tops» -ում մենք թարմացնում ենք նշանակությունը մինչև TTL։
Որտեղ 'խաղերի/խաղերի քարտեր և - cache-aside/read-through; հաշվիչներ/առաջնորդներ 'write-back + CRDT/ագրեգացիա; Waltus/limits - read-through, որը վերահսկվում է TTL-ի հետ։
4) Բանալիներ, հատվածներ և նյարդեր
Шаблон: `domain:entity:{id}:v{schema}|region={R}|currency={C}|lang={L}`.
Ներառեք բանալին միայն այն, ինչ իրականում փոխում է պատասխանը (տարածաշրջանը, արժույթը, լեզուն, սխեմայի տարբերակը)։
Սխեմաների տարբերակումը 'անհամատեղելի փոփոխություններով, ավելացրեք «vN» բանալին' խուսափելով զանգվածային purge-ից։
Namespacing ապրանքները/tenants: «tena.ru: + t:...» - քննադատական է multi-tena.ru համար։
Bloom ֆիլտրը «բանալին գոյության» վրա կարող է նվազեցնել քայլերը աղբյուրում։
5) TTL, թարմություն և հաշմանդամություն
TTL-մատրիցը
ստատիկա (հեշված ֆայլեր): 30-365 օր + «immutable»;
108 և/բաններ ՝ 5-60 րոպե + «stale-while-revalidate»;
առաջնորդներ/գնանշումներ ՝ 2-15 վայրկյան;
տեղեկատու/լիմիտներ) ՝ 1-10 րոպե։
Հաշմանդամությունը իրադարձություններով 'մենք հրապարակում ենք' www.t։ www.ated '- ը հաստատվում է կետային ստեղնաշարի/նախածանցի հաշմանդամությամբ։
Express-based-purge-ը 'թեգերի խմբի մաքրումը (պրոմո/108-ը)։
Soft-Expiry: TTL-ն տալիս է հնացած որպես «stale», միաժամանակ թարմացնում (SWR/SIE)։
Versioned Keys> զանգվածային purge 'ավելի էժան և անվտանգ։
6) Stampede, «տաք» բանալիներ և մրցակցություն
Dogpile/Stampede պաշտպանությունը
Single-flight (request coalescing): մեկ առաջնորդը նորարարում է բանալին, մնացածը սպասում են։
TTL ջիտթերը 'մենք արտահոսում ենք, խուսափում ենք միակողմանի փլուզումից։
SWR-ն տեղական է, մենք ժամանակ ենք տալիս օգտագործողին, մենք թարմացնում ենք։
Hot Keys:- "տաք" բանալին մի քանի փղերի "key # 1.. N ', որը բաժանված է ընթերցմամբ։
- near-cache հիշողության մեջ;
- ww.warm/refresh-ahead Picks-ից առաջ (refresh-ahead)։
- Concarrency-ի վրա լիմիթները ծանր հիվանդությունների համար։
7) Կոնսիստենտալությունը և քրոսային շերտերը
Write-medalidate-ը 'աղբյուրում ձայնագրելիս, սինխրոն հաշմանդամ կերպով փոխանցեք համապատասխան բանալիները (pub/sub)։
Read-rep.ru-ը, երբ անհամապատասխանությունները թարմացրեք քեշը ճիշտ արժեքով։
Eventronvs Strong: քննադատական դրամական վիրահատությունները կարդում ենք ուղղակիորեն/կարճ TTL-ով։ UI-վիտրինները և վիճակագրությունը eventronics են։
CRDT/ագրեգատորներ 'բաշխված հաշվիչների/վարկանիշների համար' «merge-safe» կառուցվածքները (G-Counter, Top-K հոսքերի վրա)։
Կասկադային հաշմանդամ. «Խաղի» նորարարությունը հաշմանդամ է քարտը + ցուցակը + օգտագործողի քեշը։
8) Սերիզացիա, սեղմում և ձևավորում
Մոսկվա 'պրոտոբուֆ/WindoPack ավելի արագ, քան JSON-ը։ CDN/զննարկչի համար - JSON Brotli-ի հետ։
Սպիտակուցիա Redis-ում 'օգտակար օբյեկտների համար> 1-2 KB, բայց հետևեք CPU-ին։
Partial responses/դաշտի պահանջով 'ավելի քիչ բայթ TTFB և RAM-ը։
9) Հեռացման քաղաքականությունը և չափսը
LRU (լռելյայն) անվտանգ է։ LFU-ը ավելի լավ է «հայտնի» բովանդակության համար։
Չափումը/արժեքները 'վերահսկեք (մետրերը' avg value size "," max ")։
Namespace/ten.ru-ի քվոտաները, որպեսզի մեկ ապրանք չուտեր ամբողջ կեսը։
10) Անվտանգություն և PII/PCI
Անձնական/ֆինանսական տվյալները չեն քաշում CDN/edge-ում և ընդհանուր շերտերում։ օգտագործեք հոսանքներ/պրոյեկցիաներ։
Redis-ի զգայուն արժեքների կոդավորումը client-side crypto-ի միջոցով (զգուշությամբ TTL-վերահսկման կորուստներին)։
Խիստ ACL-ը և ցանցերի մեկուսացումը։ Ֆիքսված NAT/IP egress-ի համար պրովայդերների համար։
11) Դիտողությունն ու SLO kesha
Մետրիկները
Hit Ratio (շերտերով և նախածանցներով), Origin Systload-ը։
TTFB/P95/P99 մինչև/կեշից հետո, Latency Redis։
Evictions, OOM, keyspace hits/misses.
Stampede rate (զուգահեռ պարամետրերի մասը), refresh Time-ը։
Stale served % и Freshness lag.
SLO օրինակներ
Խաղերի կատալոգը ՝ Hit Ratio 2485 տոկոսը, TTFB P95 24150 մզ (edge)։
API-հետազոտողներ ՝ Revalidation-hit 2460 տոկոսը, P95-200 մզ։
Redis: P99 վիրահատություն 245 ms, evictions ոչ ավելի քան 1 տոկոսը ժամում։
12) FinOps: կեշի արժեքը
/ GB-ամիսը RAM vs դոլար/RPS origin: հաշվեք մարման կետը։
Syload և egress: CDN + Redis-ը նվազեցնում է ռեգիոնային-origin-ի ելքային լուծումը։
Image/WinP/AVIF-ը և դենորմալիզացիան տալիս են բայթ ամենամեծ տնտեսությունը։
Սահմանեք «թանկ MISS» 'վերլուծություն «baitts MISS ռուսական տարածքը»։
13) Օրինակներ (բեկորներ)
13. 1 Cache-Aside single-flight (կեղծ)
python def get(key, ttl, loader):
val = redis. get(key)
if val: return val with single_flight (key): # only one updates val = redis. get (key) # double check if val: return val data = loader () # request to source redis. setex(key, ttl_with_jitter(ttl), serialize(data))
return data
13. 2 Հաշմանդամություն ունեցող անձանց հրապարակումը
json
{
"event": "game. updated",
"game_id": "g123",
"affected": ["catalog:list:region=TR", "game:card:g123:"]
}
Կոնսյումերը ստորագրվել է ջրանցքի վրա և անում է «DEL »/« PUBLISH» -ը։
13. 3 Բանալին սխեմայի և տեղանքի տարբերակի հետ
game:card:v2:id=g123 region=BR currency=BRL lang=pt-BR
14) Ներդրման չեկի ցուցակ
1. Քեշի և TTL-մատրիցի մակարդակների քարտեզը (ստատիկ/կես/API)։
2. Նեյմինգը նշում է, որ տիրույթը, սխեմայի տարբերակը, www.ru/տարածաշրջանը/արժույթը, ten.ru։
3. Per-endpoint (aside/read-through/write-through/back) ընտրությունը։
4. SWR/SIE, single-flight և TTL-jitter դեմ stampede։
5. Հաշմանդամությունը իրադարձություններով (pub/sub), խմբի համար։
6. Near-cache-ի համար «տաք» և wwarm-ի առջև։
7. Մոսկվան և թեմը (wwww.obuf/WingPack, Brotli), չափի վերահսկումը։
8. LRU/LFU քաղաքականությունները, քվոտաները namespace/tenae-ում։
9. SLO/метрики: hit ratio, latency, evictions, stale %, freshness lag.
10. Անվտանգությունը '108-store անձնական, տոկենիզացիայի, ցանցի/ACL-ի համար։
15) Anti-patterna
«07-cache» «ամեն դեպքում» և TTL-ից հրաժարվելը զրոյական է։
Բանալին ներառում է բոլոր query/վերնագրերը կարդինալիզմի պայթյունը։
Զանգվածային purge «ընդհանուր CDN/Redis» յուրաքանչյուր օրինակով։
Պաշտպանության բացակայությունը stampede-ից և «լավագույն-2019» միանվագ մաքրումը։
Միասնական ընդհանուր Redis առանց քվոտաների/մեկուսացման; «տաք» tenault ուտում է ամբողջ կեսը։
Անձնական պատասխանների քեշինգը edge/CDN-ի վրա։
Freshness/evictions հեռուստացույց չկա կույր կառավարում։
16) iGaming/fintech համատեքստը 'գործնական նոտաներ
Առաջնորդներ/վարկանիշներ ՝ TTL 2-10 s, aggregate հոսքեր + CRDT, SWR ձախողումների ժամանակ։
Խաղերի կատալոգը/բանները ՝ CDN + Redis; բանալին 'տարածաշրջանը/արժույթը/լեզուն; հաշմանդամ «promo: contate»։
Ստատուսներ 'առանց քեշի ձայնագրման ճանապարհին։ կարճ ընթերցումը TTL (363-5 s) կամ ուղղակի հարցում է։
KYC/AML պատասխանները 'keshirurete non-PII derivations (արձաններ), մի պահեք պատկերները/փաստաթղթերը Redis-ում։
VIP ճանապարհը 'առանձին namespace/pul Redis, առաջնային ծառայություն։
Արդյունքը
Ուժեղ քեշի ռազմավարությունը մակարդակների ճարտարապետությունն է, ճիշտ նորարարության արտոնագրերը, մտածված TTL/հաշմանդամությունը, stampede դիմադրությունը, կոկիկ բանալիները և տարբերակները, ինչպես նաև FinOps-ը։ Այս սկզբունքներին հետևելով ՝ դուք կայունացնում եք P95/P99 պոչերը, կնվազեցնեք աղբյուրների վրա բեռը և կստանաք միլիոնավոր վայրկյանների կանխատեսելի արժեք, հենց այն վայրում, որտեղ դա ամենակարևորն է արտադրանքի և բիզնեսի համար։