無障礙區域和跨區域
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。