多云拓扑
1)当多云有道理时
驱动程序:- 可靠性/可用性:提供商级别的独立故障区域。
- 主权/合规性:根据司法管辖区进行存储/处理(数据驻留)。
- 风险管理:降低供应商锁定、采购/价格杠杆。
- 地理/表演:更接近用户和数据源。
- 特殊服务:访问不同云的最佳利基功能。
- SDLC/观察/操作的显着复杂性。
- 提供商之间的价值增长和潜伏期。
- 不同的IAM/网络模型/配额/限制 →更多的运营风险。
2)拓扑模式
3)网络层和路由
3.1个全局输入
GSLB/DNS滚动:latency -/health-based;短的TTL进入迁移窗口。
Anycast+L7代理:单个IP,区域健康路由。
司法管辖区政策:地理阻塞/地理交通固定。
python def pick_cluster(client, intent):
вход: ip, geo, tenant, feature allowed = filter_by_compliance(client. geo) # sovereignty healthy = [c for c in allowed if sdo (c). ok and slo(c). ok]
return argmin(healthy, key=lambda c: latency_estimate(client, c))
3.2云间连通性
在可能的情况下进行私人渠道/同行;否则-通过Internet的TLS+mTLS。
Egress控制:聚合/压缩、本地缓存/聚合器。
网络作为代码:Terraform/Blueprints,CIDR策略,路线和egress网关。
4)数据和一致性
4.1个型号
全球强一致性很少是现实的(潜伏性/网格/成本)。
Pragmatic eventual:双向CDC(更改数据捕获)和冲突解决。
CRDT/幂等性:对于计数器/网格/逻辑,可交换结构。
4.2种模式
Dual-write c outbox:事件事务记录→经纪人→复制到相邻的云中。
读取本地/写入家:写入"家庭"区域/云,读取本地(具有版本和样式策略)。
分裂大脑保护:分散性,"补偿"(saga),货币不变量的手动仲裁的发现。
DB → Debezium/stream → Events(topic@vN) → Cross-cloud relay → Apply w/ resolver resolver: prefer_higher_version prefer_home business_rule()
4.3个对象存储
异步复制backet、hasha/manifests、dedup。
ILM(hot/warm/cold)策略在云上是独立的。
主权规则:"PII不会离开UA/EEA"-被验证为代码。
5)身份,秘密和钥匙
身份联合会:单个IdP,短寿命令牌,piplines上的OIDC信托。
秘密:每个云的KMS/HSM+Vault类抽象;双键,用于旋转/切换。
PoLP/ABAC:基于属性的权利(云、区域、env、data_class)。
加密域:管辖区不同的根键→跨区域加密。
6)执行环境: 集群和小袋
Multiclaster (K8s):每个云/区域一个集群;通过GitOps(ArgoCD/Fleet)进行舰队控制。
Сервис-меш: mTLS, retries, circuit-breakers, failover policies cross-cluster.
分布:- 静态服务→数据位置。
- 在每个云中→交互式API (Active/Active)。
- Batch/ETL →"绿色"窗口/廉价区域(carbon/cost aware)。
rego package placement
allow[cloud] {
input. service. pii == false cloud:= input. clouds[_]
cloud. features. contains("cheap_gpu")
}
deny["PII outside allowed region"] {
input. service. pii == true not input. target_region in {"eu-central","eu-north","eu-west"}
}
7)多云中的观察力和SLO
多标记:"云","区域","tenant","data_domain"。
SLI/SLO每云和全局: "如果≥1云可用,则全球可用。"
遥测收集:本地+聚合与egress控制。
跟踪:全局跟踪id,上下文宣传,以"尾巴"为基础的尾巴采样。
Dashbords比较:A vs B per endpoint/p99/error-budget burn。
8)SDLC/IaC和"策略作为代码"
单个IaC单元目录:提供商-模块/堆栈,不变量(标签,网络,加密)。
GitOps:声明性清单,漂移细节,环境促销。
构象测试:API/事件合同,两个云的Canaries。
发布门:单一云中存在违反SLO的风险(烧毁率预测),且没有主权对应关系。
yaml gate: multi-cloud-slo-and-compliance checks:
- slo_burn_rate(global) < 1. 0
- slo_burn_rate(cloud:A) < 2. 0
- compliance_rule("pii_in_region") == pass
- egress_forecast < budget on_fail: block_release
9)成本和碳(FinOps/GreenOps)
单位指标:"$/req","$/GB-egress","gCO₂e/req"。
非关键击球的成本/碳漫游:便宜/"绿色"手表/区域。
Egress-cup:跨客流量预算;缓存/聚合/压缩/TTL。
每个云中的RI/SP/Committed Use+spot/preemptible上的"弹性层"。
10) fails测试和演习
游戏日:"扑灭云A","减慢DB","突破极限"。
支票印记:RTO/RPO,DNS收敛时间,解开幻灯片,缓存行为。
发行版中的混沌混乱:依赖性降级不应导致逆转级联。
11)安全、隐私、合规性
零信任:服务/云之间的mTLS,工件签名,SBOM。
DPA/主权:数据集目录、本地化规则、ILM之上的Legal Hold。
秘密和钥匙:轮换日志,编剧/杀手开关花花公子。
Webhooks和外部集成:签名,反重播,区域终点。
12)数据/事件集成模板
12.1双向Kafka桥(想法):
cloudA. topicX ⇄ relayA→B ⇄ cloudB. topicX cleanup. policy=compact,delete key-based routing idempotent producer
12.2 Outbox表和转播:
sql
-- outbox id uuid pk, aggregate_id, type, payload jsonb, version int, created_at timestamptz
-- transactional insertion with domain table change
接下来,连接器读取outbox并将事件发布到本地经纪人+中继。
12.3冲突策略(伪):
python def resolve(local, remote):
if local. version > remote. version: return local if remote. version > local. version: return remote equal versions: domain rules return business_tiebreak (local, remote)
13)反模式
"让我们把一切都拖到两个云中。"加倍的难度没有胜利。
热路同步互费交易。
适用于所有云/地区的单一全局加密密钥。
使用PII的徽标/脚本没有掩盖或本地化规则。
没有外部测量(只有通过提供商的状态页面才能看到实际可用性)。
没有剧本/演习-DR在H时不起作用。
单个云降解的回火级联(没有限制/着色/断路器)。
不负责任的egress是意想不到的账单。
14)建筑师支票清单
1.制定了多云驱动程序(SLO/DR/主权/成本)?
2.选择模式(AA/AP/DR-Only/Poly-Service)并由RTO/RPO记录?
3.网络计划:GSLB/Anycast,健康样本,egress-cap,私人频道?
4.数据: CDC/CRDT/dual-write,冲突解决规则,outbox?
5.主权:数据/区域地图,策略作为代码及其网关?
6.IAM/秘密:联邦,短命令牌,KMS跨域?
7.群集/mesh: failover策略、限制/休息/定时?
8.Observability:"云/区域"标签,SLO每云,全球外合成?
9.SDLC/IaC/GitOps:统一目录,构象测试,发布门?
10.FinOps/GreenOps: 单位指标、预算赤字、绿色测试窗口?
11.演习:常规游戏日、协议和请愿?
12.出口计划: 数据导出/格式/时间表,关键服务的第二来源?
15)小型配置示例
15.1管辖区路由策略(伪YAML):
yaml route:
pii:
allowed_regions: ["eu-central","eu-north","eu-west"]
deny_cross_cloud: false analytics:
allowed_regions: ["eu-","us-"]
prefer_low_carbon: true weights:
eu-central@cloudA: 60 eu-central@cloudB: 40
15.2 GSLB的健康试用:
http
GET /healthz
200 OK x-region: eu-central x-slo: ok at-risk breach
15.3 Failover-fich-flag(伪代码):
python if slo_at_risk("cloudA", "payments"):
route. weight["cloudA"] -= 20 route. weight["cloudB"] += 20 enable_stale_rates(ttl=1560)
结论
多云是工程学科,不是快捷方式。它需要明确的动机,有意识的拓扑选择,精心处理数据,强大的自动化和严格的政策。如果您测量风险和成本,构建网络和数据"通过教科书",培训伪造者并保持课程简单,多云平台将为您提供弹性,灵活性和自由-无需在帐户中出现意外,也无需妥协用户体验。