无障碍区域和跨区域
1)术语和目的
无障碍区域(AZ)是区域内的隔离数据中心(专有功率/网络)。
该地区是AZ集团,总体地理位置和延误。
- RTO (Recovery Time Objective)-您可能无法提供服务多长时间。
- RPO (Recovery Point Objective)-允许丢失的数据量。
通常:在区域内,我们瞄准RTO ≤ 5-15分钟,RPO ~ 0-1分钟,区域间-RTO ≤ 1小时,RPO ≤ 5分钟(取决于产品和预算)。
2)建筑模型
2.1在区域内(multi-AZ)
无状态层:分布在AZ上;平衡-与健康检查L4/L7。
Stateful层:AZ之间具有同步复制(或法定)的群集。
缓存/队列:群集,带有AZ缓存和自动失败。
2.2区域间(多区域)
Active-Active:两个区域都接受流量。
用户最小的潜伏期,快速恢复,−一致性和冲突的复杂性。
Active-Passive (hot/warm):主要区域服务,第二个区域热待命。
数据更简单,更便宜;−高于RTO。
Pilot-Light:最小的"闪烁"(数据同步,计算在事故中展开)。
DR-backup:仅备份和恢复脚本(最便宜,最慢)。
3)数据和一致性
3.1个数据库
同步法定人数(RPO≈0,↑latentnost):PostgreSQL在区域内具有同步标准;分布式DB(CockroachDB/Cassandra)具有本地法定人数(Local Quorum)和AZ平衡。
异步跨区域(RPO> 0,↓latentnost):Postgres/MySQL逻辑复制;«global tables» в KV/NoSQL;CDC→strim到另一个地区。
冲突条目:对于主动活动,请使用CRDT/version或"真理源"策略(leader-region per key/tenant)。
3.2事件抽签和队列
队列/流(Kafka/Pulsar/SQS类似):镜像主题或跨区域复制器;关键是Consumer和Dedup在密钥上的相等性。
Webhooks和外部合作伙伴:签字,重播,在两个区域都存储缺口/支票。
3.3个缓存
区域间本地缓存(write-through/refresh-ahead);全局共享缓存仅适用于坚固的KV(否则为split-brain)。通过事件(pub/sub)致残,TTL是保守的。
4)全球流量和网络环路
GSLB/DNS:基于Geo -/Latency的路线,健康检查,加那利群岛和事故的"交通重量"。
Anycast/Edge:让我们更接近用户,接下来是最近的健康区域。
Failover-Policy:上游区域池,禁止在关键路径上0-RTT,对区域间依赖的低时间。
撤退策略:指数backoff+jitter,总截止日期限制,带有"Idempotency-Key"的偶数PUT/POST。
5) Kubernetes和服务-mesh
5.单个群集中的1个Multi-AZ
topology spread constraints по `topology.kubernetes.io/zone`.
PodDisruptionBudget и priority classes.
NodeAffinity/Anti-Affinity-避免共定位副本。
存储区域:带有AZ复制的PV或分布式卷系统。
5.2 Multi-region (multi-cluster)
用于声明性同步的per-Region+GitOps(Argo CD/Flux)分离群集。
服务Mesh(Istio/Linkerd):区域之间的本地化-aware加载和失误;mTLS,通用身份。
交通挂钩:新区分阶段1%→10%→50%;手柄"立即投放0%"。
6)选择RTO/RPO并绑定到模式
7)容错测试(DR)
GameDays:季度全面剧本"Pogging region/AZ"。
混沌注入:网络延迟,数据包丢失,单个AZ的经纪人/基地断开连接。
RTO/RPO事实:测量切换时间和数据丢失,发布报告。
Runbooks:分步指令和用于切换的"红色按钮"(DNS weights, feature-flags,禁用重型照片)。
8)可观察性和控制
按区域/AZ/tenant划分的度量;p95/p99沿路线潜伏。
SLO和Error Budgets到区域和全球池。
Alerts:如果第二个区域的流量正常,则单个区域的退化不应"干扰"分页。
Трейсы: baggage `region`, `az`, `failover=true/false`;报告"failover需要多少请求"。
9)安全性和合规性
数据驻留:将PII/支付数据绑定到特定区域(管辖权)。
秘密:具有跨区域密钥和旋转功能的KMS/智能 HSM;共享按区域键材料。
mTLS和地区之间的相互信任;通过ACL限制跨区域egress。
10)成本和节省
Edge-Cache+SWR-减少区域间错误。
不同的存储类别(hot/warm/cold)和downsampling 指标/logs。
按地区(夜间最低限度)划分的自动尺度配置文件。
映像身份+通过环境变量/Helm values进行差异化配置。
11)反模式
每个系统一个Stateful向导;没有法定人数的split-brain。
区域间同步记录到单个RDBMS(无法承受的潜伏期)。
具有CRDT强一致性的全局缓存→拥堵和"幻影"。
无止境的恢复→重复的交易/付款。
单个"全球"SLO-隐藏一个区域的失败。
没有常规的DR演习-计划在战斗中不可行。
12) iGaming/财务细节
区域选择支付提供商/CUS;在PSP上使用健康信号进行智能路由,在备用时进行故障切换。
管辖权:在国家/地区内保存PII和运营日志;跨区域-仅聚合/肛门。
限制/负责任游戏:本地规则和时钟-不要在区域之间正面复制,使用事件一致性。
奖金/资产负债表:等效钥匙和"真相之源"per tenant/region;DR之后的reconcile-joba。
13)迷你食谱(伪食谱)
13.1 Envoy locality-aware + failover
yaml load_assignment:
endpoints:
- locality: { region: eu, zone: eu-a }
lb_endpoints: [{ endpoint: { address:... } }]
- locality: { region: eu, zone: eu-b }
lb_endpoints: [{ endpoint: { address:... } }]
- locality: { region: us, zone: us-a } # failover target lb_endpoints: [{ endpoint: { address:... } }]
common_lb_config:
zone_aware_lb_config: {}
locality_weighted_lb_config: {}
outlier_detection:
consecutive_5xx: 5 base_ejection_time: 30s
13.2 Kubernetes topology spread
yaml spec:
topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology. kubernetes. io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
13.3 DNS重量操纵器(想法)
"weight(eu)=90","weight(us)=10",当"eu"降解时,自动移至'us"。健康检查和降低的TTL(但不太激进,30-120 s)。
14)准备就绪支票清单
- 由RTO/RPO每项服务定义并与业务保持一致。
- Stateless分布在AZ上;stateful具有法定人数/复制和可理解的一致性模型。
- 复制跨区域(asinchron/CDC)、冲突/重复数据管理器测试。
- GSLB/Anycast配置、健康检查和权重是自动化的。
[] Kubernetes: topology-spread, PDB, anti-affinity;multi-cluster GitOps.
- Retrai with jitter, idempotity on write;短时间跨区域。
- 通过实际RTO/RPO测量的DR演习;当前运行手册。
- 在区域/AZ,SLO和burn-rate上的可观察性,Alertes不是"干扰"正常工作。
- 数据驻留/秘密/密钥符合监管法规。
- 经济学:egress,存储,自动滑道配置文件得到控制。
15) TL;DR
将multi-AZ构建为基础层,将multi-Region构建为业务保险。选择RTO/RPO和成本下的模式(active-active/standby),有意识地复制数据(法定值/CDC/CRDT),通过GSLB/Anycast管理全球流量,以及本地化平衡。强制性:等效性、短时间、常规DR 演习、区域/AZ切片上的SLO/度量。对于iGaming/financial,添加区域PSP/KYC,数据要求以及按司法管辖区划分的SLO。