云服务只是别人的计算机而已

2025 年 06 月 25 日

很久以前就看到云服务的分层,也就是所谓的 IAAS/PAAS/SAAS。当时的理解比较肤浅,基本上就是:

  • IAAS = 云端虚拟机
  • PAAS = 允许开发者自行部署云端应用的平台
  • SAAS = 以用户身份直接使用的云端应用

现在看来,这个理解虽然没什么问题,但实际上,由于这个分层方式太过粗略,对个人开发者没有任何指导意义。

说到底,云服务只是云服务的厂商为使用者(开发者或用户)提供了一些计算资源而已。这些计算资源也需要成本,因此在提供方式上,厂商通过不同的方式提供服务,为使用者提供了选择权。

那么,对于个人开发者而言,事实上的云端计算资源是如何分层或者分类的呢?

云端虚拟机(VPS)

最简单的一种云服务就是云端虚拟机。一般都是以 VPS 的形式提供,也就是所谓虚拟私人服务器。也有的厂商不用这个名字,比如 AWS EC2。但本质是一样的,就是云端的一台虚拟机。

对于开发者而言,其实不用在意它是虚拟的还是物理的,这两种分类只是资源的保障层级不同。

说到底,这就是云端的一台机器,开发者需要自行通过远程方式,来管理虚拟机

Docker 环境服务

这里指的是在云端运行 Docker Container 的服务,不是保存 Docker Image 的 Registry 服务。举例来说,比如 run.claw.cloud

本质上,Docker 方式就是将环境跟应用打包在一起运行

从技术层次上来讲,Docker 比虚拟机要更靠近上层,因此一个 Docker Container 使用的资源比一台虚拟机要少得多。

从应用运行的角度来看,对于一个应用来说,在 Docker Container 中运行,与在虚拟机甚至物理机中运行没有太大区别。

Docker Container 与虚拟机方式主要的区别在于:

  • 虚拟机逻辑上比较简单清晰,看起来就是一台完整的机器而已。
  • Docker 涉及到的概念更多,要考虑的问题也就更多,比如主机和 Container 之间的交互关系,或是数据的保存问题等。

因此,要使用 Docker Container 服务,开发者需要了解 Docker,需要知道如何将开发的应用打包到 Docker Image 中,并需要知道如何让 Docker Container 与主机进行交互

Serverless

Serverless 的本质就是将开发者所需要的功能,以更加碎片化的方式提供。例如 cloudflare workers

相对于 Docker 环境服务提供的完整的环境支持,Serverless 要求开发者对平台和自己的应用有更深的理解。

要使用 Serverless 服务,开发者必须深入理解 Serverless 平台所能提供的各项功能,然后将自己的应用进一步拆分,以适应平台的各项功能,这样就会跟平台产生更深的绑定。比如 cloudflare workers 的基础只是一个简单的接收 request 并给出 response 的函数。要使用数据库等功能,就需要了解 R2/D1 等各种接口,未来想要切换平台的话,成本就更高。

Runtime

还有部分平台提供 Runtime,就是所谓按照开发者的语言提供对应的运行服务。比如开发者使用 node.js 开发网站,平台可能提供一个 node.js 的 runtime,来运行开发者的应用。这种方式基本上只是在虚拟机或 docker 之上加了一层 runtime 作为运行环境,但限制了开发语言,考虑到开发者的技术栈的灵活性,我认为这种服务并不是太值得深入研究。

横向比较

方式云服务本质
VPS提供完整的虚拟机
Docker提供 Docker 运行环境
Serverless提供受限的应用运行环境
Runtime提供受限的 Runtime 作为应用运行环境

从上到下,灵活性基本是逐步降低的,当然价格也是。

通常来说,VPS 价格相对高一些,Docker 相对低一些,Serverless/Runtime 方案会更低。但这跟厂商的策略有关,另外虽然价格高不一定质量高,但价格低的质量一定不怎么高。

个人开发者对价格比较敏感,因此简单列一下我认为算是可以考虑的低价方案:

  • VPS:Oracle 的免费方案很难申请,RackNerd 比较便宜。
  • Docker:Claw Cloud 对于 6 个月以上的 github 账户提供每月 $5,因此控制一下使用量就可以免费使用。
  • Serverless:仔细查看 Cloudflare 的所有服务,基本可以满足个人开发者的所有需求。
  • Runtime:不喜欢被绑定技术栈,因此没实际使用过这类,但 youtube 上有一些视频介绍了类似平台,比如 hnhost.net。

总结

云计算的本质,就是使用别人的计算机,提供自己的服务。

作为开发者,总是要在资源/价格/开发复杂度 等多个方面不断权衡。所以在使用量较少的时候,使用云厂商提供的方案快速低价完成应用并上线,并不是一个错误的选择。如果使用量上升到一定程度,像 DHH 一样下云也可能是很好的方案。

总之一句话,没有最好的方案,只有最适合的方案。

Top