Amallary we oýun netijelerini kesmek: çemeleşmeler we töwekgelçilikler
1) Näme üçin keselemeli we hakykatdanam nirede gerek?
Kesh - gizlinligi we ýadro ýüküni azaltmak üçin gural. "iGaming" -de bu:- Amallaryň balanslaryny we statuslaryny okamak (ýygy-ýygydan GET soraglary);
- Oýunlaryň/spinleriň we agregatlaryň taryhy (liderbordyň ýokarslary, netijeleriň soňky N);
- Oýunlaryň/üpjün edijileriň meta-maglumatlary, stawkalaryň çäkleri, statiki gollanmalar;
- UX üçin koeffisiýentleriň we "çalt" şahadatnamalaryň görnüşleri (bannerler, mahabat statuslary).
Ýöne nagt pul we netijeler üçin hiç haçan hakykat çeşmesi bolup durmaýar. Hakykat - ledger/gapjyk we üpjün edijiden tassyklanan netijeler.
2) Gyzyl çyzyk: nämäni kesip bolmaz
Pul ýazgysy: balansy (ýazuw amallaryny) ýazmak/hasapdan çykarmak - diňe geleşikler we deňagramlylyk bilen DB/ledger arkaly.
Üpjün ediji tassyklanýança stawka/ýeňiş boýunça çözgütler.
KYC/AML we töleglere täsir edýän baýdaklar.
Syrlar/tokenler (prosesiň ýadyndaky keş, ýöne umumy keş däl).
3) Keşiň esasy nusgalary
Cache-aside (lazy): programma ilki bilen keş-de gözleýär, sypdyrylsa - DB-den okaýar we kese salýar ('get → miss → load → set'). Okamak üçin ähliumumy we howpsuz.
Write-through: DB-daky ýazgy keş arkaly geçýär; açaryň aktuallygyny üpjün edýär, ýöne ýazgynyň gizlinligini ýokarlandyrýar.
Write-behind (write-back): ýazgy ilki keshde, soň asinhron bilen DB-de. Pul/netijeler üçin gadagan - ýykylanda ýitgi töwekgelçiligi.
Read-through: keshiň özi DB-den nädip çykarmalydygyny bilýär (mysal üçin, Redis with modules/sidecar). Meta-maglumatlar üçin gowy.
Maslahat: okamak üçin cache-aside, write-through diňe howpsuz ýerlerde, write-behind - hiç haçan pul/oýun hakykatlary üçin.
4) Yzygiderlilik we idempotentlik
Hakykat çeşmesi: ledger (append-only), 'operation _ id' we idempotent gaýtadan işlemek bilen amallar.
Balans: nagt puldan okaýarys, ýöne islendik tapawudy möhüm hereketlerden öň bazadan tassyklaýarys (depozit/çykaryş/uly stawka).
Maýyplyk: DB → del/expire degişli balans/status açarlaryny üstünlikli ýazan ýagdaýynda.
De-duplikasiýa: webhuklar/tölegler üçin outbox/inbox + idempotency keys; kesh babada gatnaşmaýar, diňe okamagy çaltlaşdyrýar.
5) TTL, maýyplyk we "könelişmek hukugy"
Balans üçin Short-TTL: 1-5 sekunt (ýa-da background refresh bilen soft-TTL).
Geleşikleriň ýagdaýlary: wakalar boýunça işjeň maýyplyk bilen gysga TTL (5-30 s) ('deposit _ completed', 'settled').
Oýunlaryň taryhy: TTL 1-10 minut, "new _ round" hadysasy boýunça maýyplyk.
Meta-maglumatlar/gollanmalar: TTL 10-60 minut, deplok wagtynda warm-up.
Event-driven maýyplyk: wakalaryň tekeri (Kafka/PubSub) 'wallet _ updated', 'bet _ settled', 'bonus _ changed' → abonentler açarlary pozýarlar/täzeleýärler.
6) Antiştorm-patternler (sypdyrmalar we dogonlar tupany)
Request coalescing: bir akym haýyşy baza getirýär, galanlary garaşýar (mutex per key).
Stale-while-revalidate: "birneme köne" berýäris, şol bir wagtyň özünde fonda täzelenýäris.
TTL üçin Jitter: Açarlaryň birbada gutarmazlygy üçin TTL-i (20% -den ±) randomize ediň.
Yzygiderli sypdyrmalar/ýalňyşlyklar - wagtlaýyn negative-cache (aşakda serediň).
7) Negative-caching we ýalňyşlyklaryň çal kardinaly
"Tapylmady" (mysal üçin, entek geleşik statusy ýok) - gysgaça negative TTL 1-3 s.
DB/üpjün edijiniň ýalňyşlyklaryny birnäçe sekuntdan köp saklamaň - ýogsam heläkçiligi düzediň.
Synlamak üçin kanary açarlaryny giriziň: negative-hitleriň paýynyň ýokarlanmagy alertiň sebäbidir.
8) Açarlaryň gurluşy we segmentasiýa
Именование: `wallet:{userId}`, `txn:{txnId}:status`, `game:{provider}:{tableId}:last_results`, `leaderboard:{tournamentId}:top100`.
Segmentler/env/region/brand: 'prod: eu: wallet: {userId}' - kesişmeleri we sebitleýin zibilleri aýyryň.
Kardinallygy çäklendiriň - esasanam liderbordlar we taryh üçin.
9) edge, klaster we ýatda kesh
Edge-kesh (CDN/WAF): diňe şahsy däl maglumatlar üçin (oýun meta-maglumatlary, köpçülige açyk liderbordlar, metbugat). Soraglaryň parametrleri - whitelist; cache-busting goragy.
Redis/Memcached (klaster): şahsy okamak üçin esas; AOF/RDB-snapshotlary, replikalary we kwotalary goşuň.
In-process kesh: gyzgyn gollanmalar üçin mikrosekundlyk giriş; maýyplyk mehanizmleri talap edilýär (broadcast, version key).
10) Pul halatlary: howpsuz çaltlaşdyrmalar
Oýunçynyň balansy
Okamak: TTL bilen cache-aside 1-5 s.
Ýazgy: DB → del balans keshindäki amal; kritiki hereketde (netije/uly nyrh) - "recheck from DB".
Antigona: optimistic locking balans wersiýasy.
Töleg ýagdaýy
Script: Ulanyjy "status täzelenmesini" basýar.
Çözgüt: cache-aside + negative TTL "pending "/" unknown "2-5 s; PSP → maýyplyk.
Bonuslar/weýjer
Agregatlar (% bilen ösüş): 10-30 s keş; "bet _ placed/settled" hadysasy boýunça maýyplyk.
11) Oýun haltalary: hakykaty ýoýmazdan ýokary tizlikli front
Spinleriň/nyrhlaryň taryhy
Wakalaryň soňky N: çäklendirilen keş-sanawy (mysal üçin 100), TTL 1-10 minut, waka 'round _ finished' boýunça doldurma.
Üpjün edijiden tassyklama bolmasa "ýeňşi" görkezip bolmaz → "pending" aralyk statusy.
Durmuş oýunlary (WebSocket)
Çalt birikdirilen müşderiler üçin iň soňky habarlaryň/stoluň ýagdaýynyň 1-3 s gysga möhletli keşi.
Döwlet açarlaryny 'tableId/market' boýunça bölüň.
Liderbordlar
Precompute + 10-60 s üçin nagt pul; köpçülikleýin täzelenmeler üçin - batch täzelenmeleri we "penjireleriň" bölekleýin maýyplygy.
12) Töwekgelçilikler we olary nädip ýapmaly
Iki gezek ýazmak/fantom ýeňişleri: diňe keshden okamak; ähli hasapdan çykarmalar/geçirimler - DB we idempotentlik arkaly.
Köne maglumatlar → oýunçy bilen jedel: gysga TTL, tölegden öň "berk hakykat", aç-açan statuslar ("tassyklamaga garaşýar").
Split-brain kesh-klaster: kworum/sentinel, timeouts, write-behind ret.
Cache stampede gyzgyn açarlarda: coalescing, jitter, stale-while-revalidate.
Kesh-injeksiýa/poisoning: berk açarlar, nyşanlar/kesilen API jogaplar üçin gol, kanareýka barlaglary.
Gizlinlik/PII: kanalyň şifrlenmegi (mTLS), şahsy maglumatlar üçin edge kesiň gadagan edilmegi, gysga TTL, giriş wagtynda arassalamak.
13) Keşiň syn edilmegi
Her gatlak üçin metrikler:- Açar kategoriýalaryna görä Hit/Miss ratio; redis_ops/sec, latency p95/p99, evictions, memory_usage.
- Kanar açarlary: 'cache _ health: {segment}' - negative-keshiň paýyny we täzeleniş wagtyny barlamak.
- Logi: "paketler" bilen ýalňyşlyklar, bir segment boýunça ýygy-ýygydan 'del' = "şowhunly" hyzmatyň alamaty.
- Söwda: "cache get/set/del" açar bellikleri bilen (PII-siz) ýatyr.
14) Kiçi binagärlik (salgylanma)
1. Programma (API/WS) → Redis-klaster (TLS, auth).
2. Hakykat çeşmesi: Wallet DB (ledger), Game results store.
3. Wakalaryň şinasy: 'wallet _ updated', 'bet _ settled', 'promo _ changed'.
4. Maýyp: wakalara abonent → 'del '/' set' gyzgyn açarlar.
5. Edge-kesh: diňe köpçülige açyk çeşmeler/liderbordlar.
6. Syn edilişi: keshiň daşbordlary, stampede boýunça aladalar, negatiw hitler.
15) TTL syýasaty (takmynan matrisa)
16) Takmynan psevdokod (balansy howpsuz okamak)
python def get_balance(user_id):
key = f"wallet:{user_id}"
bal = cache. get(key)
if bal is not None:
return bal sypdyrma: BD-den alyň we gysga TTL + jitter bal = db bilen goýuň. get_wallet_balance(user_id)
cache. set(key, bal, ttl=randint(1,5))
return bal
def apply_transaction(op_id, user_id, delta):
DB-de ýadro ýazgysy idempotentlik if db. exists_op(op_id):
return db. get_result(op_id)
res = db. apply_ledger (op_id, user_id, delta) # cache amallary. delete (f "wallet: {user _ id}") # maýyplyk return res17) Önümçilik taýýarlygynyň çek-sanawy
- Aç-açan bölünişik: DB-de hakykat, keş - diňe okamak üçin.
- Nusgalar: okamak üçin cache-aside; write-behind gadagan.
- Wakanyň maýyplygy: 'wallet _ updated', 'bet _ settled', 'promo _ changed'.
- Gysga TTL + jitter; negative-cache ≤ 3 с.
- Antishtorm: coalescing, stale-while-revalidate.
- Env/region/brand açarlaryny bölmek; kardinallyk çägi.
- Gözegçilik derejesi: hit/miss, evictions, p95, stampede alertleri/negative-spikes.
- Edge-kesh diňe köpçülige açyk; şahsy - diňe Redis/TLS-de.
- Runbook: Russinkron (forced refresh, segment kesişiniň wagtlaýyn öçürilmegi).
- Yzygiderli synaglar: gyzgyn açarlar, stampede maşklary.
Jemleme
iGaming-daky keş "pul üçin ikinji maglumat bazasy" däl-de, okamak tizlendirijisidir. Hakykaty ledger-de saklaň, idempotentligi we wakalaryň maýyplygyny üpjün ediň, gysga TTL we antiştorm-mehanikany saklaň, edge-keş we şahsy maglumatlary paýlaşyň, keş metrlerine gözegçilik ediň. Şeýlelik bilen, "ýeňiş hyýallary", goşa hasaplamalar we kadalaşdyryjy kynçylyklar bolmazdan çalt UX alarsyňyz.
