GH GambleHub

Микросервистік сәулет

1) Неліктен iGaming микросервистері

Өзгерістер жылдамдығы: фич командаларының тәуелсіз релиздері (төлемдер, контент, тәуекел, турнирлер).
Сенімділік: бір сервистің істен шығуы бүкіл өнімді құлатпайды (істен шығу шекарасы).
Масштабы: «ыстық» домендердің көлденең скейлі (әмиян, лобби, стрим).
Комплаенс: өңірлер/юрисдикциялар бойынша деректерді сегрегациялау.

Қажет емес кезде: шағын команда/көлем, DevOps тәжірибесі жоқ, тесттерді автоматтандыру әлсіз - онда модульдік монолит жақсы.

2) Домендер, жиектер және командалар (DDD + Team Topologies)

Домендік контурлар: Аккаунт/Профиль, ҚҰС/Комплаенс, Төлемдер/Әмиян, Ойын Контенті/Агрегация, Бонустар/Миссиялар, Турнирлер, Маркетинг/CRM, Есептілік/BI.
Bounded Context = деректер моделі мен тіл туралы шарт.
Пәрмен өзгерістерінің ағындары: бір пәрмен = бір контур + олардың SLO.
BFF (Backend for Frontend): клиентке «оркестрді» жинамау үшін Web/Mobile/Partner үшін жеке қасбеттер.

3) Коммуникация: синхрон vs асинхрон

Синхрон (REST/gRPC): шұғыл жауап қажет болғанда (депозит кезінде лимиттерді тексеру).
Асинхрон (Kafka/NATS/SQS): оқиғалар және фондық процестер (кэшбэкті есептеу, тарату, рейтингтерді жаңарту).

Ережелер:
  • Сындарлы жол = желілік хоптардың минимумы.
  • Үйаралық интеграция - оқиғалар және шарттық API арқылы.
  • Онлайнда «5 + синхронды қоңыраулардан тұратын тізбектер» жасамаңыз → EDA/сағаларды пайдалану.

4) Келісімшарттар және нұсқалау

Бірінші келісім-шарт: OpenAPI/AsyncAPI + Schema Registry (Euro/JSON Schema).
SemVer + сыйысымдылық: өрістерді қосу клиенттерді бұзбайды.
Consumer-driven contracts (CDC): CI автопроверки (регрессияға қарсы).
Deprecation policy: қолдау терезесі (12-18 ай), ескі нұсқалар бойынша телеметрия.

5) Оқиғалар, сағалар және консистенттілік

Outbox/Transaction Log Tailing: «деректер + оқиға» атомдық жазбасы.

Сага-үлгілер:
  • Төлемдер/қорытындылар үшін оркестрлеу (орталық үйлестіруші).
  • Бонустар/миссиялар үшін хореография (оқиғаларға реакция).
  • Сәйкестік: 'entityId + action + nonce' кілттері, dedup-тізілімді сақтау.
  • Консистенттілік: «сыртқы» - оқиғалар арқылы; «ішкі» - сервис шегіндегі транзакциялар.

6) Деректер және сақтау

«Өз сторын» қағидаты: әрбір сервис өзінің ДБ (схемаларды оқшаулау) иеленеді.

Қол жеткізу үлгісі бойынша сақтау орнын таңдау:
  • Транзакциялар/баланстар - қатаң инварианттары бар реляциялық (PostgreSQL).
  • Оқиғалар/лог - append-only (Kafka/Redpanda).
  • Кеш/сессиялар - Redis/KeyDB; көшбасшы борттар - Redis Sorted Sets.
  • Іздеу - OpenSearch/Elastic.
  • Материалдандырылған оқу жобалары (CQRS) - жылдам тізімдер/есептер.

7) Сенімділік және орнықтылық

Timeouts/Retry with jitter/Retry-budget тек қана демпотенттік операциялар үшін.
Circuit-breaker/Outlier-ejection сервистер арасында.
Bulkhead: «шулы» апстримдерге арналған жеке пулдар.
Rate limits per-client/route, backpressure (503 + Retry-After).
Dead-letter + poison-message handling кезектерінде.

8) Бақылау қабілеті (Observability)

Трассировка: OpenTelemetry ('trace _ id' шлюз арқылы → сервистер → ДҚ).
Метриктер: RPS, p50/p95/p99, error rate 4xx/5xx, saturation (CPU/mem/queue), бизнес-метриктер (TTP, TtW).
Логи: құрылымдық JSON, PII/PAN/IBAN бүркемелеу, 'trace _ id' бойынша кореляция.
SLO/алерта: маршрут/функция (мысалы, 'Deposit p95 ≤ 300 ms', 'success ≥ 98. 5%`).

9) Қауіпсіздік және комплаенс

Zero-Trust: mTLS сервис сервис (SPIFFE/SPIRE), қысқа мерзімдік сертификаттар.
AuthN/Z: OAuth2/JWT (aud/scope/exp), рөлдердің шектелген атрибуттары.
Құпиялар: KMS/Secrets Manager/Sealed Secrets, кілттерді ротациялау.
GDPR/деректерді оқшаулау: өңірлік кластерлер, API-шлюздегі geo-fencing.
Аудит: өзгермейтін журналдар (WORM), әкімшілік әрекеттерді трассалау.

10) Тарату және релиздер

Контейнерлер/K8s: бір қызмет = бір deploy; ресурстар/лимиттер; PodDisruptionBudget.
CI/CD: линтерлер, unit/contract/integ-тестілер, security scan, SBOM.
Релиздер: canary/blue-green/shadow, expand-and-contract арқылы схемаларды көшіру.
Автоскейл: CPU + RPS + p95 + queue-depth бойынша HPA; бұрылғанда drain.

