Logo GH

运营和管理→扩展运营基础架构

扩展运营基础架构

1)为何以及如何考虑"缩放"

扩展是平台的系统吞吐量(RPS/TPS,连接器,IOPS,throughput)和数据量而不会丢失SLO,并且成本可控。对于iGaming/fintech,它直接是关于金钱:存款/投注转换,现场游戏和结算。

目标是:
  • 将SLO保持在负载增长和季节性峰值的X倍。
  • 提供可预测的缩放时间(minutes, not hours)。
  • 保存经济:cost/RPS, cost/Transaction, cost/1k事件。

2)可扩展平台原则

1.水平第一:分为小型,无状态服务;状态-在数据群集中。
2.后压和队列:平滑浪潮,保护"风暴"。
3.所有层上的缓存:client/edge/service/DB。
4.相似性和可重复性:安全的背包,外包,背包。
5.限制成瘾:taymauts,breakers,bulkhead隔离,rate-limits。
6.电容信号的可观察性:头部,p95/p99,lag,接头,配额。
7.使用加尔达飞行进行自动缩放:HPA/VPA/Cluster Autoscaler+停止条件。
8.多区域设计:独立的爆炸区域,本地数据,可持续的捕获器。

3)能力规划: 如何"计算需要多少"

模型输入:目标峰值TPS,流量配置文件(每小时),"关键路径",快取命中率,平均付费量,SLO和提供商限制。

快速评估(规则规则):
  • RPS → CPU/pods:'pods=RPS p99_time/有效_CPU__pode'(库存为30-50%)。
  • 队列:"最低_速度_领事≥峰值_速度_生产者1。2`.
  • DB-connects: 'max_conns=active_pule_levels mid_pool_size 1。3`.
  • 缓存:大小="N分钟内的热工作集"+20-30%的库存。
  • Egress/CDN: egress峰值=查询峰值平均响应大小(考虑压缩)。

Headroom:高峰时目标20-40%(按层)。低于15% → "capacity uplift"触发器。

4)图层和缩放模式

4.1 Edge / CDN / WAF

边缘缓存(TTL+SWR)、地理平衡、压缩、HTTP/2/3。
IP/JWT/密钥外围的限位,爆发保护。
通过经纪人/频道pub/sub对事件进行粉丝(头奖,现场警报)。

4.2个API网关/前沿后端

横向缩放在statles-pods上,将池分解为downstream。
按业务指标划分的HPA:RPS,p99,在企业池中排队-而不仅仅是CPU。

4.3异步队列/流媒体(Kafka/Rabbit/Pulsar)

按党派和党派划分的规模;避免skew(钥匙和分配)。
Lag-alerta+控制器的自动缩放;DLQ和复古拓扑。
在SLA下进行重新调整和重新安排。

4.4个缓存(Redis/Memcached)

群集模式,复制品,事件策略(LFU),multiget,管道。
分离热键和后台任务、客户端限制和最大内存策略。

4.5个数据库

阅读副本和阅读漫游,连接池。
按区域/tenant/密钥范围行驶。
CQRS:写入向导/向导,读取到副本。
索引和击球写作workflow(outbox → stream → sink)。
存档和热/冷数据(tiering)。

4.6个文件/对象存储

多线程,多路加载,CDN前端,异步转换。
提供商配额,"尾巴"清洁和预算。

4.7个提供商(PSP/KYC/工作室)

按配额/SLO/成本进行多供应商和路由。
每个提供商的circuit breaker+rate-limit,转发队列,"grace模式"。

5)自动缩放和警员飞行

Kubernetes:

HPA: метрики `rps_per_pod`, `queue_depth`, `p99_latency`; `targetAverageValue`.

VPA:资源建议;非高峰更新。
Cluster Autoscaler:具有优先级的nod组配置文件(点对点)。
PodDisruptionBudget/TopologySpreadConstraints:区域均匀性。
LimitRange/ResourceQuota:防止"醉酒"的破坏。

HPA伪宣言:

apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: api-gw}
minReplicas: 8 maxReplicas: 200 metrics:
- type: Pods pods:
metric:
name: rps_per_pod target:
type: AverageValue averageValue: "120"
- type: Pods pods:
metric:
name: p99_latency_ms target:
type: AverageValue averageValue: "280"
behavior:
scaleUp:
stabilizationWindowSeconds: 90 scaleDown:
stabilizationWindowSeconds: 300
Guardrails(示例):
  • "Pause&Rollback",如果使用p99> 1金丝雀。3 ×基线10分钟。
  • 黄金时段的"Freeze scale-down",只是scale-up。
  • "Stop retries"在"open_circuit=1"到瓶颈处。

6)多区域: 资产/资产和资产/passive

爆炸性孤立区域:独立集群,本地秘密/配额。
全球漫游:基于latency -/geo,health-probes,手动超速。

数据:
  • 热-本地+事件复制(流)。
  • 关键事务-按域约定(ledger/balances)。
  • Failover-playbooks:回合制来源变化,TTL,缓存加热。
  • 运动规则(DR):具有RTO/RPO目标的季度锻炼。

7)网络和服务模式

Service Mesh: mTLS, retry/breaker, outlier检测,per downstream限制。
eBPF/Observability L4/L7,连接限制,线头保护。
用于S2S的内部API网关,通用限额和审核。
跨爆炸区域的VPC/子网,NAT/Egress控制,与供应商同行。

8)性能: 测试和证明

Load&stress进入黄金时段配置文件+worst-case。
Soak(冗长)-内存/描述符泄漏,后坐力增长。
混乱/游戏日:经纪人/提供者/区域的下降,"缓慢提供者"。
CI 中的Perf回归:一组参考脚本和自动门。

迷你脚本矩阵:
脚本目标阈值
Deposit TPS ×2支付高峰p99 ≤ 350毫秒,SR ≥ 99。5%
Jackpot Broadcast粉丝出局WS连接器≤ 90%的限值,没有吊索
KYC Slowdown外部提供商自动评级+failover ≤ 2分钟

9)数据和存储: 增长战略

垂直生长至"天花板"→水平/缓和。
读取→副本/缓存;→ batchi/asinchron/日志记录。
图形迁移:expand → migrate → contract,没有全局锁定。
归档:冷批量进入廉价存储+按需再加氢。
搜索:带有增量更新分页的单独索引(OpenSearch/Solr)。

10)供应商和配额管理

配额卡(TPS,窗口,成本);alerta'usage_ratio> 0.9`.

按成本/质量进行漫游(智能漫游)。
OLA ↔ SLO协议和提高配额的过程。
备用池和热切换。

11)可观察性和缩放信号

度量(最低):
  • Capacity headroom по слоям; `queue_lag/backlog growth`; `kafka ISR`; `db connections`/`repl lag`; `redis evictions`; `open_circuit`/`retry_rate`; `quota_usage`.
  • 业务指标:成功率/存款转换,游戏启动时间。
  • 费用:费用/RPS,费用/1k电话。
Dashbords:
  • Capacity Overview(头部,最高风险,burn-rate SLO)。
  • Stream & Queue Panel (lag/backlog, consumer saturation).
  • DB&Cache(p99,connects,hit/evictions)。
  • Providers&Quotas(TPS,timeouts,成本,开关)。
  • Change Safety(发布前/发布后,金丝雀,赛车)。
Alertes(想法):

ALERT HeadroomLowAPI
IF capacity_headroom{layer="api"} < 0. 15 FOR 10m

ALERT KafkaBacklogAtRisk
IF (consumer_lag > 5e6 AND rate(consumer_lag[5m]) > 5e4) AND (hpa_desired == hpa_max) FOR 10m

ALERT DBConnectionsNearMax
IF active_conns / max_conns > 0. 85 FOR 5m

ALERT ProviderQuota90
IF usage_quota_ratio > 0. 9 FOR 5m

12) FinOps: 以有利可图的方式扩展

