GH GambleHub

微服務體系結構

1)為什麼在iGaming微服務

更改速度:獨立發布的團隊信息(付款、內容、風險、錦標賽)。
可靠性:單一服務的故障不會影響整個產品(故障邊界)。
規模:「熱」域的水平滑板(錢包,大廳,流)。
合規性:按區域/轄區劃分數據。

不值得的時候:小團隊/音量,沒有DevOps實踐,測試自動化薄弱--那麼模塊化整體更好。

2)域,邊界和命令(DDD+Team Topologies)

域輪廓:帳戶/配置文件,KUS/合規性,付款/錢包,遊戲內容/聚合,獎金/任務,錦標賽,營銷/CRM,報告/BI。
Bounded Context=關於數據模型和語言的約定。
更改流程↔命令:一個命令=一個輪廓+其SLO。
BFF (Backend for Frontend): Web/Mobile/Partner下的單個立面,以免在客戶端上收集「編排」。

3)通訊: 同步vs asinchron

同步(REST/gRPC):當需要立即響應時(在存款時檢查限額)。
Asinhron (Kafka/NATS/SQS):事件和背景過程(現金返還、郵件、評級更新)。

規則:
  • 關鍵路徑=網絡跳的最小值。
  • 跨域集成-通過事件和合約API。
  • 不要在網上建立「5+同步呼叫鏈」→使用EDA/傳奇。

4)合同和考試

合同一:OpenAPI/AsyncAPI+計劃註冊(Avro/JSON計劃)。
SemVer+兼容性:添加字段不會破壞客戶端。
消費者驅動合同(CDC):CI中的自動反駁(反對回歸)。
Deprecation policy:支持窗口(12-18個月),舊版本遙測。

5)事件、傳奇和一致性

Outbox/Transaction Log Tailing:原子記錄「數據+事件」。

傳奇模式:
  • 用於付款/結算的編排(中央協調員)。
  • 編舞(對事件的反應)以獲得獎金/任務。
  • 相似性:「entityId+action+nonce」上的密鑰,dedup註冊表存儲。
  • 一致性:「外部」-通過事件;「內部」-服務範圍內的交易。

6)數據和存儲

「自己的支架」原則:每個服務都擁有自己的DB(電路隔離)。

根據訪問模式選擇存儲:
  • 事務/資產負債表-具有嚴格不變性的關系(PostgreSQL)。
  • 事件/日誌僅適用於(Kafka/Redpanda)。
  • Kesh/會議-Redis/KeyDB;領導板是Redis Sorted Sets。
  • 搜索-OpenSearch/Elastic。
  • 實例化閱讀投影(CQRS)-快速列表/報告。

7)可靠性和可持續性

Timeouts/Retry with jitter/Retry-budget僅用於偶數操作。
服務之間的Circuit-breaker/Outlier-ejection。
Bulkhead:單獨的池到「嘈雜」的apstrims。

Rate limits per-client/route, backpressure (503 + Retry-After).

Dead-letter+poison-message排隊。

8)觀察力(觀察力)

跟蹤:OpenTelemetry(「trace_id」通過shlyuz→servisy→BD)。
度量標準:RPS,p50/p95/p99,error rate 4xx/5xx,aturation(CPU/mem/queue),業務指標(TTP,TtW)。
Logs:結構JSON,PII/PAN/IBAN掩蓋,通過「trace_id」表示。

SLO/Alerts: 路線/功能(例如"Deposit p95 ≤ 300 ms","成功≥ 98。5%`).

9)安全和合規性

零信任:mTLS servis↔servis(SPIFFE/SPIRE),短期證書。
AuthN/Z:OAuth2/JWT(aud/scope/exp),屬性角色劃分。
秘密:KMS/Secrets Manager/Sealed Secrets,按鍵旋轉。
GDPR/數據本地化:區域集群,在API網關上進行地理設置。
審計:不變日誌(WORM),管理操作跟蹤。

10)部署和發布

容器/K8s: 一項服務=一項服務;資源/限制;PodDisruptionBudget.

CI/CD:linters,unit/contract/integ測試,security scan,SBOM。
發行版本:canary/blue-green/shadow,通過擴展和合同遷移電路。
自動軌道:CPU+RPS+p95+queue-depth的HPA;折叠時繪制。

11)性能和成本

剖析:p95/99「按服務和方法」,flame圖。
Cashing:read-through/write-through;TTL/事件障礙。
數據本地性:保持熱數據接近計算。
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 KUS/合規性

Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.

События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.

審核和ETA:任務隊列,案例超時,後期操作。

12.3個獎金/任務

服務:「bonus-engine」,「wallet-bonus」,「eligibility」。
編舞:「BetPlaced → BonusEngine → BonusGranted → WalletCredited」。
防止濫用:特許贈款,限制,規則模擬器。

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。
CDC(Pact/Assertible)是提供商/消費者的合同測試。
與本地經紀人(Testcontainers)集成。
E2E批判性洪水(registratsiya→depozit→start igry→vyvod)。
Chaos/Failover測試:PSP關閉/經紀人下降/區域丟失。

15)度量和SLO(最低)

服務可用性:'≥99。9%用於支付/錢包。
Latency p95:關鍵路徑的API ≤ 300-500毫秒。
Error budget: 0.1–0.每季度5%,burn-alerts。

隊列: 領先的事件時間(produce→consume),DLQ ≤ 0。1%.

業務:TTP,TtW,FTD-success,KYC-TtV。

16)支票單

服務設計

  • 明確域邊界和數據所有者。
  • Registry中的OpenAPI/AsyncAPI+架構合同。
  • SLO/Alertes的定義;度量/treass/logi嵌入。
  • Taymauts/Retraes/Idempentity政策。
  • 模式遷移:擴展和合同。

發布前

  • 單位/CDC/集成測試為綠色。
  • 金絲雀路線和回滾計劃。
  • Rate-limits/權重路由已配置。
  • 保密/鑰匙/證書互換。
  • Ficha-Flag和Fallbacks準備就緒。

17)反模式

網絡作為數據總線:深同步鏈代替事件。
一般的「上帝」-所有服務的DB。
缺乏相同能力→雙重註銷/權責發生制。
沒有遙測和殺手開關的黑暗版本。
隱藏的會話(粘性無處不在而不是外部狀態)。
沒有版本和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)最終的spargalka

跨域和數據責任設計邊界。
同步只是現在需要答案的地方;其余的是事件。
合同/計劃/CDC-回歸保險。
Sagi+outbox+等效性是可靠性的基礎。
可觀察性和SLO不是選項,而是標準「準備就緒」。
通過金絲雀/藍綠色發布,遷移-擴展和合同。
安全/合規性:mTLS,JWT,KMS,區域數據。

首先是模塊化整體,然後是演變-如果規模和團隊準備好了.

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。