Realtime fid事件:建筑与安全
Real time fid events是具有游戏化,防冻性,CRM触发器和付款的产品的"循环系统"。为了使它在峰值时可以预见地工作,不重复奖励或泄漏数据,我们需要严格的体系结构:从协议和轮胎到签名,等效性,预算私有和可观察性。
1)目标和要求
可靠性:最小滞后事件交付(p95 ≤ 250 ms ingest,p95 ≤ 1-2与消费者)。
运送:通过等效性进行运送+逻辑运算。
顺序:使用重新排序窗口按键(通常为"user_id")排序。
安全性:MTLS, HMAC/JWT,按键旋转,复制/重复保护,PII最小化。
比例尺:水平冲压、背压、等级限制、DLQ/反射。
可管理性:计划注册、转换、无停机迁移。
合规性:审计(WORM),RG/KYC门户,地理政策,GDPR/匿名化。
2)参考架构(逐层)
1.生产者(来源):游戏服务器,钱包/付款,KYC/AML,客户端SDK(web/iOS/Android)。
2.网关API (Ingress): HTTP/gRPC接收、电路验证、身份验证、HMAC/MTLS、时间正常化。
3.Queue/Stream:Kafka/Rabbit/Cloud Pub/Sub-缓冲区,通过"user_id"分期付款。
4.流处理器:规范化,丰富,主题路由,anormalia/antibot标志,等速记录。
5.消费者:规则/比分,Reward Orchestrator,CRM/CDP连接器,防冻剂,分析尖叫器和。
6.Storage:原始事件(immutable),店面,等效性索引,审核日志。
7.Observability: 度量,标志,跟踪,Alertes;panics → DLQ.
8.Admin Plane: schema registry,钥匙/秘密,RBAC/ABAC, ficheflagi, replay服务。
3)交付协议: 何时使用
HTTP/JSON(服务器到服务器网络手册):简单,兼容,对外部合作伙伴有好处。添加HMAC+幂等。
gRPC/Protobuf:低延迟,严格的电路,内部服务的双流。
WebSocket/SSE:推入客户端,UI订阅领导板和进度。
CDC/Kafka Connect:当来源是DB/钱包而不是业务服务时。
建议:外围-HTTP+HMAC+MTLS;内部-gRPC/Protobuf。
4)事件模型和惯例
json
{
"event_id": "e_01HF3Z8Z7Q8Q2K", "event_type": "bet", "schema_version": "1.3.0", "occurred_at": "2025-10-24T11:37:21Z", "ingested_at": "2025-10-24T11:37:21.183Z", "key": { "user_id": "u_12345" }, "ctx": {
"session_id": "s_778", "platform": "ios", "geo": "TR", "device_fp": "fp_4a1..."
}, "payload": {
"game_id": "slot_wolf", "bet": 0.5, "win": 1.25, "currency": "EUR", "provider": "GameCo"
}, "sig": {
"algo": "HMAC-SHA256", "kid": "k_2025_10", "ts": 1730061441, "mac": "c7b7b3...f1"
}
}
规则:
- 两个时间是"occurred_at"(来源)和"ingested_at"(网关)。允许时钟漂移± 300秒。
- 路由密钥是定义顺序的东西(通常为"user_id")。
- 根据最小化原理,PII仅在"ctx"/"payload"中;对于敏感属性-令牌化。
5)交货,订单和平均水平
在一次运输中→可以重复和重新排序。
Exactly-once逻辑:通过"(event_id)"和/或"(user_id,source_seq)"保持具有唯一索引的幂等表;重播是no op。
SQL草图:sql
CREATE TABLE event_log (
event_id TEXT PRIMARY KEY, user_id TEXT, event_type TEXT, occurred_at TIMESTAMPTZ, payload JSONB
);
-带双重保护的插入
INSERT INTO event_log(event_id, user_id, event_type, occurred_at, payload)
VALUES (:event_id,:user_id,:event_type,:occurred_at,:payload)
ON CONFLICT (event_id) DO NOTHING;
顺序:在处理器中通过"user_id"+重新排序窗口60-120分批流。后来的事件进入纠正功能的"重播"(重播)。
6)背景和峰值管理
Token-bucket rate limiting на ingress (per-IP, per-partner, per-key).
巡回赛决胜局:内部消费者5xx →退化(可选事件的搁置,队列增加回避间隔)。
DLQ:永久错误消息(位图、无效签名、超过TTL签名)。
Replay service:通过"event_id"/时间范围从 DLQ进行选择性复制。
7)方案和演变: 如何不是"打破"prod
Schema Registry: JSON Schema/Protobuf;兼容性策略: 生产者回头,消费者前进.
转化:"schema_version",大调-仅通过ficheflag和双重记录(双写)。
合约:加那利时期后计划推广和绿色计量。
验证规则的YAML示例:yaml compatibility:
enforce: true mode: backward blocked_fields:
- payload.ssn
- payload.card_number required_fields:
- event_id
- event_type
- occurred_at
8)威胁模式与保护
威胁:身体变换,重播(重播),PII泄漏,钥匙损害,计划便宜,DoS,MITM,签名条纹。
保护:- 周边MTLS:短期客户证书,CRL/OCSP。
- HMAC签名+"X-Timestamp"和TTL(± 300 s)。
- JWT (cl credentials/OAuth2 ient)-用于授权和范围限制。
- 按键旋转(KMS):标题中的"kid";30至90天轮换计划;迁移窗口中的双重检查。
- Nonce/等效性:"X-Request-Id"用于小费(付款,奖金);保存TTL时间。
- Content-Type pinning, max body size, allow-list IP/ASN用于关键集成。
- 所有传入的raw-payload+标题(不可变存储)的WORM审核。
python body = request.raw_body ts = int(request.headers["X-Timestamp"])
assert abs(now() - ts) <= 300 # анти-replay kid = request.headers["X-Key-Id"]
secret = kms.fetch(kid)
mac = hmac_sha256(secret, body)
assert hmac_eq(mac, request.headers["X-Signature"])
9)隐私,PII和RG/KYC
最小化:PII通过链接令牌(5-15分钟)代替内线;禁止在原始日志中编辑/匿名-使用单独的PII标记。
访问:按管辖权和角色属性划分的ABAC;所有读数都是审计日志。
GDPR:通过键映射实现删除权以消除PII而不会破坏事件事实。
RG/KYC:仅在有效的KYC级别和"OK" RG标志下才跳过需要颁发宝贵奖项的事件。
10)可观察性和SLO
SLO(示例):- Ingest p95 ≤ 250毫秒;end-to-end p95 ≤ 2 с;≤ 0故障。1%/天。
- 签名错误(HMAC/JWT)≤ 0。占总流量的02%。
- DLQ fill rate ≤ 0.1%;等温后的"重复"≤ 0。005%.
- RPS按来源,p50/p95 latency,4xx/5xx,签名错误,计时。
- 按批次,回收/秒,fill DLQ,retries,继电器。
- 电路:按版本划分的消息比例,兼容性违规。
- 安全性:rps-throttle频率,电路断路器,IP/ASN异常。
- 流SRM(来自单个源的流量急剧偏斜)。
- 潜在性p95>目标5分钟+,DLQ增长>X/min。
- 签名错误>Y ppm,"X-Request-Id"重播激增。
- Drift手表>120 with source。
11)多区域及容错能力
主动活动区域,全局漫游(GeoDNS/Anycast),"user_id"上的粘贴键→区域。
用于关键事件(现金,KYC)的跨区域复制拓扑。
Blast radius:按性格/品牌隔离、单独预算和密钥。
DR计划:RPO ≤ 5分钟,RTO ≤ 30分钟;定期排练。
12)重生和重播政策
原始事件:7-30天(按成本计算),单元/店面更长。
仅通过签名的运行手册(谁,为什么,为什么,时间范围)允许重新播放。
Replay始终进入新的流版本,并带有用于分析透明度的标志"replayed=true"。
13)配置示例
Ingress(NGINX风格)限制:nginx limit_req_zone $binary_remote_addr zone=req_limit:10m rate=300r/s;
limit_req zone=req_limit burst=600 nodelay;
client_max_body_size 512k;
proxy_read_timeout 5s;
Kafka(示例):
properties num.partitions=64 min.insync.replicas=2 acks=all retention.ms=604800000 # 7 days compression.type=zstd
密钥策略(KMS):
yaml rotation_days: 45 grace_period_days: 7 allow_algos: ["HMAC-SHA256"]
key_scopes:
- topic: "wallet_events"
producers: ["wallet-svc"]
consumers: ["ledger-svc","risk-svc"]
14)真人快餐推出支票清单
- 周边的MTLS,HMAC/JWT,按键旋转("kid")。
- 逻辑上的幂等(唯一键,upsert/ON CONFLICT)。
- 通过"user_id"、reordering window、replay service参与。
- Schema registry+兼容性策略;在主要升级中双写。
- Rate limiting, circuit breakers, DLQ+手动咆哮。
- 可观察性:SLO,签名/潜伏期/DLQ/lag。
- PII/匿名政策,ABAC,WORM审核。
- DR/多区域,failover彩排。
- Runbooks:事件,倒退,回滚电路/键。
15)迷你桉例(合成)
背景:高峰锦标赛,120到RPS进入,64场比赛,2个Active-Active地区。
4周总计: ingest p95 210 ms, e2e p95 1.6 c;DLQ 0.05%;错误签名0。009%;等效后重复0。003%.
事件:伴侣的时钟漂移(− 9分钟)→反重播爆发。电路断路器将流量转移到"缓冲"端口,合作伙伴健康向CSM发出警报;在NTP合成后-向所有用户倒置12分钟的窗口。没有损失和双重付款。
16)摘要
可靠的真实时差不只是"webhooks"。它是一个分层系统,具有清晰的合同:单向运输+单向逻辑exactly-once,注册方案和验证,MTLS/HMAC/JWT和密钥旋转,后压/DLQ/恢复,PII最小化和严格的审核。通过遵守这些做法,您将获得快速,安全和可预测的事件流,您可以自信地构建游戏化,反欺诈性,CRM和付款。