name: deploying-on-gcp description: 使用Google Cloud Platform (GCP)服务实现应用程序。当在GCP基础设施上构建时使用,选择计算/存储/数据库服务,设计数据分析管道,实现ML工作流,或使用BigQuery、Cloud Run、GKE、Vertex AI和其他GCP服务架构云原生应用程序。
GCP模式
使用Google Cloud Platform服务构建应用程序和基础设施,采用适当的服务选择、架构模式和最佳实践。
目的
此技能为Google Cloud Platform (GCP)服务提供决策框架和实施模式,涵盖计算、存储、数据库、数据分析、机器学习、网络和安全。它基于工作负载需求指导服务选择,并展示使用Terraform、Python SDK和gcloud CLI的生产就绪模式。
何时使用
在以下情况使用此技能:
- 选择GCP计算服务(Cloud Run、GKE、Cloud Functions、Compute Engine、App Engine)
- 选择存储或数据库服务(Cloud Storage、Cloud SQL、Spanner、Firestore、Bigtable、BigQuery)
- 设计数据分析管道(BigQuery、Pub/Sub、Dataflow、Dataproc、Composer)
- 实现ML工作流(Vertex AI、AutoML、预训练API)
- 架构网络基础设施(VPC、负载均衡、CDN、Cloud Armor)
- 设置IAM、安全和成本优化
- 从AWS或Azure迁移到GCP
- 构建多云或GCP优先架构
核心概念
GCP服务类别
计算选项:
- Cloud Run: 用于无状态HTTP服务的无服务器容器(自动缩放到零)
- GKE(Google Kubernetes Engine): 用于复杂编排的托管Kubernetes
- Cloud Functions: 用于简单处理的事件驱动函数
- Compute Engine: 用于完整操作系统控制的虚拟机
- App Engine: 用于Web应用程序的平台即服务
存储与数据库:
- Cloud Storage: 具有标准/近线/冷线/归档层的对象存储
- Cloud SQL: 托管PostgreSQL/MySQL/SQL Server(最高96TB)
- Cloud Spanner: 具有99.999% SLA的全局分布式SQL
- Firestore: 具有实时同步的NoSQL文档数据库
- Bigtable: 用于时间序列和IoT的宽列NoSQL(PB级)
- AlloyDB: PostgreSQL兼容,性能提升4倍
数据与分析:
- BigQuery: 无服务器数据仓库(PB级SQL分析)
- Pub/Sub: 全局消息和事件流
- Dataflow: 用于流和批处理的Apache Beam
- Dataproc: 托管Spark和Hadoop集群
- Cloud Composer: 用于工作流的托管Apache Airflow
AI/ML服务:
- Vertex AI: 统一ML平台(训练、部署、监控)
- AutoML: 用于标准任务的无代码ML
- 预训练API: 视觉、自然语言、语音、翻译
- TPUs: 用于大型模型训练的Tensor处理单元
决策框架:计算服务选择
需要在GCP中运行代码?
├─ HTTP服务?
│ ├─ 是 → 无状态?
│ │ ├─ 是 → Cloud Run(自动缩放到零)
│ │ └─ 否 → 需要Kubernetes? → GKE | Compute Engine
│ └─ 否(事件驱动)
│ ├─ 简单函数? → Cloud Functions
│ └─ 复杂编排? → GKE | Cloud Run Jobs
选择指南:
- 首选: Cloud Run(除非需要状态或Kubernetes)
- 需要Kubernetes: GKE Autopilot(托管)或Standard(完全控制)
- 简单事件: Cloud Functions(最长执行60分钟)
- 完全控制: Compute Engine(具有自定义配置的VM)
决策框架:数据库选择
选择数据库类型:
├─ 关系型(SQL)
│ ├─ 需要多区域? → Cloud Spanner
│ ├─ PostgreSQL + 高性能? → AlloyDB
│ └─ 标准RDBMS → Cloud SQL(PostgreSQL/MySQL/SQL Server)
│
├─ 文档型(NoSQL)
│ ├─ 具有离线同步的移动/Web? → Firestore
│ └─ 灵活模式,无离线? → MongoDB Atlas(市场)
│
├─ 键值型
│ ├─ 时间序列或IoT数据? → Bigtable
│ └─ 缓存层? → Memorystore(Redis/Memcached)
│
└─ 分析型
└─ PB级SQL分析 → BigQuery
决策框架:存储选择
需要存储类型?
├─ 对象/文件
│ ├─ 频繁访问 → Cloud Storage(标准)
│ ├─ 月度访问 → Cloud Storage(近线)
│ ├─ 季度访问 → Cloud Storage(冷线)
│ └─ 年度访问 → Cloud Storage(归档)
│
├─ 块存储 → 持久磁盘(SSD/标准/极端)
└─ 共享文件系统 → Filestore(NFS)
GCP vs AWS vs Azure服务映射
| 类别 | GCP | AWS | Azure |
|---|---|---|---|
| 无服务器容器 | Cloud Run | Fargate | 容器实例 |
| Kubernetes | GKE | EKS | AKS |
| 函数 | Cloud Functions | Lambda | Functions |
| 虚拟机 | Compute Engine | EC2 | 虚拟机 |
| 对象存储 | Cloud Storage | S3 | Blob存储 |
| SQL数据库 | Cloud SQL | RDS | SQL数据库 |
| NoSQL文档 | Firestore | DynamoDB | Cosmos DB |
| 数据仓库 | BigQuery | Redshift | Synapse |
| 消息传递 | Pub/Sub | SNS/SQS | 服务总线 |
| ML平台 | Vertex AI | SageMaker | 机器学习 |
架构模式
模式1:无服务器Web应用程序
使用案例: 具有数据库和缓存的无状态HTTP API
架构:
互联网 → Cloud负载均衡器 → Cloud Run → Cloud SQL(PostgreSQL)
→ Memorystore(Redis)
→ Cloud Storage
关键服务:
- Cloud Run用于API服务(自动缩放容器)
- Cloud SQL用于事务数据
- Memorystore用于缓存
- Cloud Storage用于文件上传
详细Terraform配置见references/compute-services.md。
模式2:数据分析平台
使用案例: 实时事件处理和分析
架构:
数据源 → Pub/Sub → Dataflow → BigQuery → Looker/Tableau
↓
Cloud Storage(暂存)
关键服务:
- Pub/Sub用于事件摄取(至少一次交付)
- Dataflow用于流处理(Apache Beam)
- BigQuery用于分析(分区表、聚类)
- Cloud Storage用于暂存和备份
BigQuery优化模式见references/data-analytics.md。
模式3:ML管道
使用案例: 端到端机器学习工作流
架构:
训练数据(GCS) → Vertex AI训练 → 模型注册表 → Vertex AI端点
↓
预测
关键服务:
- Vertex AI Workbench用于笔记本开发
- Vertex AI训练用于自定义模型(GPU/TPU支持)
- Vertex AI端点用于模型服务(自动缩放)
- Vertex AI管道用于编排(Kubeflow)
ML实现示例见references/ml-ai-services.md。
模式4:GKE微服务平台
使用案例: 具有多个服务的复杂编排
架构:
互联网 → Cloud负载均衡器 → GKE集群
├─ 入口控制器
├─ 服务网格(可选)
├─ 微服务A
├─ 微服务B
└─ 微服务C
关键特性:
- GKE Autopilot(完全托管节点)或Standard(自定义配置)
- 工作负载身份用于安全访问GCP服务
- 具有私有Google访问的私有集群
- 配置连接器用于通过Kubernetes管理GCP资源
GKE设置和最佳实践见references/compute-services.md。
最佳实践
成本优化
计算:
- 对可预测工作负载使用承诺使用折扣(57%折扣)
- 对容错工作负载使用Spot VM(60-91%折扣)
- Cloud Run在空闲时缩放到零(无费用)
- GKE Autopilot仅对pod资源收费,不对节点
存储:
- 使用适当的Cloud Storage类(标准/近线/冷线/归档)
- 启用对象生命周期管理以转移冷数据
- 使用冷线或归档存档备份(比标准便宜99%)
数据:
- BigQuery:使用分区和聚类表
- 仅查询所需列(避免
SELECT *) - 使用BI Engine进行缓存(最多10TB免费)
- 对重度BigQuery使用考虑固定费率定价
详细成本策略见references/cost-optimization.md。
安全基础
IAM最佳实践:
- 遵循最小权限原则
- 对应用程序使用服务账户,而非用户账户
- 为GKE工作负载启用工作负载身份(无服务账户密钥)
- 使用Secret Manager管理密钥,而非环境变量
网络安全:
- 使用私有Google访问(无需公共IP访问GCP服务)
- 为私有实例启用Cloud NAT用于出站互联网
- 实现VPC服务控制以保护数据防外泄
- 使用身份感知代理(IAP)进行零信任访问
数据安全:
- 启用静态和传输中加密(默认)
- 对敏感数据使用客户管理的加密密钥(CMEK)
- 为数据保护实现VPC服务控制边界
- 对所有项目启用审计日志
全面安全模式见references/security-iam.md。
高可用性
多区域策略:
- Cloud Storage:使用多区域位置(US、EU、ASIA)
- Cloud SQL:启用区域高可用(自动故障转移)
- Cloud Spanner:使用多区域配置(99.999% SLA)
- 全局负载均衡:路由到最近的健康后端
备份与灾难恢复:
- Cloud SQL:启用自动备份和时间点恢复
- 持久磁盘:计划快照备份
- Cloud Storage:为关键数据启用版本控制
- BigQuery:使用表快照进行时间旅行
网络和高可用模式见references/networking.md。
快速参考
常见gcloud命令
# 项目管理
gcloud projects list
gcloud config set project 项目ID
# Cloud Run
gcloud run deploy 服务名称 --image 镜像URL --region 区域
gcloud run services list
# GKE
gcloud container clusters create-auto 集群名称 --region 区域
gcloud container clusters get-credentials 集群名称 --region 区域
# Cloud Storage
gsutil mb gs://桶名称
gsutil cp 文件 gs://桶名称/
# BigQuery
bq mk 数据集名称
bq query --use_legacy_sql=false 'SELECT * FROM 数据集.表 LIMIT 10'
# Cloud SQL
gcloud sql instances create 实例名称 --database-version=POSTGRES_15 --region=区域
gcloud sql connect 实例名称 --user=postgres
完整命令参考见examples/gcloud/common-commands.sh。
Python SDK快速入门
# Cloud Storage
from google.cloud import storage
client = storage.Client()
bucket = client.bucket('my-bucket')
blob = bucket.blob('file.txt')
blob.upload_from_filename('local-file.txt')
# BigQuery
from google.cloud import bigquery
client = bigquery.Client()
query = "SELECT * FROM `project.dataset.table` LIMIT 10"
results = client.query(query).result()
# Pub/Sub
from google.cloud import pubsub_v1
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path('project', 'topic-name')
future = publisher.publish(topic_path, b'message data')
完整Python示例见examples/python/。
Terraform快速入门
# 提供者配置
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.0"
}
}
}
provider "google" {
project = "my-project-id"
region = "us-central1"
}
# Cloud Run服务
resource "google_cloud_run_service" "api" {
name = "api-service"
location = "us-central1"
template {
spec {
containers {
image = "gcr.io/project/api:latest"
}
}
}
}
完整Terraform示例见examples/terraform/。
服务选择速查表
| 需求 | 推荐服务 | 替代方案 |
|---|---|---|
| 无状态HTTP API | Cloud Run | App Engine |
| 复杂编排 | GKE Autopilot | GKE Standard |
| 事件处理 | Cloud Functions | Cloud Run Jobs |
| 对象存储 | Cloud Storage | N/A |
| 关系型数据库 | Cloud SQL | AlloyDB, Spanner |
| NoSQL文档 | Firestore | MongoDB Atlas |
| 时间序列数据 | Bigtable | N/A |
| 数据仓库 | BigQuery | N/A |
| 消息队列 | Pub/Sub | N/A |
| 流处理 | Dataflow | Dataproc |
| 批处理 | Dataflow | Dataproc |
| ML训练 | Vertex AI | 在GKE上自定义 |
| 缓存 | Memorystore Redis | N/A |
与其他技能的集成
相关技能:
- 基础设施即代码: 使用Terraform配置GCP资源(见
examples/terraform/) - Kubernetes操作: 在GKE上部署和管理应用程序
- 构建CI管道: 使用Cloud Build进行到Cloud Run或GKE的CI/CD
- 密钥管理: 使用Secret Manager进行敏感配置
- 可观测性: 使用Cloud Monitoring和Cloud Logging进行指标和日志
- 数据架构: 使用BigQuery和Cloud Storage设计数据湖和仓库
- MLOps模式: 使用Vertex AI实现ML管道
- AWS模式: 比较AWS和GCP服务等价物用于多云
- Azure模式: 比较Azure和GCP服务等价物
渐进披露
详细文档:
- 计算服务: 见
references/compute-services.md获取Cloud Run、GKE、Cloud Functions、Compute Engine和App Engine模式 - 存储与数据库: 见
references/storage-databases.md获取详细服务选择和配置 - 数据分析: 见
references/data-analytics.md获取BigQuery、Pub/Sub、Dataflow和Dataproc模式 - ML/AI服务: 见
references/ml-ai-services.md获取Vertex AI、AutoML和预训练API使用 - 网络: 见
references/networking.md获取VPC、负载均衡、CDN和Cloud Armor模式 - 安全与IAM: 见
references/security-iam.md获取IAM模式、工作负载身份和Secret Manager - 成本优化: 见
references/cost-optimization.md获取详细成本降低策略
工作示例:
- Terraform配置: 见
examples/terraform/获取基础设施模板 - Python SDK使用: 见
examples/python/获取客户端库示例 - gcloud CLI命令: 见
examples/gcloud/common-commands.sh获取命令参考
关键决策摘要
选择GCP时:
- 数据分析工作负载(BigQuery是同类最佳)
- ML/AI应用程序(Vertex AI、TPUs、Google研究支持)
- Kubernetes原生应用程序(GKE由Kubernetes创建者开发)
- 无服务器容器(Cloud Run成熟且成本效益高)
- 实时流(Pub/Sub + Dataflow)
GCP的独特优势:
- BigQuery:无服务器、PB级、最快数据仓库
- Cloud Run:最成熟的无服务器容器平台
- GKE:最先进的托管Kubernetes(Autopilot模式)
- Vertex AI:统一ML平台(训练、部署、监控)
- 按秒计费和持续使用折扣(自动成本节省)
多区域推荐:
- 生产工作负载:使用多区域以实现99.95%+ SLA
- Cloud Storage:多区域用于全局访问
- Cloud Spanner:多区域用于全局事务
- 全局负载均衡:路由到最近的健康后端