为什么赌场转向模块化架构
为什么赌场模块化
历史巨石阻碍了增长:每次更改都会拉动整个系统的发布,提供商集成和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。这加快了集成和发布,提供了选择性的扩展,简化了合规性并降低了事件风险。首先突出显示域界限、合同和事件,"编织"安全性和可观察性-并且您将获得一个与产品一起生长而不是抑制产品的平台。