Çäk iýerarhiýasy
Çäk - amalyň wagtyna/göwrümine/bahasyna resmileşdirilen çäklendirmedir. iGaming we fintech-de çäkler howpsuzlygyň, düzgünleşdirmelere laýyklygyň we töwekgelçilikleri dolandyrmagyň esasyny düzýär. Çäklendirmeleriň iýerarhiýasy goşa harçlanmagyň, stawkalardan/goýumlardan, bonuslardan hyýanatçylykly peýdalanmagyň we jogapkär oýnuň bozulmagynyň öňüni almak üçin kimiň düzgüniniň has möhümdigini we nirede ýerine ýetirilýändigini kesgitleýär.
1) Çäkleriň klassifikasiýasy
Ulanyş güýjüne görä
Hard - ýeňip bolmajak (amallary gadagan etmek).
Soft - duýduryş/friksiýa (kapça, tassyklama), gaýtalananda hard-a çenli ýokarlanmak.
Tebigaty boýunça
Pul: goýumyň/stawkanyň/tölegiň mukdary; gündelik/hepdelik/aýlyk çäkler.
Wagtlaýyn: sessiýanyň dowamlylygy, arakesmeler, "sowatmak", wagt-autlar.
Mukdar taýdan: geleşikleriň, spinleriň, API soraglarynyň sany.
Tizlikli (rate limits): RPS/bäsdeşlik ukyby.
Kwotalar: penjire üçin hereket býudjeti (Günde/hepdede N).
Kontekst: oýun/üpjün ediji/töleg usuly/enjam/ýurt boýunça.
Eýesine görä
Düzgünleşdiriji/marka (tenant/sebit)
Ulgamlaýyn (platforma, infrastrukturany goramak)
Ulanyjylar (RG içindäki self-limits)
2) Ölçegler we açarlar (skoping)
Her çäk kontekste (açar) birikdirilýär:
tenant_id · region · license · currency · channel · brand player_id · kyc_tier · rg_state · age game_id · provider_id · product (casino/sports/live)
payment_method · device_fingerprint · ip_asn
Açar näçe takyk bolsa, şonça-da ileri tutulýar (aşaky iýerarhiýa serediň).
3) Iýerarhiýa we ileri tutulýan ugurlar (most specific wins)
Umumy derejeden hususy derejä çenli derejeleri tertipleşdireliň:
GLOBAL_DEFAULT
< TENANT/BRAND
< REGION/LICENCE
< PRODUCT/PROVIDER/GAME
< CURRENCY/CHANNEL/PAYMENT_METHOD
< PLAYER (KYC/RG)
< SESSION/DEVICE
<REQUEST (idempotency-key operation)
Düzgünler:
- Has dar kontekst giňligi ýapýar: player> region.
- Islendik aç-açan deny allow ýeňýär.
- Soft/hard gapma-garşylyklary hard-yň peýdasyna çözülýär.
- Kwotalaryň/penjireleriň merjesinde iň az rugsat berilýän baha (min-cap) ýeňýär.
4) Maglumatlaryň modeli (ýönekeýleşdirilen)
sql
CREATE TABLE limits (
id bigserial primary key,
scope jsonb, -- context keys (tenant, region, player_id,...)
kind text, -- bet_amount, deposit_daily, rps_api, payout_single, session_duration type text, -- HARD SOFT QUOTA RATE value numeric, -- sum/qty/seconds/ops window_sec int, -- for QUOTA/RATE, else null burst int, -- for RATE token-bucket currency text, -- if applicable reason_code text, -- regulator/product/security valid_from timestamptz,
valid_to timestamptz,
priority int default 0, -- manual specificity overlide created_by text,
created_at timestamptz default now()
);
CREATE TABLE limit_counters (
key_hash text primary key, -- hash(scope,kinda,window_start)
window_start timestamptz,
consumed numeric, -- money/pcs/sec updated_at timestamptz
);
Idempotentlik: ähli amallar 'operation _ id' göterýär; hasaplaýjynyň inkrementi bir gezek ýerine ýetirilýär (inbox/outbox ýa-da compare-and-swap wersiýasy boýunça).
5) Baha beriş algoritmi (evaluation)
1. "kind" we "scope" çatrygy boýunça dalaşgärleri ýygnamak.
2. Aýratynlygy boýunça reýting (gabat gelýän ölçegleriň sany) we 'priority'.
3. Merge parametrleri: berklik (hard> soft), min-cap, min-window.
4. Kwotalary/reýt-çäkleri barlamak: belgi-baket (RATE) + fiks/süýşýän penjire (QUOTA).
5. Решение: `ALLOW | SOFT_WARN | DENY` + `retry_after`/`remaining`.
6. Yz ýazgysy: wakanyň we metrikanyň barlagy.
json
{
"decision":"DENY",
"kind":"deposit_daily",
"remaining":0,
"window_reset_at":"2025-10-31T21:00:00Z",
"matched_limit_id":12345,
"policy":"REGULATORY",
"reason":"DAILY_CAP_REACHED"
}
6) Ulanyş nokatlary (enforcement points)
API Gateway - infrastrukturany goramak: RATE (RPS), CONCURRENCY, burst.
Domen hyzmatlary - semantik çäkler: goýumlar, stawkalar, tölegler, sessiýalar.
Üpjün ediji adapterler - üpjün edijileriň gaýtalaýan/lokal çäkleri (çagyrylýança tassyklamak).
Müşderi UX - öňüni alyş maslahatlary (SOFT), "N galdy", taýmerler.
Düzgün: Bir gezek kwotany/bellikleri - amalyň yzyna dolanyp bolmajak ýerinde (gapjyk/hakyky tassyklanan ädim saklanylandan soň) ýazýarys.
7) Pul çäkleri: goýum/stawka/töleg
Per currency: çäklendirmeleri FX arkaly däl-de, amalyň walýutasynda saklaň.
Min/Max: `min_bet`, `max_bet`, `max_payout_single`.
Penjireler: kesgitlenen çäkli 'deposit _ daily/weekly/monthly' (mysal üçin, ygtyýarnamanyň wagt zolagynda).
Kompozisiýa: iň soňky rugsat edilen aralyk = kesişme (sebit ∩ marka ∩ ulanyjy).
8) Jogapkär oýun (RG)
Self-limits (oýunçy özi kesgitledi) elmydama marka çäklerinden has berkdir.
Wagt çäkleri: 'session _ duration', 'cool _ off', 'self _ exclusion'.
Eskalasiýa: ýumşak çäkden ýokary → duýduryş, gaýtalamak → hard (penjiräniň içinde).
Audit: RG-nyň her bir üýtgemegi düzedilmän ýazylýar (kim/haçan/näme üçin).
9) Rate limit vs Quota: haçan näme
Rate limit (token-bucket/leaky): partlamalardan goramak; gateway/adapterlerde ulanmak.
Quota (fixed/sliding window): hereketleriň/puluň umumy býudjetini dolandyrmak; domende ulanmak (deposit_daily, bet_count_hourly).
Köplenç bilelikde ulanylýar: 'RATE' (duýdansyz iň ýokary) + 'QUOTA' (gündelik býudjet).
10) Köp tenant we köp sebit
Çäklerde elmydama 'tenant _ id' we 'region/licence' bar.
Residency: hasaplaýjylar we saklamak - "öý" sebitinde.
Fairness: RATE/QUOTA per tenant pullaryny bölüň, şonuň üçin "şowhunly" başgalaryň SLO-syny bozmaz.
11) Idempotentlik we yzygiderlilik
Buyruklar 'operation _ id'; gaýtalamak 'consumed' -i köpeltmeli däldir.
Pul üçin - strict path: gapjyk ätiýaçlygy we bir geleşikde/sagda (TCC) counters inkrement.
RATE üçin - häzirki penjiräniň atom inkrementlerini/ammarlaryny ulanyň.
12) Gözegçilik etmek
Metrikler:- `limit_eval_p95_ms`, `decision_rate{ALLOW,DENY,SOFT}`,
- 'quota _ remaining _ percent' esasy görnüşleri boýunça,
- `rate_throttled`, `burst_dropped`,
- `rg_self_limit_hits`, `regulatory_hits`.
Логи/трейсинг: `matched_limit_id`, `scope_hash`, `operation_id`, `window_start/reset`, `remaining`.
Alertler: 'DENY '/' 429' bosagadan ýokary, düzgünleşdiriji kaplaryň ýygy-ýygydan gazanylmagy, oýunçy/enjam boýunça "gyzgyn key".
13) Wersiýalaşdyrmak we audit
Her düzgün - 'valid _ from/valid _ to', 'created _ by', 'reason _ code'.
События: `LimitCreated/Updated/Deleted`, `LimitHit`, `LimitDenied`.
Taryhy çözgütleri (dispute-ready) oýnamak üçin işjeň düzgünleriň "suratyny" saklaň.
14) Synag
Contract tests: aýratynlyklaryň/ileri tutulýan ugurlaryň shemasy we merji.
Property-based: "most specific wins", "deny allow", "min-cap".
Golden cases: standart gapma-garşylyklar toplumy (tenant vs sebit, RG vs marka).
Chaos: soraglar (RATE), hasaplaýjylar boýunça ýaryşlar, toparlaryň gaýtalanmagy (idempotentlik).
E2E: düzgünleşdirijiniň çek-sahypalarynda limitleriň duşuşyklary (goýum/hepde/aý).
15) Pleýbuklar
1. Gateway-de tupan 429/throttling
Concurrency azaltmak, token-baket wagtlaýynça artdyrmak, möhüm ýollaryň ileri tutulmagyny öz içine almak, çeşmeleri seljermek (ASN/IP).
2. Kadalaşdyryjy çäk boýunça köpçülikleýin ýüz öwürmeler
Penjireleriň we wagtlaryň tertibini barlamak; soft-UX (düşündirişleri) uzaltmak, komplayense habar bermek.
3. Ýaryşlar sebäpli ýalan-oňyn şowsuzlyklar
'player _ id/kind' açary boýunça seriýalizasiýany açyň, 'operation _ id' açary boýunça CAS/dedupa geçiň.
4. Üpjün ediji çägi bilen gapma-garşylyk
Min/max per game sinhronlamak, adaptere öňünden tassyklamany goşmak, oýnuň katalogyny/pleýsmentini wagtlaýyn peseltmek.
16) Adaty ýalňyşlyklar
Düzgünleriň arasynda iýerarhiýanyň ýoklugy → "arkan çekmek".
Serwer tassyklamasyz UI-de çäkleri hasaplamak.
Kwotalary reýt-çäkler bilen çalyşmak (we tersine).
Pul çäklerinde (CLP/JPY) walýutalary/ädimleri äsgermezlik etmek.
Deňsizlik ýok → kwotanyň iki gezek ýazylmagy.
Ähli tenantlar üçin birmeňzeş RATE howuzy → problemalar şeýring.
Auditiň ýoklugy → ret edilmegini düşündirmek mümkin däl.
17) Çalt reseptler
Nyrhy kabul etmek: 'max _ bet' = min (sebit, oýun, üpjün ediji, ulanyjy RG); RATE na '/bets. place '= 20 rps/player, QUOTA = 500 stawka/gün.
Depozitler: 'deposit _ daily/monthly' + 'deposit _ single'; PSP çäklerini çaklamak.
Sessiýalar: 'session _ duration' hard + her N minutda ýatlatmalar (soft).
API-gorag: açarlar boýunça global RATE 'ip _ asn' we 'tenant _ id'; kanar penjireleri.
18) Azyk önüminden öň çek-sanawy
- Aýratynlyk iýerarhiýasy we merj syýasaty (most specific wins, deny> allow) hasaba alyndy.
- 'scope', 'kind', 'type', penjireler, walýutalar we ileri tutulýan ugurlar bilen maglumatlaryň modeli.
- Ulanyş nokatlary: gateway (RATE), domen (QUOTA/pul), adapterler (üpjün ediji).
- Idempotentlik ('operation _ id') we açar seriýalizasiýasy; atom hasaplaýjylary.
- Syn edilişi: çözgütleriň metrikleri, penjire laglary, aladalar; 'matched _ limit _ id' bilen yzarlamak.
- Üýtgeşmeleriň we işleriň wersiýalaşdyrylmagy we üýtgemeýän barlagy.
- Synag bukjasy: contract/property/golden/chaos/E2E.
- Köp tenant fairness we data residency berjaý edildi.
- UX SOFT çäkleri üçin: düşnükli habarlar, 'remaining/retry _ after'.
- Wakalaryň pleýbuklary ylalaşyk we goldaw bilen ylalaşylýar.
Netije
Çäkleriň iýerarhiýasy bölünen sanlaryň toplumy däl-de, karar kabul etmegiň ulgamydyr. Anyk aýratynlygy we ileri tutulýan ugurlaryň tertibi, maglumatlaryň ýeke-täk modeli, dogry ulanyş nokatlary, idempotentlik we syn etmek çäkleri howpsuzlygyň we laýyklygyň ygtybarly konturyna öwürýär, bu bolsa tenantlar, sebitler we önümler boýunça giňeldilýär we ösüşe päsgel bermeýär.