Неліктен казино модульдік архитектураға көшеді
Неге казино модульділігі
Тарихи монолит өсуді тежейді: әрбір өзгеріс бүкіл жүйені шығарады, провайдерлер мен PSP интеграциясы SLO-ға, комплаенс-апдейттерге - бүкіл код бойынша соққы береді. Модульдік архитектура (domain-driven + келісімшарттық API + оқиғалар):- Фичтерді тез шығару және провайдерлерді «барлығымен» үйлестірмей қосу;
- Таңдап масштабтау (live-видео кассадан бөлек, әмиян ойын каталогынан бөлек);
- Тәуекелдерді оқшаулау (промо қатесі әмиянды құламайды);
- Лицензияларды сақтау (логикалау/нұсқалар/домендік шекарадағы саясат);
- Нақты келісімшарттар, қайта пайдалану және автоматтандыру арқылы TCO азайту.
Домендер картасы (бөлу мысалы)
Wallet/Ledger - ақша, валюта хеджі, бонустық баланстар, PITR, аудит.
Cashier/Payments - PSP, он-рамп/офф-рамп, KYT, демпотенттік вебхуктер.
Gaming Bridge - провайдерлердің адаптерлері, round/bet нормалануы.
Catalog/Lobby - ойындар, провайдерлер, фичеринг және көрсету ережелері.
Promo/Bonus - акциялар, ваучерлер, wager ережелері.
KYC/AML/RG - жеке басын тексеру, санкциялар/РЕР, лимиттер және өзін-өзі жою.
Experience - фронтенд, CDN, i18n, A/B, Telegram WebApp.
Telemetry/Analytics - оқиғалар, витриналар, ML/AI.
Compliance & Audit - MGA/UKGC, WORM-мұрағат есептері.
Модульдік сәулет принциптері
1. DDD жиектері (bounded context). Деректерді және логиканы нақты меңгеру.
2. API-бірінші + оқиғалар. OpenAPI/AsyncAPI, JSON-Schema, келісімшарттық тестілер.
3. Нұсқалау және үйлесімділік. 'v1 → v1. 1 → v2` (expand→migrate→contract).
4. Idempotency & Exactly-once-intent. Сұраулардың кілттері, оқиғаларды қайталау.
5. Әдепкі қауіпсіздік. mTLS, HMAC-қолтаңбалар, қысқа JWT, RBAC/ABAC.
6. Тәуелсіз релиздер. Канареялық/blue-green деплой, «қос қолтаңбамен» көші-қонға тыйым салынады.
7. Бақылау қабілеті. Өтпелі 'traceId', модуль үшін SLO метрикасы.
8. Фича жалаулары. Трафик/гео/юзер-сегменттер, қауіпсіз кері қайту.
Интеграция қабаты: провайдерлерді және PSP-ні қалай қосу керек
Adapter/Bridge-паттерн: әрбір ойын/төлем провайдері - платформаның бірыңғай келісімшарты бар плагин.
Ойындар: қалыпқа келтіру 'roundId/betId/status', қателер маппингі, лимиттер кеші.
Төлемдер: бірыңғай 'authorize/capture/refund/payout' интерфейсі, іспеттілігі бар вебхактар.
Ажыратылу: Жарамсыз адаптер басқаларға әсер етпей maintenance-ке аударылады.
Келісімшарт үлгісі (OpenAPI фрагменті):yaml post /wallet/debit:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DebitRequest@v1'
responses:
'200': { $ref: '#/components/schemas/DebitResult@v1' }
'409': { description: IDEMPOTENT_REPLAY }
«Қан айналымы жүйесі» сияқты оқиғалар
Шина (Kafka/NATS) → оқиғалар:- `bet. placed`, `round. settled`, `payout. requested/approved`, `kyc. verified/failed`, `rg. limit_set`, `bonus. issued/consumed`, `cashier. webhook. received`, `wallet. hold/release`, `alert. slo_breach`.
- Оқиғалар өткенді жоймайды; түзетулер - жекелеген өтемдік оқиғалармен.
- Әрбір модуль тек өзінің бастапқы оқиғаларын, туындыларын - жаңа тақырыптар ретінде жазады.
Деректер: қабаттар және үйлесімділік
ALTP модуліне: Postgres/MySQL/KeyDB - оқшауланған транзакциялар.
OLAP/витриналар: ClickHouse/BigQuery оқиғалардан құрылады; OLTP мен талдауды араластырмаймыз.
Feature Store/ML: fich және TTL нұсқалары бар OLTP тәуелсіз қабат.
Келісімділік: модульдер арасында стратегиялық eventual, ал ақша үшін - жергілікті ACID + шекаралардағы демпотенттік әрекеттер.
Деплой және масштабтау
Контейнерлер (Docker/K8s): модуль бойынша автоскейл (wallet - CPU/IO; live-бейне - желі; bridge — RPS).
Периметрді оқшаулау: желілік саясат, модульге жеке құпиялар/кілттер, әртүрлі PII/ақша/телеметрия қоймалары.
Трафик-шейпинг: фича-жалаулар, канареялық үлес, өңірлік бағыттар.
DR/HA: Multi-AZ; ақша үшін актив-пассив, оқу/медиа үшін актив-актив.
Комплаенс модульдерге «тігіледі»
KYC/AML/RG - саясаттары және шешімдер журналы бар жеке модуль ('policyVer').
Audit/WORM - ақша/раунд/төлем оқиғаларының өзгермейтін қоймасы.
Есептілік - юрисдикциялар бойынша экспорт (MGA/UKGC), толық/уақтылы SLA.
Ағындардың үлгісі
Ставка → есептеу → төлем
1. 'gaming-bridge' жібереді 'bet. placed` (idempotent).
2. 'wallet' hold 'жасайды және' wallet 'жариялайды. hold`.
3. 'gaming-bridge' провайдердің нәтижесін алады → 'round. settled`.
4. 'wallet' settle '(release/payout) →' wallet деп санайды. settled`.
5. 'promo' оқиғаларды тұтынады және → 'bonus бонусын есептейді. issued`.
Касса (депозит)
1. 'cashier' параметрін жасайды. intent` с `Idempotency-Key`.
2. PSP вебхук деп атайды → 'cashier. webhook. received`.
3. `wallet. credit 'фактісі бойынша → талдау және RG үшін оқиға.
Бос тұрусыз өзгерістер (expand → migrate → contract)
1. Expand: өрістер/эндпоинт 'v1. 1 ', ескі клиенттер бұзылмайды.
2. Migrate: тұтынушылар жаңа оқиды, екі нұсқада да жазады (тек ақшалай емес үшін dual-write).
3. Contract: EOL 'v1 деп жариялады. 0 ', жоспар бойынша N аптадан кейін жойылды.
Платформалық инженерия
Golden Paths: модуль үлгілері (repo-аскелеон, CI/CD, алерталар, SLO, құпиялар).
Келісімшарттық тесттер: Pact/AsyncAPI tests в CI; фейк-провайдерлермен интеграция ортасы.
Сервистер каталогы (Backstage): кім иеленеді, SLA, API нұсқалары, оқиғалар-қолхаттар.
Модульдік жетістік өлшемдері
Lead time идеядан прод-релизге дейін ↓ X рет.
Модуль бойынша релиздердің жиілігі ↑ (күн/апта), change-fail rate ↓.
Инциденттер бойынша MTTR ↓ (оқшаулаудан).
Infra cost/GGR тұрақты немесе ↓ трафиктің өсуі кезінде (сайлау скейлі).
Провайдердің/PSP интеграциялану уақыты (брифингтен прод.) ↓.
Қарсы үлгілер
«Микросервистер үшін микросервистер». Деректердің нақты шектері болмаса, байланыстылық пен күрделілік өседі.
Модульдер арасындағы жалпы ДБ/схемалар. Оқшаулау мен тәуелсіз релиздерді өлтіреді.
Нұсқасыз/келісімшартсыз оқиғалар. Тұтынушыларды «тыныш» бұзады.
Dual-write ақша үшін. Келіспеушілік тәуекелі - тек бір жазушы арқылы ғана демпотенттік қадамдар.
Барлығымен қатар жаһандық «утилити-қабат». Жасырын монолитке айналады.
Жалаушалар мен kill-switch жоқ. Кез келген қателік бірден бәріне әсер етеді.
OLTP/OLAP араластыру. Есептер мөлшерлемені/әмиянды тежейді.
Бақылаусыз. SLO өлшейтін және оқиғаларды байланыстыратын ештеңе жоқ.
Модульдік сәулетке көшудің чек-парағы
Стратегия және домендер
- Модуль бойынша bounded contexts, иелері және KPI анықталған.
- Өзара іс-қимыл картасы: API/оқиғалар, сындылық және SLO.
Келісімшарттар және қауіпсіздік
- OpenAPI/AsyncAPI + JSON-Schema; нұсқа және өмірлік цикл.
- mTLS/HMAC, қысқа JWT, RBAC/ABAC шекараларында.
Деректер
- Бөлінген OLTP; оқиғалар - OLAP үшін дереккөз.
- API/вебхуктардағы Idempotency, хабарларды дедупликациялау.
CI/CD және релиздер
- Канарейка/blue-green, фича-жалаулар, модуль бойынша автоскейл.
- CI-дегі келісімшарттық тестілер; фейк-провайдерлермен орта.
Бақылау мүмкіндігі
- 'traceId'; SLO-дашбордтар.
- Бизнес-метриктер бойынша алерттар (VOID, reject, payout lag).
Комплаенс
- WORM-ақша/раунд мұрағаты, реттеуші есептілік экспорты.
- KYC/AML/RG шешімдер журналы бар жеке модуль ретінде.
Шағын мысалдар
'round' оқиғасы. settled@v1`:json
{
"event":"round. settled", "v":"1", "roundId":"R-2025-10-17-evo-23", "gameId":"evo_blackjack_23", "bets":[{"betId":"b_92f","playerId":"p_1","stake":"10. 00","payout":"15. 00","outcome":"WIN"}], "ts":"2025-10-17T14:23:13. 120Z", "traceId":"tr_5f1"
}
Идемпотенттік әмиян:
http
POST /wallet/settle
X-Idempotency-Key: 9a7f-2b1c
{
"roundId":"R-2025-10-17-evo-23", "operations":[{"playerId":"p_1","delta":"5. 00","currency":"EUR"}]
}
Модульдік архитектура казино платформасын «нәзік комбайннан» сенімді домендер композициясына айналдырады: әрқайсысы өз келісімшарттарымен, деректерімен және SLO-мен. Бұл интеграция мен релиздерді жеделдетеді, сайлауды кеңейтеді, комплаенсті жеңілдетеді және оқыс оқиғалардың қаупін төмендетеді. Домендік шектерді, келісімшарттарды және оқиғаларды бөліп көрсетуден бастаңыз, қауіпсіздік пен бақылауды «тоқыңыз» - сонда сіз өнімді тежемей, онымен бірге өсетін платформаны аласыз.