内容提要
生产流量按99/1至0/100分阶段切至GKE,每步核对权重、健康、登录与错误率;演练回滚并排查数据库连接耗尽风险。最终GKE承载全部流量,AWS仅作安全网,记录数据、成本与复盘,随后下线EC2,RDS暂留。
延伸解读
迁移策略:分阶段流量切换与回滚
文章强调通过负载均衡器逐步将生产流量从AWS切至GKE,每次仅调整几个百分点,并核对权重、健康检查、登录和错误率。这种分阶段方式允许在出现问题时快速回滚,例如使用脚本将100%流量切回AWS,回滚只需几秒。同时,文章指出DNS切换因缓存问题可能导致回滚延迟,因此选择负载均衡器而非DNS。
数据库连接池的潜在风险
在AWS上,单个API进程最多使用10个数据库连接。迁移到GKE后,多个Pod同时运行,每个Pod都有自己的连接池,但共享同一个RDS数据库。如果Pod数量增加,总连接数可能超过数据库限制,导致连接耗尽。文章在章节22中特别提醒读者注意这一数学问题,建议提前规划连接池大小和Pod数量。
幂等性保障跨云支付安全
支付API使用idempotency_key确保重复请求不会导致重复扣款。在迁移过程中,客户可能先请求AWS,重试时请求GKE,但由于两个环境共享同一个数据库,GKE会检查到相同的幂等键并返回之前的结果,避免二次扣费。文章通过实验演示了这一点,强调共享数据库在跨云迁移中的关键作用。
成本控制与资源清理
文章详细列出了AWS和GCP的每日成本,并建议如果暂停超过一两天,应销毁资源以避免不必要的费用。提供了teardown脚本和terraform destroy命令。此外,还提醒弹性IP即使未使用也会产生费用。读者应记录成本并定期检查,确保迁移实验不会造成意外支出。
Q&A
如何将应用从 AWS 迁移到 GKE?
迁移过程包括:在本地运行应用,部署到 AWS 建立基线,使用 Terraform 分八个阶段构建 GCP,将应用部署到 GKE 暂存环境,进行安全审查和负载测试,然后逐步将生产流量从 AWS 切换到 GKE(从 1% 到 100%),最后下线 AWS 资源并记录迁移过程。
迁移过程中如何保证数据库安全?
数据库(PostgreSQL)保留在 AWS RDS 上,不随应用迁移。迁移期间,AWS 和 GKE 环境共享同一个数据库,避免迁移支付数据。同时,通过幂等键(idempotency_key)确保重试不会导致重复扣款,即使请求分别发送到 AWS 和 GKE。
如何逐步将流量从 AWS 切换到 GKE?
使用 Google 负载均衡器,客户通过一个公共地址访问。初始时 100% 流量到 AWS,然后使用脚本 scripts/shift-traffic.sh 逐步增加 GKE 的流量比例(例如从 1% 开始),每次调整后检查错误率和延迟。如果出现问题,可以快速回滚到 100% AWS。
迁移过程中如何确保零停机?
零停机意味着没有客户经历持续的中断。通过负载均衡器逐步切换流量,并设置错误率和延迟限制(如 5xx 错误率超过 1% 持续 2 分钟,或 p95 延迟超过 AWS 基线的 3 倍持续 5 分钟),确保问题在可控范围内。同时,回滚机制可以在几秒内将全部流量切回 AWS。
迁移到 GKE 需要哪些工具和技能?
需要安装 Docker、Git、Python3、AWS CLI、Terraform 1.5+、Node.js 20+、gcloud CLI、kubectl、kustomize 等工具。不需要预先具备 Kubernetes、Terraform、GCP 或负载均衡经验,但需要按照指南逐步操作。
迁移完成后如何清理资源?
迁移完成后,先下线 AWS EC2 服务器,但 RDS 数据库暂时保留。之后可以运行脚本 ./scripts/teardown-gcp.sh 和 terraform destroy 来销毁 GCP 和 AWS 资源。同时,记录迁移数据、成本和复盘,并撰写迁移记录。