一文搞懂云服务模型:IaaS、PaaS 与 SaaS 的区别与选型
你可能每天都在使用云服务。查看 Gmail、参加 Zoom 会议、在 Slack 上和团队沟通,这些都离不开云端托管的软件。
但你既不用管理它运行的服务器,也不用维护底层基础设施——登录后直接干活就行。这种方式叫做软件即服务(SaaS),很多人用了好几年都不知道这个术语。
SaaS 只是三大云服务模型之一。另外两个是基础设施即服务(IaaS)和平台即服务(PaaS),它们让你对自己构建的基础设施和软件拥有不同程度的控制权。理解这些模型的区别,有助于你理清云工程的核心概念,并为项目选择合适的方案。
本文将逐一拆解 IaaS、PaaS 和 SaaS,说明每种模型中哪些由你管理、哪些由云服务商负责,并教你如何在实际项目中做出选择。
你将学到什么
读完本文后,你将能够:
- 解释 IaaS、PaaS、SaaS 分别是什么,各自帮你管理了什么
- 运用共享责任模型,明确你的职责从哪里开始、到哪里结束
- 识别各类模型对应的真实产品
- 为特定项目选择合适的模型
目录
- 前置知识
- 什么是云计算?
- 共享责任模型
- 基础设施即服务(IaaS)
- 平台即服务(PaaS)
- 软件即服务(SaaS)
- 三大模型之外:CaaS、FaaS 和 Serverless
- 如何选择合适的服务模型
- 总结
前置知识
阅读本文不需要任何云计算经验。只要你知道什么是计算机、服务器和互联网,就足够了。
如果你是云计算新手,建议先读我之前的文章 什么是云和云计算?。那篇文章介绍了什么是云、它和自建硬件有何不同,本文将在此基础上展开。
什么是云计算?
云计算是一种通过互联网按需使用计算资源的模式,资源包括服务器、存储和网络等,而且只需为实际使用的部分付费。
这些资源位于数据中心,由云服务提供商(CSP)拥有和运营。最知名的 CSP 有 Amazon Web Services(AWS)、Microsoft Azure 和 Google Cloud。
这里只是简单回顾一下关键概念,如果你想深入了解,可以阅读上面提到的文章。
什么是本地部署(On-Premises)?
在云计算出现之前,大多数组织都在本地运行系统。所谓本地部署,是指硬件放在组织自有或租用的建筑内,比如办公室里的机房,并配有专人维护。
在这种模式下,一切都要自己负责:购买服务器、搭建网络、安装和更新软件、保证机房供电和散热等。
举个例子,一家小企业想上线网店,就得买服务器、装软件,还要雇人来维护。如果业务增长超预期,还得继续添置硬件。
迁移到云之后有什么变化?
云计算把其中一部分工作交给了服务提供商。物理服务器依然存在,但由别人负责拥有和维护,你只需租用所需的部分。
不同云服务的区别在于提供商替你承担了多少工作。云服务模型正是用来描述这一点的,主要分为三类:
- 基础设施即服务(IaaS):提供商提供虚拟服务器、存储和网络,其余部署在上面的东西都由你自己管理。
- 平台即服务(PaaS):提供商还负责管理操作系统以及代码运行所需的工具,你只需提供应用和数据。
- 软件即服务(SaaS):这种模式下,服务商会提供一套现成的应用。你只需登录使用,管理自己的用户和数据即可。
所以说,云服务模型描述的是工作如何在客户与服务商之间分工,也就是系统中哪些部分由你管理,哪些部分由服务商替你管理。
共同责任模型
共同责任模型定义了云系统的哪些部分由服务商管理,哪些部分由你(客户)管理。要理解它,首先需要了解一个运行中的应用由哪些部分组成。
计算栈的层次
计算栈是指协同运行一个应用所需的一系列层次,每一层都依赖其下方的层。自底向上依次是:
- 网络:连接服务器之间以及服务器与互联网的物理线缆、交换机和路由器。
- 存储:保存文件和数据库的物理硬盘。
- 服务器:提供算力(CPU)和内存(RAM)的物理计算机。
- 虚拟化:把一台物理服务器切分成多台虚拟机(VM)的软件。VM 虽与其他 VM 共享硬件,但运行起来就像一台独立的计算机。
- 操作系统:管理硬件并让其他程序得以运行的基础软件,比如 Linux 或 Windows。
- 中间件:连接应用与外部世界及其他服务的软件,比如接收浏览器请求的 web 服务器。
- 运行时:代码运行所需的环境,比如 JavaScript 的 Node.js 或 Python 的解释器。
- 应用:软件本身,比如网上商城或邮件客户端。
- 数据:应用存储和处理的信息,比如客户记录、订单和邮件。
各模型中谁管理什么
AWS 把这种分工描述为云“本身”的安全和云“之内”的安全。服务商负责云本身的安全,涵盖数据中心、物理硬件、物理网络和虚拟化层。
而云之内的安全则由客户负责,涵盖你放入云中的内容及其配置方式,包括你的数据、用户及其权限,以及所用服务的各项设置。
基础设施即服务(IaaS)
基础设施即服务是一种云服务模式,由云服务商提供计算的基础构件,包括虚拟服务器、存储和网络。
IaaS 的工作原理
使用 IaaS 时,你向服务商申请一台虚拟机,指定 CPU 数量、内存大小、操作系统和所在网络。几分钟内虚拟机就能启动并连接使用。
之后这台服务器就归你管理:安装软件、更新操作系统、配置防火墙、保证应用持续运行,都是你的事。
在 IaaS 出现之前,要新添一台服务器得采购硬件、等上几周才能安装到位。而有了 IaaS,同样的服务器几分钟就能就绪,不用了随时删除。
但要记住:IaaS 免去了硬件负担,但没有免去服务器运维负担。
IaaS 通常按服务器运行时长(每小时甚至每秒)计费,外加存储费用和出站流量费用。
实际案例
- AWS 上的 Amazon EC2(Elastic Compute Cloud)
- Google Cloud 上的 Google Compute Engine
- Microsoft Azure 上的 Azure Virtual Machines
它们都提供虚拟机服务,并与其他 IaaS 构件配合使用,比如虚拟磁盘(Amazon EBS)、文件与备份存储(Amazon S3)以及私有网络(Amazon VPC)。
何时选择 IaaS
当你需要完全掌控操作系统及其上的一切时,IaaS 是正确的选择,尤其是以下场景:
- 需要托管平台不支持的特定操作系统版本或软件。
- 需要满足安全或合规要求,必须自行配置和审计服务器。
- 要把现有应用从自己的服务器迁移上云而不重写代码,也就是常说的“直接搬迁”(lift and shift)。
- 需要频繁创建和销毁的开发、测试环境。
权衡取舍
和任何技术方案一样,在选择这种模式之前,你需要了解它的一些利弊。
首先,操作系统要由你自己管理,包括打补丁、安全更新和备份——漏掉一次更新就可能留下安全漏洞。
你还需要规划扩容。云厂商会提供自动添加服务器的工具,但配置和测试都得靠自己。
此外,你可能还得学一些新技能。把服务器运维好,需要掌握 Linux 或 Windows 系统管理、网络和安全方面的知识。
而且闲置时间也要花钱。一台整夜跑着却没有任何流量的服务器,费用照算。
平台即服务(PaaS)
平台即服务是一种云服务模式,由厂商提供一个现成的环境来运行你的代码。服务器、操作系统、中间件和运行时都由厂商管理,客户只需要提供应用代码和数据。
PaaS 的工作原理
用 IaaS 时,应用运行之前你还得先把服务器准备好:更新操作系统、配置 Web 服务器、安装合适的语言版本,并持续维护这一切。
PaaS 则免去了这些负担。使用 PaaS 时,你只需告诉平台应用用的什么语言,然后提交代码(通常是推送到 Git 或上传一个包)。平台会自动构建应用,在托管服务器上运行,并给你一个访问地址。当流量增长时,它会按你设定的规则自动多跑几份应用副本。
内存分配、相关配置、谁能部署,这些仍然由你决定。只是不用再登录服务器去打补丁和维护了。
PaaS 通常按应用实际消耗的资源计费,比如运行实例的规格和数量,按小时或按月收费。
实际案例
- Heroku
- AWS Elastic Beanstalk
- Google App Engine
- Azure App Service
有些产品介于几个类别之间。比如 Google 的 Firebase 常被称为 PaaS,但更准确地说它属于后端即服务(BaaS)。BaaS 提供现成的后端能力,比如数据库、用户认证流程和文件存储,供你的应用直接调用。你不需要像在 Heroku 上那样把整个应用部署上去。
另一个例子是 Amazon RDS(Relational Database Service),它是一种托管数据库服务。AWS 负责数据库软件的运行和备份,你只需要管理表、数据和访问权限。它的工作方式类似 PaaS,只不过是面向数据库的。
什么时候用 PaaS
- 你想快速上线一个 Web 应用或 API,专心写代码。
- 团队规模小,没有专人负责管理服务器。
- 你的应用使用平台支持的常见语言,比如 Node.js、Python、Java 或 .NET。
- 你希望部署、扩容、监控这些事开箱即用,不想自己搭建。
代价与权衡
首先是控制权变少了。你不能随意安装软件,也不能改操作系统的设置。而且如果平台不支持某个功能,你就只能想办法绕过去。
其次是被厂商锁定的风险。所谓厂商锁定,就是你的应用依赖了某家平台独有的功能,之后想换服务商就变得很困难。
另外,规模大了以后成本可能更高。随着流量增长,PaaS 的费用可能超过自己在服务器上跑同样的负载,因为你为便利性付了钱。
你还得遵守平台的种种限制,比如最大请求时长、支持的语言版本等。
最后,代码的安全性仍然由你负责,包括它用到的第三方库——以及随之而来的所有风险。
软件即服务(SaaS)
软件即服务是一种云服务模式,由服务商通过互联网交付完整的应用。你通过浏览器或客户端访问,而让应用正常运转所需的一切都由服务商来打理。
SaaS 是如何工作的
在 SaaS 出现之前,使用商业软件意味着购买许可证、在每台电脑上安装,而且每次出新版本都要逐台更新。比如一家公司想拥有自己的邮件系统,就需要自建邮件服务器、安排专人维护,还要准备备份方案。
SaaS 则完全不同。服务商在自己的基础设施上运行应用,所有客户使用的都是同一个集中更新的版本。你只需注册账号、添加用户,就能开始工作。新功能和安全补丁自动送达,什么都不用安装。
你的工作从运行软件变成了配置软件:决定谁能开账号、每个人能访问什么、文件如何共享。
使用 SaaS 时,通常按用户按月或按年付费,并且常分为多个套餐层级,越高级的功能越多。
现实中的例子包括:
- Gmail 和 Google Workspace,用于邮件、文档和文件存储
- Microsoft 365,包含 Outlook、Word、Excel 和 Teams
- Slack,用于团队消息沟通
- Zoom,用于视频会议
- Dropbox,用于文件存储和分享
- Salesforce,用于管理客户和销售
什么时候适合用 SaaS
- 软件解决的是很多组织共同面临的问题,比如邮件、文档、聊天或会计。
- 你不想自己开发或维护这套软件。
- 团队需要随时随地、在任何设备上都能访问。
- 你需要工具这周就能用起来,而不是等半年。
举个例子:一个有二十名员工的非政府组织,需要专业邮箱、共享文档和视频通话,但没有 IT 团队。用 Google Workspace 或 Microsoft 365,一名管理员一天之内就能为所有员工开好账号,而服务器、更新和垃圾邮件过滤都由服务提供商处理。
代价与权衡
这种模式下,你的控制权最少。能用什么功能全看提供商做了什么,如果你需要它没有的功能,要么等,要么另找方案。
此外,你的数据存放在提供商那里,安全性完全依赖对方。所以你需要清楚数据存在哪里,以及离开时如何导出。
成本也很容易随团队规模增长而水涨船高。
还有,你依赖于网络连接。网络不稳定时,基于浏览器的工具可能偏偏在你最需要的时候用不了。
而且可定制的空间有限。能否把这个工具接入你的其他系统,取决于提供商允许什么。
三大模式之外:CaaS、FaaS 与 Serverless
IaaS、PaaS 和 SaaS 是主流模式,但还有 CaaS、FaaS 和 serverless 等选择。下面看看它们各自的含义和工作方式。
容器即服务(CaaS)
容器会把你的应用连同运行所需的一切打包在一起,包括运行时、依赖库和配置。因为所有东西都在包里,容器在你的笔记本上和在云服务器上的运行方式完全一致。Docker 是最常用的容器构建工具。
容器即服务(CaaS)是一种由云厂商替你运行和管理容器的模式。你只需提供容器镜像,由它负责启动容器、在容器故障时自动重启,并把它们分散部署到多台服务器上。负责做这些调度的软件叫容器编排器,其中使用最广泛的是 Kubernetes。
CaaS 介于 IaaS 和 PaaS 之间。你比 PaaS 拥有更多控制权,因为每个容器里装什么完全由你决定,但运行容器的很多杂活由云厂商代劳。
一些常见例子:
- Amazon ECS(Elastic Container Service),AWS 自家的编排器
- Amazon EKS(Elastic Kubernetes Service),AWS 上的托管 Kubernetes
- Google Kubernetes Engine(GKE),Google Cloud 上的托管 Kubernetes
使用 ECS 和 EKS 时,你可能仍需要管理运行容器的虚拟机,除非用 AWS Fargate——它能直接运行容器,无需你管理任何服务器。
函数即服务(FaaS)
函数即服务(FaaS)是一种模式:你上传一个个称为函数的小段代码,云厂商只在事件触发时才运行它们。所谓事件,就是某件事发生了,比如收到一个 Web 请求、上传了一个文件,或者到了预设的时间点。
你不需要让服务器一直开着等活干。事件发生时,云厂商启动你的函数、执行、然后停止。你按请求次数和每次运行的计算时长付费,所以没活干时一分钱计算费都不用花。
举个例子:一家网店需要每当卖家上传商品照片时生成一张小缩略图。用 IaaS,你得让一台服务器全天候待命监听上传,哪怕凌晨 3 点根本没人传图。用 FaaS,上传这个动作本身就会触发一个函数去生成缩略图,你只需为它运行的几秒钟付费。
一些常见例子:
- AWS Lambda
- Azure Functions
- Google Cloud Run functions(原名 Google Cloud Functions)
FaaS 也有取舍。每次运行有时间限制,闲置的函数启动时会稍慢一些,这叫做冷启动。
Serverless 的定位
Serverless 指的是这样一类云服务:你无需搭建或管理服务器,服务会随需求自动扩缩容,而且只按实际用量付费,不用为闲置容量买单。
Serverless 并不是技术栈上的第四种模型,它描述的是服务的运营和计费方式,而不是你管理哪一层。FaaS 是 serverless 的,但许多其他托管服务同样是,比如用于文件存储的 Amazon S3、用于数据库的 Amazon DynamoDB,以及用于容器的 AWS Fargate。
Google Cloud Run functions 属于 CaaS,同样归入 serverless 类别。
如何选择合适的服务模型
没有哪种模型适用于所有项目,正确的选择取决于你在做什么、谁来开发,以及你需要多少控制权。
为了帮你做决定,可以按顺序思考下面这些问题:
- 已经有现成软件能完成这项工作了吗?如果有,先用 SaaS。
- 你在用常见语言开发自己的应用吗?如果是,优先考虑 PaaS;对响应事件的小任务,可以用 FaaS。
- 你的应用已经容器化了吗?如果是,CaaS 或 serverless 容器平台可能更适合你。
- 你需要控制操作系统、安装自定义软件,或有严格的合规要求吗?如果是,选 IaaS。
- 你的流量是稳定的还是不可预测的?不可预测的流量通常适合 serverless 的按用量计费。
从满足需求的托管程度最高的模型开始,只有理由充分时才往下层走。
大多数生产系统都会组合多种云服务模型,各司其职。
总结
每种服务模型在技术栈上的不同位置划定了你与云服务商的责任边界。IaaS 提供虚拟基础设施,你负责管理操作系统及其上的所有内容;PaaS 提供平台,你只需管理代码和数据;SaaS 提供现成的应用,你只需管理用户、数据和配置。
CaaS 和 FaaS 处于这些模型之间,而 serverless 描述的是运营和计费方式。无论选择哪种,你(客户)都要对自己的数据及其访问权限负责。
感谢阅读!