效率系数:费用/RPS,费用/存款,费用/1k事件。
Right-sizing: VPA/建议, "over-provisioned"报告。
Spot/Preemptible用于非关键内容;保留/委托用于基本负载。
Egress预算和缓存,CDN/edge-ofload。
按价值级别(hot vs cold)收集和存档日志。
警告配额(软帽)和扩展自动滴答声。

13)流程和人员

改变管理:金丝雀、ficheflagi、回归停止。
事件准备:运行手册和"在哪里添加容量","如何切换区域"。
高峰计划:比赛/锦标赛/活动日历和提供商窗口。
定期比赛日和DR演习。
所有权矩阵:谁可以"按住按钮"到收件人/增加配额。

14)实施支票

启动基本可扩展性(2-4周):
  • 关键路径和极限图(按层),头部目标≥ 30%。
  • HPA业务指标+集群自动驾驶仪;PDB/SpreadConstraints.
  • 热线队列,idempotency-keys, outbox。
  • Cashi:热门目标≥ 90%, evictions policy,关键指数。
  • DB:读取副本,连接池,缓存计划。
  • 提供商:多供应商、配额、断路器/中继器。
  • Dashbords "Capacity/Stream/DB/Providers",来自§11。
  • 金丝雀和赛车"发布前/发布后"。
  • DR-playbook和一部分feilover培训。
在大峰之前:
  • 加热缓存,HPA/ASG前面,战备备用副本。
  • 提高供应商配额,包括智能路由。
  • 为非临界变量启用夜间抑制模式。
  • Ficheflag的"安全模式"已准备好立即打开。

15)反模式

垂直升级"直到站立"而不是水平升级。
所有下游(线头)上的共享流/连接池。
在瓶颈的时空上回荡,缺乏抖动→风暴。
Alert和Scale Politics中没有滞后→"锯"。
单个全局DB,无需数据缓存和本地化。
对供应商的SDK的盲目信念,而无需控制taymout/retrais/可观察性。
缺乏DR演习:failover"仅在纸上"。

16) KPI可扩展性

SLO合规达到顶峰(p95/p99,成功率)。
在黄金时段按层排列。
MTTS(量表时间)-在出现其他资源之前。
Backlog/Lag Resolution Time-高峰后排队的时间。
在积极增长的时期改变失败率。
Cost/RPS 和缓存/CDN/edge-ofload的节省。
DR准备:练习中的RTO/RPO。

17)"快速"模式示例

Kafka:Concumers的分期付款和自动面包(想法):

partitions(topic="bets") = ceil(peak_msgs_per_sec / target_msgs_per_partition)
consumers = min(partitions, max_pods); rebalance_on: skew > 1. 5x scale_up_if: lag > 5e5 && rate(lag[5m]) > 5e4

PostgreSQL:


max_connections = poolers pool_size 1. 3 read_routing: primary (write), replicas (read majority)
shard_key: tenant_id or region_id

Redis:


maxmemory-policy: allkeys-lfu cluster-replicas: 1 evict-alert: rate(evictions[5m]) > 0 && used_mem/limit > 0. 8
金丝雀赛车场政策(conspect):

guardrails:
- metric: api_p99_ms, threshold: 1. 3 baseline_1d, window: 10m, action: pause_and_rollback
- metric: error_rate, threshold: 2 baseline_1d, window: 5m, action: pause max_step: 10%
step_interval: 15m

18) FAQ

Q: 首先扩展什么?

答:根据行车记录的瓶颈:队列/缓存/DB读取。热路(存款/投注/游戏启动)-优先。

问:如何理解自动缩放"使情况变得更糟"?
A:查看相关性:scale-up↑,p99/错误没有改善-也许你正在"扩展问题"(狭窄的下流/配额)。打开断路器/降级。

Q: 总需要第二个供应商吗?

答:对于关键路径,是的。否则,至少使用简化脚本和缓存的"安全模式"。

Q: Active-active или active-passive?

答:如果RTO的要求很低,很多区域参与者都是主动的。否则,首先使用已用完的feilover进行主动传递。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。