跳到主要内容

多云混合部署实战

问题

企业需要在多个云厂商之间部署服务,如何设计多云架构?如何避免厂商锁定?

答案

多云架构设计

Terraform 多云编排

# main.tf — 多云资源统一管理

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
alicloud = {
source = "aliyun/alicloud"
version = "~> 1.210"
}
}
}

# AWS 资源
provider "aws" {
region = "ap-southeast-1"
}

resource "aws_eks_cluster" "primary" {
name = "prod-primary"
role_arn = aws_iam_role.eks.arn
version = "1.29"
# ...
}

# 阿里云资源
provider "alicloud" {
region = "cn-hangzhou"
}

resource "alicloud_cs_managed_kubernetes" "secondary" {
name = "prod-secondary"
version = "1.28"
# ...
}

网络互通方案

方案延迟带宽成本适用场景
IPsec VPN不稳定<1Gbps测试/非核心
SD-WAN较低灵活多分支互联
云专线 + 对等互联最低>1Gbps核心业务
应用层 API 调用中等N/A松耦合服务

避免厂商锁定的策略

层面锁定风险解耦策略
计算ECS/EC2 实例规格差异K8s 统一编排,应用容器化
存储对象存储 API 差异S3 兼容 API(MinIO)或抽象层
数据库云托管数据库(RDS)使用开源数据库(MySQL/PG),自建或用兼容服务
消息队列云专属 MQ使用 Kafka / RabbitMQ
监控云监控平台Prometheus + Grafana
CI/CD云厂商 CI 服务GitHub Actions / GitLab CI
IaCCloudFormation 等Terraform(多云通用)
务实看待厂商锁定

完全消除厂商锁定既不现实也不经济。应关注核心组件的可迁移性(数据库、消息队列),而非每个服务都做抽象。适度使用云厂商托管服务可以显著降低运维成本。

统一监控与日志

# Prometheus 联邦集群 — 全局 Prometheus 从各云采集
# global-prometheus.yml
scrape_configs:
- job_name: 'cloud-a-federation'
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job=~".+"}'
static_configs:
- targets: ['prometheus-cloud-a.internal:9090']
labels:
cloud: 'aws'

- job_name: 'cloud-b-federation'
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job=~".+"}'
static_configs:
- targets: ['prometheus-cloud-b.internal:9090']
labels:
cloud: 'alicloud'

常见面试问题

Q1: 什么场景下应该选择多云部署?

答案

场景动机示例
合规要求数据必须存放在特定地区中国用阿里云,海外用 AWS
容灾避免单一厂商故障主 AWS + 灾备阿里云
成本优化利用不同厂商优势GPU 用 A 厂商,存储用 B 厂商
避免绑定保持议价能力核心服务多云部署
并购整合不同团队用不同云逐步统一或长期共存

不建议纯粹为了"多云"而多云——多云带来的复杂度(网络、数据同步、运维)是实实在在的成本。

相关链接