為什麼賭場轉向模塊化架構
為什麼賭場模塊化
歷史巨石阻礙了增長:每次更改都會拉動整個系統的發布,提供商集成和PSP在整個代碼中擊敗SLO,合規升級。模塊化體系結構(域驅動器+合同API+事件)允許:- 在沒有「所有人」協調的情況下快速輸出fichi並連接提供商;
- 選擇性地縮放(與收銀機分開的實時視頻,與遊戲目錄分開的錢包);
- 隔離風險(促銷中的錯誤不會破壞錢包);
- 遵守許可證(域邊界內的邏輯/版本/策略);
- 通過清晰的合同、重復使用和自動化來降低TCO。
域映射(示例細分)
Wallet/Ledger-金錢,對沖貨幣,獎金余額,PITR,審計。
Cashier/Payments-PSP,電子坡道/後坡道,KYT,等效的webhooks。
Gaming Bridge-提供程序適配器,round/bet正常化。
Catalog/Lobby是遊戲,提供商,fichering和放映規則。
Promo/Bonus-股票規則,憑證,wager。
KYC/AML/RG-身份驗證,制裁/RER,限制和自我排斥。
Experience-frontend,CDN,i18n,A/B,Telegram WebApp。
Telemetry/Analytics-事件,店面,ML/AI。
Compliance&Audit-MGA/UKGC報告,WORM存檔。
模塊化體系結構原理
1.DDD邊界(邊界上下文)。明確掌握數據和邏輯。
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.獨立發行。加那利/藍綠色dploy,「雙分頁」遷移被禁止。
7.可觀察性。端到端「traceId」,每個模塊的SLO度量。
8.Ficha旗幟。交通/地理/用戶段,安全回滾。
集成層: 如何連接提供商和PSP
適配器/橋接模式:每個遊戲/支付提供商都是具有單個平臺合同的插件。
遊戲:正常化「roundId/betId/status」,錯誤摸索,kesh限制。
付款:單一界面「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 }
事件作為「循環系統」
總線(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和分析不混合。
功能商店/ML:具有Fich和TTL版本的OLTP獨立層。
一致性:模塊之間具有戰略意義,對於金錢,在邊界上具有局部ACID+等效動作。
Deploy和縮放
容器(Docker/K8s): 汽車模量(wallet-CPU/IO;直播視頻-網絡;bridge — RPS).
外圍隔離:網絡策略、每個模塊的單獨秘密/密鑰、不同的PII/金錢/遙測存儲。
交通懸掛:遠景標誌,金絲雀份額,區域路線。
DR/HA: Multi-AZ;貨幣資產,閱讀資產/媒體資產.
合規性「縫合」到模塊
KYC/AML/RG是具有策略和決策日誌(「policyVer」)的專有模塊。
審計/WORM是金錢/回合/付款事件的不變存儲庫。
報告-按司法管轄區出口(MGA/UKGC),SLA為完整/及時。
線程樣本
費率→計算→付款
1. 'gaming-bridge'發送'bet。placed` (idempotent).
2. 「wallet」制作「hold」並出版「wallet」。hold`.
3. 「gaming-bridge」獲得提供商→ 'round的結果。settled`.
4. 「wallet」認為「settle」(釋放/支付)→ 「wallet」。settled`.
5. 「promo」消耗事件並獎勵獎金→ 'bonus。issued`.
現金(存款)
1. 「cashier」創造了「支付」。intent` с `Idempotency-Key`.
2.PSP呼籲webhook → 'cashier。webhook.received`.
3. `wallet.credit'實際上→分析師和RG的事件。
無停機更改(expand→migrate→contract)
1.Expand:在'v1中添加了字段/端點。1',老客戶不會崩潰。
2.Migrate:消費者閱讀新內容,寫在兩個版本中(雙寫僅用於非現金)。
3.合同:宣布EOL 'v1。0',按計劃在N周後刪除。
平臺工程
Golden Paths:模板模板(repo-askeleon, CI/CD, alerts, SLO, secrety)。
合同測試:CI中的Pact/AsyncAPI測試;與假供應商的集成環境。
服務目錄(Backstage): 誰是所有者,SLA, API版本,事件ruckbook.
模塊化成功的指標
從創意到prod發布的領先時間↓ X次。
按模塊↑(每天/每周)發布的頻率,更改失敗率↓。
↓事件的MTTR(由於隔離)。
Infra 費用/GGR穩定或↓流量增長(選舉滑道)。
提供商/PSP集成時間(從簡報到執行)↓。
反模式
「用於微服務的微服務」。沒有清晰的數據邊界,連通性和復雜性就會增長。
模塊之間的通用DB/方案。殺死隔離和獨立發行。
沒有版本/合同的活動。「悄悄」打破消費者。
雙寫錢。不一致的風險只是通過一位作家的偶然步驟。
全局「公用事業層」與所有連續。變成一個隱藏的巨石。
沒有幻燈片和殺手開關。任何錯誤都會立即打擊一切。
OLTP/OLAP混合。報告抑制了賭註/錢包。
沒有可觀察性。衡量SLO和關聯事件無濟於事。
向模塊化體系結構過渡的支票清單
戰略與領域
- 按模塊定義了邊界內容、所有者和KPI。
- 交互映射:API/事件、臨界值和 SLO。
合同和安全
[] OpenAPI/AsyncAPI + JSON-Schema;版本和生命周期。
- mTLS/HMAC,短的JWT,邊界上的RBAC/ABAC。
數據
- 分開的OLTP;事件是OLAP的來源。
- Idempotency on API/webhook,重復消息消除。
CI/CD和發行版
- 金絲雀/藍綠色,幻燈片,自動標記模。
- CI中的合同測試;帶假供應商的環境。
可觀察性
- 帶有「traceId」的邏輯/度量/跟蹤;SLO-dashbords。
- Alerta按業務指標(VOID, reject, 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"
}
偶數錢包:
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。這加快了集成和發布,提供了選擇性的擴展,簡化了合規性並降低了事件風險。首先突出顯示域界限、合同和事件,「編織」安全性和可觀察性-並且您將獲得一個與產品一起生長而不是抑制產品的平臺。