Რატომ გადადიან კაზინოები მოდულურ არქიტექტურაში
რატომ კაზინოს მოდულარობა
ისტორიული მონოლითი აფერხებს ზრდას: თითოეული ცვლილება მოიცავს მთელი სისტემის გამოშვებას, პროვაიდერების ინტეგრაციას და PSP- ს სცემს SLO- ს, შესაბამისობის აპდიტებს მთელ კოდში. მოდულური არქიტექტურა (domain-driven + საკონტრაქტო API + მოვლენები) საშუალებას გაძლევთ:- სწრაფად ამოიღეთ ჩიპები და დაუკავშირდით პროვაიდერებს „ყველას ყველასთან“ კოორდინაციის გარეშე;
- შერჩევით (სალაროდან ცალკე ცოცხალი ვიდეო, საფულე, თამაშების კატალოგისგან დამოუკიდებლად);
- რისკების იზოლირება (შეცდომა არ არის საფულე პრომო);
- დაიცავით ლიცენზიები (ლოგიკა/ვერსიები/პოლიტიკა დომენის საზღვრებში);
- შეამცირეთ TCO მკაფიო კონტრაქტების, ხელახალი გამოყენებისა და ავტომატიზაციის გამო.
დომენის რუკა (დაშლის მაგალითი)
Wallet/Ledger - ფული, ვალუტის ჰეჯი, ბონუსის ნაშთები, PITR, აუდიტი.
Cashier/Payments - PSP, on-ramp/of-ramp, KYT, idempotent ვებჰუკი.
Gaming Bridge - პროვაიდერების გადამყვანები, გზის/ბეტის ნორმალიზაცია.
Catalog/Lobby - თამაშები, პროვაიდერები, ფიჩერინგი და შოუს წესები.
Promo/Bonus - აქციების წესები, ვაუჩერები, wager.
KYC/AML/RG - პიროვნების შემოწმება, სანქციები/REP, ლიმიტები და თვითკმაყოფილება.
გამოცდილება - ფრონტი, 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. დამოუკიდებელი გამოშვებები. კანარის/ცისფერი-მწვანე ქაფით, აკრძალულია „ორი მწერლის“ მიგრაცია.
7. დაკვირვება. 'TraceId' - ის მეშვეობით, SLO მეტრიკა მოდულისთვის.
8. ფიჩას დროშები. ტრაფიკი/გეო/მომხმარებელთა სეგმენტები, უსაფრთხო გამოტოვება.
ინტეგრაციის ფენა: როგორ დააკავშიროთ პროვაიდერები და PSP
Adapter/Bridge შაბლონი: თამაშების/გადახდების თითოეული პროვაიდერი - მოდული პლატფორმის ერთიანი კონტრაქტით.
თამაშები: ნორმალიზაცია 'roundId/betId/status', შეცდომების მაპინგი, ლიმიტის კაში.
გადახდები: ერთი ინტერფეისი 'authorize/capture/refund/payout', ვებჰუკები იდემპოტენტურობით.
გამორთვა: გაუმართავი ადაპტერის გადაკეთება ხდება სხვებზე გავლენის გარეშე.
ხელშეკრულების მაგალითი (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 }
მოვლენები, როგორიცაა „სისხლის მიმოქცევის სისტემა“
Shina (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`.
- მოვლენები არ გააუქმებს წარსულს; კორექტირება - ცალკეული ანაზღაურებადი მოვლენებით.
- თითოეული მოდული წერს მხოლოდ თავის საწყის მოვლენებს, წარმოებულებს - როგორც ახალ თემებს.
მონაცემები: ფენები და კოორდინაცია
OLTP მოდულისთვის: Postgres/MySQL/KeyDB - იზოლირებული გარიგებები.
OLAP/ფანჯრები: ClickHouse/BigQuery აგებულია მოვლენებიდან; OLTP და ანალიტიკა არ არის შერეული.
Feature Store/ML: დამოუკიდებელი OLTP ფენა, რომელსაც აქვს fich და TTL ვერსიები.
კოორდინაცია: სტრატეგიულად ევენტურობა მოდულებს შორის, ხოლო ფულისთვის - ადგილობრივი ACID + იდემპოტენტური მოქმედებები საზღვრებში.
დამპალი და სკალირება
კონტეინერები (Docker/K8s): ავტომატური სკამი მოდული (wallet - CPU/IO; ცოცხალი ვიდეო - ქსელი; 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' იღებს პროვაიდერის შედეგს. settled`.
4. 'wallet' თვლის 'settle' (release/payout) 'wallet. settled`.
5. 'promo' მოიხმარს მოვლენებს და დარიცხავს ბონუს 'bonus. issued`.
სალარო (ანაბარი)
1. 'cashier' ქმნის 'payment. intent` с `Idempotency-Key`.
2. PSP უწოდებს ვებჰუკს 'cashier. webhook. received`.
3. `wallet. Credit 'ფაქტობრივად არის მოვლენა ანალიტიკისა და RG- სთვის.
ცვლილებები გაუარესების გარეშე (ექსპედიცია - migrate - contract)
1. Expand: დაამატეთ ველები/endpoint in 'v1. 1 ', ძველი კლიენტები არ იშლება.
2. Migrate: მომხმარებლები კითხულობენ ახალს, წერს ორივე ვერსიაში (ორმაგი write მხოლოდ ფულადი სახსრებისთვის).
3. კონტრაქტი: გამოაცხადა EOL 'v1. 0 ', N კვირის შემდეგ ამოიღეს გეგმის მიხედვით.
პლატფორმის ინჟინერია
Golden Paths: მოდულის შაბლონები (რეპო-ასკელონი, CI/CD, ალერტები, SLO, საიდუმლოებები).
ხელშეკრულების ტესტები: Pact/AsyncAPI tests CI- ში; ინტეგრაციის გარემო ყალბი პროვაიდერებით.
მომსახურების კატალოგი: ვინ არის მფლობელი, SLA, API ვერსიები, ყდის ინციდენტი.
მოდულარობის წარმატების მეტრიკა
Lead Time იდეიდან პროტო გამოშვებამდე X ჯერ არის.
მოდულის გამოშვების სიხშირე არის (დღეში/კვირაში), ცვლადი - ფაილის რბოლა.
MTTR ინციდენტების შესახებ (იზოლაციის გამო).
Infra cost/GGR სტაბილურია ან ტრაფიკის ზრდის დროს (შერჩევითი skale).
პროვაიდერის/PSP- ის ინტეგრაციის დრო (ბრიფინგიდან პროდ-მდე).
ანტი შაბლონები
მიკროსერვისი მიკრო სერვისებისთვის. მონაცემთა აშკარა საზღვრების გარეშე, იზრდება კავშირი და სირთულე.
ზოგადი BD/სქემები მოდულებს შორის. კლავს იზოლაციას და დამოუკიდებელ გამოშვებებს.
მოვლენები ვერსიის/ხელშეკრულების გარეშე. ისინი მომხმარებლებს „მშვიდად“ არღვევენ.
ორმაგი write ფულისთვის. შეუსაბამობის რისკი მხოლოდ იდემპოტენტური ნაბიჯებია ერთი მწერლის მეშვეობით.
გლობალური „კომუნალური ფენა“ ყველაფრით. იქცევა ფარული მონოლითში.
არ არსებობს fich დროშები და kill-switch. ნებისმიერი შეცდომა დაუყოვნებლივ სცემს ყველაფერს.
OLTP/OLAP ნაზავი. მოხსენებები აფერხებს განაკვეთებს/საფულეს.
დაკვირვების გარეშე. SLO- ს გაზომვა და ინციდენტების დაკავშირება არაფერია.
მოდულურ არქიტექტურაზე გადასვლის სიის სია
სტრატეგია და დომენები
- განისაზღვრება bounded contexts, მფლობელები და KPI მოდული.
- ურთიერთქმედების რუკა: API/მოვლენები, კრიტიკა და SLO.
კონტრაქტები და უსაფრთხოება
- OpenAPI/AsyncAPI + JSON-Schema; ვერსია და სასიცოცხლო ციკლი.
- mTLS/HMAC, მოკლე JWT, RBAC/ABAC საზღვრებში.
მონაცემები
- გაყოფილი OLTP; მოვლენები OLAP- ის წყაროა.
- idempotence API/webhuks, შეტყობინებების დედაპლაცია.
CI/CD და გამოშვებები
- Canareika/blue-green, fica დროშები, autoskale მოდული.
- კონტრაქტის ტესტები CI- ში; გარემო ყალბი პროვაიდერებით.
დაკვირვება
- Logs/metrics/traceID ტრეისები; SLO დაშბორდები.
- ალერტები ბიზნეს მეტრებში (VOID, პროექტი, 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"
}
Idempotent საფულე:
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. ეს აჩქარებს ინტეგრაციას და გამოშვებებს, იძლევა საარჩევნო მასშტაბებს, ამარტივებს შესაბამისობას და ამცირებს ინციდენტების რისკებს. დაიწყეთ აფეთქების ღუმელის საზღვრების, კონტრაქტებისა და მოვლენების განაწილებით, უსაფრთხოება და დაკვირვება - და თქვენ მიიღებთ პლატფორმას, რომელიც პროდუქტთან ერთად იზრდება და არ ანელებს მას.