多云解决的是约束,不是技术审美
当一个团队说要做多云时,我会先问三个问题:不可接受单点供应商的哪类风险?业务是否真的需要同时运行在两个云上?团队是否有能力维护两套基础设施抽象?如果这些问题没有清晰答案,多云很容易变成两倍的运维工作和一半的交付速度。
多云合理的场景通常很具体:某些地区只有特定云可用;监管或客户要求特定数据不能离开某类环境;关键业务需要在供应商级故障时保持最低可用;或者商业谈判需要真实可执行的替代方案。
三种多云形态
| 形态 | 特点 | 适用条件 | 主要代价 |
|---|---|---|---|
| 主备多云 | 平时使用主云,备用云保留最小环境 | 供应商级故障不可接受 | 备用环境容易腐化 |
| 分域多云 | 不同业务或地区固定使用不同云 | 区域、合规或历史系统约束 | 跨域治理复杂 |
| 负载多云 | 同一业务常态运行在多个云 | 强议价或极高可用要求 | 抽象层和发布系统复杂 |
多数中小团队更适合主备或分域,而不是一开始就做负载多云。主备多云的关键不是复制所有资源,而是明确最低服务能力、数据恢复点和技术验证频率。
真正困难的是抽象边界
计算、存储、网络、身份、DNS、证书、消息队列、数据库和监控,每个服务都有平台差异。如果应用直接依赖大量托管服务,跨云抽象成本会迅速上升。相反,如果应用是容器化静态服务,依赖标准对象存储和关系数据库,多云难度会低很多。
我不建议追求“所有代码一行不改就能在任何云运行”。更现实的做法是控制关键接口:容器镜像、声明式基础设施、标准对象存储 API、统一日志格式和可迁移的数据备份。平台特有能力仍然可以使用,但要标注依赖点和退出成本。
# 评估跨云依赖时可以画一张清单 runtime: container / function / vm state: object storage / sql / queue / cache network: dns / certificate / ingress / private link identity: workload identity / secret manager observability: log / metric / trace / alert delivery: ci / artifact registry / terraform
数据比计算更难迁移
计算环境可以重新创建,数据却要考虑一致性、延迟、合规和恢复目标。跨云数据库复制、对象存储同步、消息回放和主键冲突处理,都比页面上的架构图复杂得多。
对大多数系统,可以先把数据分层:交易数据保持单主写入;文件和静态资产用对象存储加版本化备份;日志和指标允许异步复制;缓存允许丢失。不要把所有数据都设计成强一致跨云复制,成本和故障模式都会失控。
一个可执行的引入步骤
- 写下必须多云的业务原因和退出标准。
- 选择一个非核心但依赖完整的服务做迁移试验。
- 统一镜像构建、基础设施代码和部署参数。
- 验证数据备份恢复,而不是只验证资源创建。
- 把两套环境的监控、告警、成本报表放进同一个视图。
- 定期演练降级或切换,记录人工步骤和自动化缺口。
小结
多云是应对特定约束的架构选项,不是成熟度的证明。对个人站和小型系统,先把应用无状态化、数据备份可恢复、基础设施声明式,通常比维护两个云更有价值。等真实约束出现时,这些准备也会让多云迁移自然很多。