11) Өнімділік және құн

Пішіндеу: p95/99 «сервистер мен әдістер бойынша», flame-бағандар.
Кешіктіру: read-through/write-through; TTL/оқиғалар бойынша мүгедектік.
Data locality: ыстық деректерді есептеуге жақын ұстау.
FinOps: 60-70% жүктеу таргеті, «warm pools», белсенді емес воркерлердің авто-үзілісі.

12) Домен үлгілері (iGaming)

12. 1 Төлемдер/Әмиян

Сервистер: 'payments-gw' (қасбет), 'wallet', 'psp-adapters-', 'fraud-check'.
Ағыны: 'init → reserve → capture/rollback' (сага).
События: `PaymentInitiated`, `PaymentAuthorized`, `PaymentSettled/Failed`.
Ұқсастығы: 'Idempotency-Key', дедуп в 'wallet'.

12. 2 ҚҰЖ/Комплаенс

Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.
События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.
Аудит және ETA: тапсырмалар кезегі, кейстің тайм-лайн, post-actions.

12. 3 Бонустар/Миссиялар

Сервистер: 'bonus-engine', 'wallet-bonus', 'eligibility'.
Хореография: 'BetPlaced → BonusEngine → BonusGranted → WalletCredited'.
Теріс пайдаланудан қорғау: idempotent гранттар, лимиттер, ережелер симуляторы.

12. 4 Турнирлер/Лидбордтар

'tournament-svc', 'scoring', 'leaderboard' сервистері.
Сақтау: Redis ZSET + OLAP-та мерзімді «түсіру».
События: `ScoreUpdated`, `TournamentClosed`, `RewardIssued`.

13) «Келісім-шарт + оқиға» мысалы (оңайлатылған)

OpenAPI (үзік) - Wallet

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 (фрагмент) - оқиға

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

14) Тестілеу

Домендік ережелер үшін Unit/Property-based.
CDC (Pact/Assertible) - провайдерлердің/тұтынушылардың келісімшарт-тестілері.
Жергілікті брокерлермен интеграциялық (Testcontainers).
сыни флау E2E (тіркеу → депозит → ойын бастау → шығару).
Chaos/Failover-тесттер: PSP өшіру/брокердің құлауы/аймақты жоғалту.

15) Метрика және SLO (минимум)

Сервистердің қолжетімділігі: '99 ≥. 9% төлем/әмиян үшін.
Latency p95: Критикалық жолдың API ≤ 300-500 мс.
Error budget: 0. 1–0. тоқсанына 5%, burn-alerts.
Кезектер: lead time оқиғалар (produce → consume), DLQ ≤ 0. 1%.
Бизнес: TTP, TtW, FTD-success, KYC-TtV.

16) Чек парақтары

Сервисті жобалау

  • Нақты домен шегі және деректер иесі.
  • OpenAPI/AsyncAPI келісімшарттары + Registry-дегі схемалар.
  • SLO/алерта анықталған; метриктер/трейстер/логтар орнатылған.
  • Таймауттар/ретрайлер/іспеттілік саясаты.
  • Схемаларды көшіру: expand-and-contract.

Шығару алдында

  • Unit/CDC/интеграциялық тесттер жасыл.
  • Канареялық бағыт және қайтару жоспары.
  • Rate-limits/салмақ бағыттары теңшелген.
  • Құпиялар/кілттер/сертификаттар айналады.
  • Фича-жалаулар мен фоллбектер дайындалды.

17) Қарсы үлгілер

Желі деректер шинасы ретінде: оқиғалар орнына терең синхронды тізбектер.
Жалпы «құдай» - барлық сервистерге ДБ.
Сәйкессіздіктің болмауы → екі есе есептен шығару/есептеу.
Телеметриясыз қара релиздер және kill-switch.
Жасырын сессиялылық (сыртқы жай-күйінің орнына барлық жерде жабысқақтық).
Келісімшарттар «кодта» нұсқасыз және CDC.
Сервистердің орнына API-шлюздегі логика (шлюз = жіңішке).

18) Монолиттен көшу (Strangler Fig)

1. Қасбет-шлюз пен бірінші контурды таңдау (мысалы, төлемдер).
2. Экрандық логиканы (outbox) монолиттен оқиғаларға алып тастау.
3. Эндпойнттарды жаңа сервиске біртіндеп көшіру (маршруттау/канареялық салмақтар).
4. Монолитті «ядроға» дейін қысу және өшіру.

19) Стек және инфрақұрылым (мысал)

Коммуникациялар: REST/gRPC, Kafka/NATS; Schema Registry.
Сақтау орындары: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP — ClickHouse/BigQuery.
Қажет болған жағдайда контейнерлер/оркестрлер: Docker, Kubernetes (Ingress/Gateway), Service Mesh (Istio/Linkerd).
Шлюз: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pact/OWASP/ZAP.
Observability: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Қорытынды шпаргалка

Шектерді домендер және деректер жауапкершілігі бойынша жобалаңыз.
Синхрон - тек қазір жауап қажет болған жерде ғана; қалғаны - оқиғалар.
Келісімшарттар/схемалар/CDC - регрессиядан сақтандыру.
Сағалар + outbox + іспеттілік - сенімділіктің іргетасы.
Байқау және SLO - опция емес, «дайын» өлшемі.
canary/blue-green арқылы релиздер, көші-қон - expand-and-contract.
Қауіпсіздік/комплаенс: mTLS, JWT, KMS, аймақтық деректер.
Алдымен модульдік монолит, содан кейін эволюция - егер ауқым мен команда дайын болса.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.