GH GambleHub

Architektura mikroservice

1) Dlaczego mikroservices w iGaming

Szybkość zmian: niezależne wydania funkcji zespołu (płatności, treść, ryzyko, turnieje).
Niezawodność: awaria jednej usługi nie zmniejsza całego produktu (granice awarii).
Skala: pozioma skala domen „gorących” (portfel, lobby, strumienie).
Zgodność: podział danych według regionu/jurysdykcji.

Kiedy nie warto: mały zespół/tom, brak praktyk DevOps, słaba automatyzacja testów - wtedy modułowy monolit jest lepszy.

2) Domeny, granice i zespoły (DDD + Topologie zespołu)

Kontury domeny: Konto/profil, CCM/Zgodność, Płatności/Portfel, Zawartość gry/Agregacja, Bonusy/Misje, Turnieje, Marketing/CRM, Raportowanie/BI.
Ograniczony kontekst = model danych i umowa językowa.
Zmień przepływ poleceń: jedno polecenie = jedna pętla + jego SLO.
BFF (Backend for Frontend): oddzielne elewacje dla Web/Mobile/Partner, aby nie zbierać „orkiestry” na klienta.

3) Komunikacja: synchroniczny vs asynchroniczny

Synchroniczny (REST/gRPC): gdy potrzebna jest natychmiastowa odpowiedź (sprawdzanie limitów depozytów).
Asynchron (Kafka/NATS/SQS): wydarzenia i procesy tła (memoriałowe cashback, mailingi, aktualizacje ratingu).

Zasady:
  • Ścieżka krytyczna = minimalny chmiel sieciowy.
  • Integracja między domenami - poprzez zdarzenia i umowne interfejsy API.
  • Nie budować „łańcuchy 5 + synchroniczne połączenia” online → używać EDA/sagi.

4) Umowy i wersioning

Umowa pierwsza: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
Kompatybilność SemVer +: Dodawanie pól nie łamie klientów.
Umowy konsumenckie (CDC): automatyczne kontrole w CI (vs. regressions).
Polityka odrzucenia: okno wsparcia (12-18 miesięcy), telemetria dla starszych wersji.

5) Wydarzenia, sagi i spójność

Outbox/Transaction Log Tailing: rekord atomowy „data + event”.

Wzory sagi:
  • Orkiestra (koordynator centralny) dla płatności/produktów.
  • Choreografia (reakcja na zdarzenia) dla bonusów/misji.
  • Idempotence: klucze do 'Id + action + nonce', dedup registry storage.
  • Spójność: „zewnętrzne” - poprzez wydarzenia; „wewnętrzne” - transakcje w ramach usługi.

6) Dane i przechowywanie

Zasada „własnego sklepu”: każda usługa posiada własną bazę danych (odizolowanie systemów).

Wybór pamięci według wzoru dostępu:
  • Transakcje/salda są relacyjne (PostgreSQL) ze ścisłymi niezmiennikami.
  • Wydarzenia/dziennik - tylko dodatek (Kafka/Redpanda).
  • Pamięć podręczna/sesje - Redis/МDB; liderów - zestawy sortowane Redis.
  • Wyszukiwanie - OpenSearch/Elastic.
  • Zmaterializowane projekcje odczytu (CQRS) - szybkie listy/raporty.

7) Niezawodność i stabilność

Timeouts/Retry z jitter/Retry-budget tylko dla operacji idempotent.
Wyłącznik-wyłącznik/zewnętrzny-wyrzut między usługami.
Grodzisko: oddzielne baseny do „hałasu” w górę rzeki.
Limity na klienta/trasę, ciśnienie wsteczne (503 + Retry-After).
Trucizna w kolejkach.

8) Obserwowalność

Ślad: OpenTelemetry ('trace _ id' przez shlyuz → servisy → BD).
Wskaźniki: RPS, p50/p95/p99, szybkość błędów 4xx/5xx, nasycenie (CPU/mem/kolejka), wskaźniki biznesowe (TTP, TtW).
Kłody: struktura JSON, maskowanie PII/PAN/IBAN, korelacja przez 'trace _ id'.
SLO/alerty: do trasy/funkcji (na przykład "Deposit p95 ≤ 300 ms", "success ≥ 98. 5%`).

9) Bezpieczeństwo i zgodność

Zero-Trust: mTLS servis اservis (SPIFFE/SPIRE), certyfikaty krótkotrwałe.
AuthN/Z: OAuth2/JWT (aud/scope/exp), atrybut różnicowania ról.
Sekrety: KMS/Secrets Manager/Sealed Secrets, rotacja klucza.
RODO/lokalizacja danych: klastry regionalne, ogrodzenia geograficzne na bramie API.
Audyt: niezmienne dzienniki (WORM), śledzenie działań administratora.

10) Wdrożenie i wydania

Containers/K8s: jedna usługa = jedno uruchomienie; zasoby/limity; Budżet PodDis .
CI/CD: linters, unit/contract/integ tests, security scan, SBOM.
Wydania: kanaryjski/niebiesko-zielony/cień, migracja programu poprzez rozszerzenie i kontrakt.
Autoskale: HPA przez procesor + RPS + p95 + głębokość kolejki; odpływ po upadku.

11) Wydajność i koszt

