Dlaczego kasyna przechodzą na architekturę modułową
Dlaczego kasyno modularność
Monolit historyczny spowalnia wzrost: każda zmiana pociąga za sobą zwolnienie całego systemu, integrację dostawców i PSP hit SLO, aktualizacje zgodności - w całym kodzie. Architektura modułowa (domena-driven + kontrakt API + wydarzenia) pozwala:- Szybkie wyświetlanie funkcji i łączenie dostawców bez koordynowania „każdy z każdym”;
- Skala selektywnie (wideo na żywo oddzielnie od kasy, portfel oddzielnie od katalogu gier);
- Ryzyko izolacji (błąd w promo nie obniża portfela);
- Przestrzeganie licencji (rejestrowanie/wersje/zasady w granicach domeny);
- Ograniczenie TCO poprzez wyraźne umowy, ponowne wykorzystanie i automatyzację.
Mapa domeny (przykład podziału)
Portfel/Księga - pieniądze, zabezpieczenie walutowe, salda bonusowe, PITR, audyt.
Kasjer/Płatności - PSP, on-ramp/off-ramp, KYT, idempotent webhooks.
Gaming Bridge - adaptery dostawcy, normalizacja okrągłego/zakładu.
Katalog/Lobby - gry, dostawcy, funkcje i zasady wyświetlania.
Promocja/Bonus - zasady akcji, kupony, zakład.
KYC/AML/RG - weryfikacja tożsamości, sankcje/PEP, limity i samodzielne wykluczenie.
Doświadczenie - frontend, CDN, i18n, A/B, Telegram WebApp.
Telemetria/Analityka - wydarzenia, prezentacje, ML/AI.
Zgodność i audyt - raporty MGA/UKGC, archiwum WORM.
Zasady architektury modułowej
1. Granice DDD (kontekst ograniczony). Jasna znajomość danych i logiki.
2. API-first + wydarzenia. OpenAPI/AsyncAPI, JSON-Schema, testy kontraktowe.
3. Wersioning i kompatybilność. "v1 → v1. 1 → v2 '(rozszerzyć → migrate → contract).
4. Idempotence & Dokładnie raz-intent. Klucze żądania, deduplikacja zdarzeń.
5. Domyślne zabezpieczenie. mTLS, podpisy HMAC, krótka JWT, RBAC/ABAC.
6. Niezależne wydania. Kanaryjskie/niebiesko-zielone rozmieszczenie, „dwurzędowe” migracje są zabronione.
7. Obserwowalność. End-to-end 'traceId', metryki SLO na moduł.
8. Flagi Ficha. Segmenty ruchu/geo/użytkownika, bezpieczne rolki.
Warstwa integracyjna: jak połączyć dostawców i PSP
Wzór Adapter/Bridge: każdy dostawca gier/płatności jest wtyczką z jednym kontraktem na platformę.
Gry: normalizacja ' Id/betId/status', mapowanie błędów, limit cache.
Płatności: jeden interfejs' autorize/capture/refund/payout ", haki internetowe z idempotencją.
Odłączalność - Wadliwy adapter jest przenoszony do konserwacji bez wpływu na innych.
Przykładowy kontrakt (fragment OpenAPI):yaml post/wallet/debit:
Ciało:
treść:
wniosek/json:
schemat:
$ ref: '#/components/schemas/DebitRequest @ v1'
odpowiedzi:
'200': {$ ref: '#/components/schemas/DebitResult @ v1'}
„409”: {opis: IDEMPOTENT_REPLAY}
Zdarzenia jako „układ krążenia”
Autobus (Kafka/NATS) Wydarzenie →:- 'bet. umieszczone ',' okrągłe. settled ',' wypłata. zgłoszony/zatwierdzony „,” kyc. zweryfikowany/nieudany ',' rg. limit_set', bonus. wydane/zużyte „,” kasjer. webhook. otrzymał „,” portfel. hold/release ',' alert. slo_breach'.
- Wydarzenia nie odwołują przeszłości; korekty - poprzez oddzielne zdarzenia kompensacyjne.
- Każdy moduł pisze tylko swoje oryginalne wydarzenia, pochodne - jako nowe tematy.
dane: warstwy i spójność
OLTP na moduł: Postgres/MySQL/МDB - odizolowane transakcje.
OLAP/sklepy: ClickHouse/Query są zbudowane z wydarzeń; OLTP i analityka nie mieszają.
Funkcja Store/ML: niezależna warstwa OLTP z funkcją i wersjami TTL.
Spójność: strategicznie ostatecznie między modułami, a za pieniądze - lokalne działania ACID + idempotent na granicach.
Wdrażanie i skalowanie
Pojemniki (Docker/K8s): modulo autoskalowe (portfel - CPU/IO; wideo na żywo - sieć; most - RPS).
Izolacja obwodów: zasady sieci, indywidualne sekrety/klucze na moduł, różne sklepy PII/money/telemetry.
Kształtowanie ruchu: flagi funkcji, udział kanaryjski, trasy regionalne.
DR/HA: Multi-AZ; aktywa-zobowiązania pieniężne, aktywa-aktywa do odczytów/mediów.
Zgodność jest „szyta” do modułów
KYC/AML/RG to moduł zastrzeżony z polityką i dziennikiem rozwiązań („keyVer”).
Audyt/WORM - niezmienny sklep z pieniędzmi/rundami/płatnościami.
Sprawozdawczość - eksport według jurysdykcji (MGA/UKGC), SLA dla kompletności/terminowości.
Strumienie próbek
Stawka → obliczanie → płatność
1. „most” wysyła „bet. placed” (idempotent).
2. 'portfel' sprawia, że 'hold' i publikuje portfel. hold '.
3. 'gaming-bridge' dostaje wynik → 'round provider. załatwione ".
4. "portfel" uważa "rozliczyć" (zwolnienie/wypłata) → "portfel. załatwione ".
5. "promo" pochłania zdarzenia i nalicza premię → "bonus. wydane ".
Pulpit (depozyt)
1. 'cashier' tworzy płatność '. intencja "" Idempotency-Key ".
2. PSP wywołuje webhook → 'kasjer. webhook. otrzymane ".
3. "portfel. credit 'właściwie → wydarzenie dla analityków i RG.
Zmiany bez przestojów (rozszerzyć → migracja → umowa)
1. Rozwiń: Dodano pola/punkty końcowe do 'v1. 1 ', starzy klienci nie łamią.
2. Migracja: konsumenci czytają nowe rzeczy, piszą w obu wersjach (podwójne zapisy tylko dla niepieniężnych).
3. Umowa: ogłoszona EOL 'v1. 0 ', usunięte po N tygodniach zgodnie z planem.
Inżynieria platformy
Złote ścieżki: szablony modułów (repo askeleon, CI/CD, alerty, SLO, tajemnice).
Testy kontraktowe: testy paktu/asyncAPI w CI; środowisko integracji z fałszywymi dostawcami.
Katalog serwisowy (Backstage): kto jest właścicielem, SLA, wersje API, książki incydentów.
Metryka sukcesu modularności
Czas wiodący od pomysłu do wydania produkcyjnegoX razy.
Częstotliwość uwalniania w zależności od modułu, (na dzień/tydzień), szybkość zmiany - niepowodzenie
MTTR w przypadku incydentów (z powodu izolacji).
Podwykonawca koszt/GGR jest stabilny lub wg wzrostu ruchu (skala selektywna).
Dostawca/czas integracji PSP (od briefing do prod)
Anty-wzory
Mikroservice dla Microservices. Bez jasnych granic danych rośnie łączność i złożoność.
Wspólne DB/schematy między modułami. Zabija izolację i niezależne uwolnienia.
Wydarzenia bez wersji/umowy. Złamać konsumentów „cicho”.
Podwójne pisanie dla pieniędzy. Ryzyko niespójności jest tylko idempotentne kroki przez jednego pisarza.
Globalna „warstwa użytkowa” ze wszystkim. Zamienia się w ukryty monolit.
Brak flag i wyłącznika zabójstw. Każdy błąd natychmiast uderza wszystkich.
Mieszanka OLTP/OLAP. Raporty spowalniają tempo/portfel.
Brak obserwacji. Nie ma nic do pomiaru SLO i powiązania incydentów.
Lista kontrolna przejścia architektury modułowej
Strategia i dziedziny
- Zdefiniowano ograniczone konteksty, właścicieli i KPI modułów.
- Mapa interakcji: API/wydarzenia, krytyka i SLO.
Umowy i bezpieczeństwo
- OpenAPI/AsyncAPI + JSON-Schema; wersja i cykl życia.
- mTLS/HMAC, krótka JWT, RBAC/ABAC na granicach.
Dane
- Podzielony OLTP; zdarzenia są źródłem OLAP.
- Idempotence on API/webhooks, message deduplication.
CI/CD & Wydania
- Kanaryjski/niebiesko-zielony, flagi funkcyjne, modulo autoskalowe.
- Testy kontraktowe w CI; środowisko z fałszywymi dostawcami.
Obserwowalność
- Kłody/mierniki/ścieżki z "traceId'; Deski rozdzielcze SLO.
- Wpisy według mierników biznesowych (VOID, reject, payout lag).
Zgodność
- Archiwum WORM pieniędzy/rundy, eksport raportów regulacyjnych.
- KYC/AML/RG jako oddzielny moduł z dziennikiem rozwiązań.
Mini-przykłady
Miejsce zdarzenia. settled @ v1 ':json
{
"event ":" runda. settled „,” v „:” 1 „,” roundId': „R-2025-10-17-evo-23”, „gameId':” evo _ blackjack _ 23 „,” bets': [{„betId”: „b _ 92f”, „plaاId':” p _ 1 „,” stawka „:” 10. 00 „, „wypłata”:” 15. 00 "," wynik ":" WIN "}]," ts': "2025-10-17T14: 23:13. 120Z, „” traceId': „tr _ 5f1”
}
Idempotentny portfel:
http
POST/portfel/rozliczenie
X-Idempotency-Key: 9a7f-2b1c
{
„roundId':” R-2025-10-17-evo-23 „,” operacje „: [{” plaاId „:” p _ 1 „,” delta „:” 5. 00 ", "waluta":" EUR"}]
}
Architektura modułowa zamienia platformę kasyna z „delikatnej kombinacji” w skład niezawodnych domen: każdy z własnymi umowami, danymi i SLO. Przyspiesza to integrację i uwalnia, zapewnia selektywne skalowanie, upraszcza zgodność i zmniejsza ryzyko incydentów. Zacznij od podkreślenia granic domeny, kontraktów i wydarzeń, splotu w bezpieczeństwie i obserwowalności - a otrzymasz platformę, która rośnie wraz z produktem, nie spowalnia go.