GH GambleHub

Տեխնոլոգիան և ենթակառուցվածքը 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 պոչերը, կնվազեցնեք աղբյուրների վրա բեռը և կստանաք միլիոնավոր վայրկյանների կանխատեսելի արժեք, հենց այն վայրում, որտեղ դա ամենակարևորն է արտադրանքի և բիզնեսի համար։

Contact

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

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

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

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

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

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