Profilowanie: p95/99 „według usług i metod”, wykresy płomieni.
Buforowanie: czytanie/zapisywanie; TTL/niepełnosprawność według zdarzeń.
Lokalizacja danych: Przechowywać gorące dane w pobliżu obliczeń.
FinOps: pobierz cel 60-70%, „ciepłe baseny”, auto-pauza nieaktywnych pracowników.

12) Szablony domeny (iGaming)

12. 1 Płatności/Portfel

Usługi: „płatności-gw” (elewacja), „portfel”, „psp-adapters-”, „kontrola oszustw”.
Strumień: 'init → reserve → capture/rollback' (saga).
Сосктий: „początkowe”, „ΔAuthorized”, „Settled/Failed”.
Idempotencja: „Idempotency-Key”, deadup in 'wallet'.

12. 2 CCM/Zgodność

Сервиса: „kyc-flow”, „doc-storage”, „sankcje-check”, „pep-screening”.

Сова тий: "KycSubmitted/Approved/Rejected", ",

Audyt i ETA: kolejka zadań, etap czasowy, działania pooperacyjne.

12. 3 premie/misje

Usługi: „bonus-engine”, „wallet-bonus”, „eligibility”.
Choreografia: 'BetPlaced → BonusEngine → Premia udzielona → WalletCredited'.
Ochrona przed nadużyciami: idempotentne dotacje, limity, symulator reguł.

12. 4 turnieje/tablice liderów

Usługi: „turniej-svc”, „punktacja”, „liderboard”.
Przechowywanie: Redis ZSET + okresowe „spłukiwanie” w OLAP.
Сова тий: „ScoreUpdated”, „TournamentClosed”, „Rez”.

13) Kontrakt + Przykład zdarzenia (uproszczony)

OpenAPI (fragment) - Portfel

yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }

AsyncAPI (fragment) - wydarzenie

yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]

14) Badanie

Jednostka/nieruchomość dla reguł domeny.
CDC (Pact/Assertible) - dostawca/testy umów konsumenckich.
Integracja z lokalnymi brokerami (Testcontainers).

Krytyczny przepływ E2E (registratsiya → depozit → start igry → vyvod)

Testy chaosu/awaryjnego: zamknięcie PSP/spadek maklera/utrata strefy.

15) Mierniki i SLO (minimum)

Dostępność usług: "≥ 99. 9% 'za płatność/portfel.
Opóźnienie p95: ścieżka krytyczna API ≤ 300-500 ms.
Budżet błędu: 0. 1–0. 5% na kwartał, wpisy oparzeń.
Kolejki: wydarzenia czasu realizacji (produkować → zużyć), DLQ ≤ 0. 1%.
Biznes: TTP, TtW, FTD-sukces, KYC-TtV.

16) Listy kontrolne

Projektowanie usług

  • Wyczyść granicę domeny i właściciela danych.
  • Kontrakty OpenAPI/AsyncAPI + schematy w rejestrze.
  • zdefiniowane SLO/wpisy; mierniki/ścieżki/kłody są wbudowane.
  • Polityka dotycząca Timeout/Retray/Idempotency.
  • Schemat migracji: rozszerzenie i kontrakt.

Przed zwolnieniem

  • Jednostki/CDC/testy integracyjne zielone.
  • Plan trasy kanaryjskiej i odwrócenia.
  • Wartości graniczne/trasy wagi są skonfigurowane.
  • Sekrety/klucze/certyfikaty kopią.
  • Przygotowano flagi i pęcherzyki Ficha.

17) Anty-wzory

Sieć jako magistrala danych: głębokie łańcuchy synchroniczne zamiast zdarzeń.
Wspólny „bóg” - DB dla wszystkich usług.
Brak idempotencji → podwójne odpisy/memoriały.
Ciemne uwolnienia bez telemetrii i wyłącznika.
Sesja ukryta (lepkość wszędzie zamiast stanu zewnętrznego).
Umowy „w kodzie” bez wersji i CDC.
Logika w bramce API zamiast usług (brama = cienka).

18) Migracja monolityczna (dusiciel rys)

1. Wybierz bramę fasady i obwód podstawowy (na przykład płatności).
2. Usuń logowanie binarne (outbox) z monolith do zdarzeń.
3. Stopniowe przenoszenie punktów końcowych do nowej usługi (wagi routingu/kanaryjskiej).
4. Skompresować monolit do „rdzenia” i wyłączyć go.

19) Stos i infrastruktura (przykład)

Komunikacja: REST/gRPC, Kafka/NATS; Rejestr schematu.
Repozytoria: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP - ClickHouse/Query.
Kontenery/orkiestra: Docker, Kubernetes (Ingress/Gateway), Service Mesh (Istio/Linkerd) w razie potrzeby.
Brama: Wysłannik/Kong/Traefik/NGINX.

CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pakt/OWASP/

Obserwowalność: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Końcowy arkusz oszustwa

Projektowanie granic według domeny i odpowiedzialności za dane.
Synchron - tylko wtedy, gdy odpowiedź jest teraz potrzebna; Reszta to wydarzenia.
Umowy/Programy/CDC - Ubezpieczenie regresyjne.
Sagas + outbox + idempotency - podstawa niezawodności.
Obserwowalność i SLO nie są opcją, ale „gotowe” kryterium.
Wydania za pośrednictwem kanarka/niebiesko-zielony, migracje - rozszerzyć i kontrakt.
Bezpieczeństwo/zgodność: mTLS, JWT, KMS, dane regionalne.
Najpierw monolit modułowy, potem ewolucja - jeśli skala i zespół są gotowe.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.