生产环境里,云成本一路飙高,往往不是因为用了多少资源,而是资源利用率没做优化。一个容易被忽略的雷区,就是现货实例和抢占式虚拟机

AWS 的 Spot Instance 和 GCP 的 Preemptible VM,本质都是云厂商把闲置算力折价卖出来,折扣力度不小,但附带一个硬伤——随时可能被回收,通常只有极短的通知窗口。如果直接把这种资源塞到生产工作负载里,又没做架构上的中断处理,服务断联、请求失败就成了家常便饭。表面上省了计算费,实际运维成本和线上事故的开销又全还回去了。

举个例子,一个跑在 Kubernetes 上的无状态 Web 应用,配置里只指定了 spot/spot 节点亲和性,副本数设了 5 个。YAML 看着干净,问题在于:当云厂商回收实例,Pod 被驱逐,流量还在往里打,服务直接裸奔。如果没配 PodDisruptionBudget、没做优雅终止,也没在上一级加队列解耦,这套“省着用的架构”就变成了定时炸弹。

要把折扣算力用稳,得先想清楚哪些负载可以容忍中断。典型的候选者是异步任务、批处理、无状态 Web 前端、CI/CD 跑机这些。确定范围后,核心思路是用队列把这层算力和上游请求隔开:生产者把任务放进持久化队列,消费者跑在 spot 池子里,执行该任务,并且保证任务是幂等的,这样即使中途被中断,重试也不会产生副作用。

接着,不能把所有副本都押在 spot 上。AWS Auto Scaling Group 和 GCP 的 Flexible VMSS 都支持混合实例池,一部分按需实例托底,保证最低可用性,另一部分用现货实例去吃波动流量。监控和自动扩缩再跟上,按任务积压量调整 spot 节点数量,压力和成本才能平衡。

不少团队一看到 spot 折扣就去换,省没省到钱先不说,服务可用性先打了个折。成本优化从来不是单纯比单价,而是在可靠性和支出之间找到那条刚好够用的线。