在云上跑一段服务,你至少有三种选择:虚拟机、容器、Serverless 函数。选错了,要么花冤枉钱,要么被运维拖垮。
一张表看懂取舍
- 虚拟机(EC2 / Compute Engine / Azure VM):最大控制力,适合有状态服务、需要特定内核或长时间运行的任务;代价是要自己打补丁、扩容。
- 容器 + K8s(EKS / GKE / AKS):标准化打包、弹性伸缩、微服务首选;代价是 Kubernetes 有学习曲线。
- Serverless(Lambda / Cloud Functions / Azure Functions):按调用付费、空闲零成本、自动扩容;适合事件驱动、流量波动大的场景;代价是冷启动与执行时长限制。
决策路径
- 流量稀疏、事件驱动(如 Webhook、定时任务)→ Serverless。
- 微服务、需要弹性与可移植性 → 容器 + 托管 K8s。
- 遗留系统、特殊环境、长连接 → 虚拟机。
💡 很多团队是混合使用:核心常驻服务跑容器,边缘任务用 Serverless,特殊依赖留在虚拟机。