本节摘要:计算服务是云上所有应用的发动机,核心形态有三种:虚拟机(VM)提供完整的操作系统环境,容器提供轻量可移植的应用包,函数计算(FaaS)提供按事件触发的即用即弃代码。本节对比三种形态在控制力、资源利用率、启动速度、计费方式上的差异,并给出"什么时候选哪种"的判断方法,让你在云厂商的"实例"与"函数"之间不再犹豫。
阅读完本节,你应当能够:
任何一个云上应用,最终都要落到"算力"上——总得有台机器在跑你的代码。但"机器"这个词在云上已经被拆成了好几层:你可以租一台完整的虚拟机,可以交一个容器镜像,也可以干脆只交一段函数代码。
为什么会有这么多选择?因为"跑代码"这件事在不同场景下的最优解不同。一个要跑十年、负载稳定的财务系统,和一个每天被调用几万次、每次只跑几百毫秒的图片压缩任务,需要的资源形态完全不一样。前者适合一台稳定的虚拟机,后者用函数计算几乎零成本。
把三种形态理解成一个连续谱:虚拟机给你一间毛坯房,容器给你一套标准间,函数给你一个"随叫随到、用完即走"的工位。 控制力递减,省心程度递增。你的任务决定你该站在这条谱线的哪个位置。
虚拟机(Virtual Machine,VM)是最早也最直观的计算服务形态。你在云控制台上选一个实例类型(多少核、多大内存、什么磁盘),平台就给你一台带完整操作系统的虚拟电脑。你可以登录进去装任何软件、配任何服务,跟你自己买服务器几乎没有差别,只是它跑在别人的数据中心里。
虚拟机的核心组件是 Hypervisor(虚拟机监控器),它负责在物理机上切出隔离的虚拟资源,并在多个虚拟机之间调度。虚拟机的好处是隔离性强、兼容性好——你想跑什么系统、什么软件都行;坏处是资源占用高(每台都带一套完整操作系统)、启动慢(分钟级)。
容器(Container)解决的是虚拟机的"笨重"问题。它不装操作系统,只打包"应用 + 运行时依赖",多个容器共享宿主机内核。因此容器镜像小、启动快(秒级)、资源利用率高,同一台物理机上能比虚拟机多跑几倍的应用。
容器的关键组件包括:容器引擎(负责创建和管理容器,提供运行时环境,如 Docker、containerd)、镜像仓库(存储和分发容器镜像)、调度器(决定容器该跑在哪台节点上)。容器最大的工程价值是"一次构建,到处运行"——开发环境、测试环境、生产环境跑同一个镜像,消除了"在我机器上好好的"这类经典问题。
函数计算(FaaS,Function as a Service)把抽象推到极致:你只提交一段函数代码,平台负责在事件触发时把它跑起来,跑完即回收。你完全不用关心"跑在什么机器上",甚至不必关心有没有机器。
函数计算的核心机制是事件驱动:API 请求来了、文件上传了、消息队列有消息了,都会触发函数执行。平台自动弹性伸缩,并发涨了自动多拉几个实例,空闲了自动回收,按实际执行时间和次数计费。省心是真的省心,但代价是:冷启动延迟(首次调用要初始化运行环境)、超时限制(单次执行通常有上限)、不适合长连接和有状态服务。
| 维度 | 虚拟机 VM | 容器 Container | 函数计算 FaaS |
|---|---|---|---|
| 交付单元 | 完整操作系统 | 应用镜像 | 函数代码 |
| 隔离性 | 强(独立内核) | 中(共享内核) | 中(平台隔离) |
| 启动速度 | 分钟级 | 秒级 | 毫秒~秒级 |
| 资源利用率 | 较低 | 高 | 最高 |
| 运维负担 | 高 | 中 | 几乎为零 |
| 计费方式 | 按租用时长 | 按资源/时长 | 按执行次数与时长 |
| 典型场景 | 数据库、遗留系统 | 微服务、Web 应用 | 事件处理、API 后端 |
| 组件 | 作用 | 相关技术 |
|---|---|---|
| Hypervisor | 切分物理资源给虚拟机 | VMware、KVM、Hyper-V |
| 容器引擎 | 提供容器运行时 | Docker、containerd |
| 调度器 | 分配任务到合适节点 | Kubernetes Scheduler |
| 镜像仓库 | 存贮分发虚拟机/容器镜像 | Docker Hub、云镜像仓库 |
⚠️ 常见坑:把"虚拟机数量"当绩效指标——开了十台 2 核小虚拟机,不如一台 8 核大虚拟机省心。机器数量不等于算力,资源利用率才是该盯的指标。
💡 关键直觉:选型先问"这个服务有状态吗、执行时间有多长、流量规律吗"。有状态长驻选虚拟机或容器,无状态短任务选函数计算,三者常常并存于同一个项目。
真实项目很少只用一种计算形态。一个典型的云上应用可能是这样的:Web 服务跑在容器里(Kubernetes 编排,方便滚动更新),数据库跑在虚拟机上(需要稳定的 IO 与配置控制),图片缩略图生成用函数计算(突发负载、短任务)。计算选型是组合题不是单选题,关键是让每种负载都落在它最舒服的形态上。这既是架构师的功力,也是云弹性价值真正兑现的地方。
理解计费模型,选型才算入门。虚拟机通常是按"实例规格 × 运行时长"计费,无论 CPU 利用率多低,只要开着就按整台付费;容器在云上常以"集群节点(底层虚拟机)"计费,加上镜像存储费用;函数计算按"调用次数 + 执行时长(GB 秒/内存)"计费,闲置零成本。
所以"函数计算一定最便宜"是错的:对于一天 24 小时高频调用的服务,按调用计费可能比包一台虚拟机贵得多。计费结论必须建立在真实负载曲线上,不是拍脑袋选"听起来省钱"的形态。这也呼应了第 3 章会讲的成本管理——先有计量,才有优化。
裸金属(Bare Metal)不经过虚拟化层,把物理机整台租给你,硬件直通、性能无损耗,适合高性能计算、高频交易这类对延迟和硬件控制极敏感的场景。它是计算服务谱系里"最左边"的形态,比虚拟机控制力更强、也更贵。
自动伸缩(Auto Scaling)不是一种计算形态,而是云平台的一项能力:根据负载指标(如 CPU 利用率、请求数)自动增删计算实例。它让"弹性"从口号变成默认行为,是虚拟机/容器形态的标准配套,常与负载均衡配合使用。
能,而且很常见。典型的"函数优先"架构是:核心业务逻辑拆成函数按事件执行,长驻的网关、监控、管理组件放容器里。第 5 章会讲到 Serverless 与 Kubernetes 的融合趋势,两者正在互相靠近。
一个经验法则:如果你需要"自己的操作系统、内核级配置、或要装非容器化的旧软件",用虚拟机;如果应用已经是"镜像化、无状态、可横向扩展"的形态,用容器。数据库、老系统往虚拟机放,新开发的 Web 服务往容器放,是大多数团队的默认答案。
打开任何一家云厂商的计算服务产品页,你都会看到一排排"实例规格",比如 2 核 4GB、4 核 16GB、GPU 实例、高主频实例。规格背后其实是几个变量的组合,看懂它们,选型就不抓瞎。
第一是 CPU 与内存配比。通用型实例 CPU 与内存配比适中,适合常规 Web 服务;内存型实例内存占比高,适合缓存、大数据处理这类吃内存的负载;计算型实例 CPU 占比高,适合渲染、编码、科学计算。第二是存储类型,本地盘快但易失,云盘持久但性能依赖网络,生产环境通常选云盘并做快照备份。第三是 GPU,图像渲染、深度学习训练需要它,普通 Web 服务用不上,别为用不上的特性付费。
实例规格与计费强相关:按量付费灵活、包年包月便宜、竞价实例最便宜但可能被回收(适合可中断的批处理任务)。第 3 章成本管理会展开讲这几种计费方式。这里只需要记住一个原则:规格是需求的对齐,不是虚荣的对齐——先算清应用的真实资源画像,再选实例,能省下相当可观的账单。
另外,无论选哪种计算形态,都要留意平台的能力边界。虚拟机有单机规格上限,容器集群有节点配额,函数有并发与超时上限。架构设计时把这些"天花板"画出来,比遇到瓶颈再补方案要省心得多。这也是为什么资深工程师常说:看云文档先看"limits"(限制)章节,那才是真实契约。
还有一个新手常忽略的点:计算服务不是孤立的,它天然依赖网络与存储。 一台裸虚拟机配好操作系统,没有虚拟网卡和云盘就是"无法联网的孤岛";反之,网络与存储的规格(带宽、IOPS)直接决定计算实例的实际表现。所以在真实部署里,计算、存储、网络三个货架往往是一起下的单——第 2.2、2.3 两节会补齐另外两块拼图。
算力有了,数据往哪放?下一节讲存储服务——对象、块、文件三种仓库,各放各的货。