云服务只是别人的计算机而已
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 一样下云也可能是很好的方案。
总之一句话,没有最好的方案,只有最适合的方案。