你很可能每天都在使用云服务。查 Gmail、参加 Zoom 会议、在 Slack 上给团队发消息,用的都是云端托管的软件。
但你并不需要管理它运行所在的服务器,也不用维护底层基础设施。登录进去就能开始工作。这就是软件即服务(SaaS),很多人用了好多年都不知道这个术语。
SaaS 只是三大云服务模型之一。另外两个是基础设施即服务(IaaS)和平台即服务(PaaS),它们让你对底层基础设施和自己构建的软件拥有不同程度的控制权。弄清这几种模型的区别,有助于你理解云工程的相关概念,并为自己的项目选对方案。
本文将逐一拆解 IaaS、PaaS 和 SaaS,说明每种模型下你需要管理什么、云服务商负责什么,并教你如何为实际项目做出选择。
你将学到什么
读完本文,你将能够:
- 解释 IaaS、PaaS 和 SaaS 分别是什么,以及各自为你管理哪些内容
- 运用责任共担模型,看清你的职责从哪里开始、到哪里结束
- 识别每个类别中的真实产品
- 为特定项目选择合适的模型
目录
前置知识
阅读本文不需要任何云相关经验。只要你知道计算机、服务器和互联网是什么,就足够了。
如果你刚接触云,建议先读我的文章什么是云与云计算?。那篇文章解释了云是什么、它与自建硬件有何不同,本文则在此基础上展开。
什么是云计算?
云计算是一种模型,让你通过互联网按需使用计算资源,比如服务器、存储和网络。用多少付多少。
这些资源放在云服务提供商(简称CSP)拥有并运营的数据中心里。最知名的CSP有Amazon Web Services(AWS)、Microsoft Azure和Google Cloud。
这里只是简单回顾,确保你理解关键概念。如果需要更多信息,我上面的文章有完整介绍。
本地部署是什么意思?
在云出现之前,大多数组织采用本地部署运行系统。本地部署意味着硬件放在组织拥有或租用的大楼里,可能是办公室的服务器机房,由自己的员工负责维护。
这种模式下,所有事情都得自己管:购买服务器、搭建网络、安装和更新软件,还要保证机房供电和散热。
比如一家小企业想开网店,就得买服务器、装软件,还要花钱请人维护。如果业务增长超出预期,还得添置更多硬件。
迁移到云上有什么变化?
云把其中一部分工作交给了提供商。物理服务器依然存在,但由别人拥有和维护,你按需租用。
不同云服务的区别在于提供商替你承担了多少工作。云服务模型就是描述这一点的,主要有三种:
- 基础设施即服务(IaaS):提供商给你虚拟服务器、存储和网络,上面的所有东西由你自己管理。
- 平台即服务(PaaS):提供商还负责管理操作系统和代码运行所需的工具。你只需带来应用和数据。
- 软件即服务(SaaS):提供商直接给你一个成品应用。你登录使用,管理自己的用户和数据。
所以,云服务模型描述的是工作如何在客户和提供商之间划分,也就是系统的哪些部分由你管理,哪些部分由提供商替你管理。
责任共担模型
责任共担模型定义了云系统中哪些部分由提供商管理,哪些部分由你(客户)管理。要理解它,首先得了解一个运行中的应用由哪些部分组成。
计算栈的层次
计算栈是协同运行一个应用所需的各层集合,每一层都依赖其下层。自底向上依次为:
- 网络:连接服务器之间以及服务器与互联网的物理线缆、交换机和路由器。
- 存储:保存文件和数据库的物理硬盘。
- 服务器:提供处理能力(CPU)和内存(RAM)的物理计算机。
- 虚拟化:把一台物理服务器拆分成多台虚拟机的软件,虚拟机简称VM。VM与其他VM共享硬件,但表现得像一台独立计算机。
- 操作系统:管理硬件并让其他程序得以运行的基础软件,如Linux或Windows。
- 中间件:把应用与外部世界及其他服务连接起来的软件,例如接收浏览器请求的Web服务器。
- 运行时:代码运行所需的环境,例如JavaScript的Node.js或Python的Python解释器。
- 应用:软件本身,例如在线商店或电子邮件客户端。
- 数据:应用存储和处理的信息,例如客户记录、订单和电子邮件。
各模型中谁负责什么
AWS把这种分工描述为云“本身”的安全与云“中”的安全。提供商负责云本身的安全,涵盖数据中心、物理硬件、物理网络和虚拟化层。
但云中的安全是客户的责任,涵盖你放入云中的内容以及如何配置。这包括你的数据、你的用户及其权限,还有你所使用服务的各项设置。
基础设施即服务(IaaS)
基础设施即服务是一种云模型,提供商为你提供计算的基础构件,包括虚拟服务器、存储和网络。
IaaS如何运作
使用IaaS时,你向提供商申请一台虚拟机,自行选择CPU数量、内存大小、运行的操作系统以及连接的网络。几分钟内VM就能运行起来,你可以直接连接上去。
从那一刻起,这台服务器就归你管理。你需要安装软件、应用操作系统更新、配置防火墙,并保证应用持续运行。
在IaaS出现之前,要获得一台新服务器意味着订购硬件,再等上几周才能安装完成。有了IaaS,同样的服务器几分钟就能就绪,不再需要时还可以直接删除。
但要记住:IaaS卸下了硬件负担,却没有卸下服务器负担。
使用 IaaS 时,通常按服务器运行的每小时或每秒计费,再加上存储费用和出站数据传输费用。
真实案例包括:
- AWS 上的 Amazon EC2(弹性计算云)
- Google Cloud 上的 Google Compute Engine
- Microsoft Azure 上的 Azure 虚拟机
这些服务都为你提供虚拟机,并与其他 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(关系型数据库服务),它是一种托管数据库。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 或无服务器容器平台可能适合你。
- 你是否需要控制操作系统、定制软件,或有严格的合规要求?如果是,选择 IaaS。
- 你的流量是稳定还是不可预测?不可预测的流量通常适合 Serverless 的按用量付费模式。
从满足需求的最托管化模型起步,只有当你有了明确理由时,才向栈的下层移动。
大多数生产系统会组合多种云服务模型,各自承担不同用途。
总结
每种服务模型都在栈上的不同位置划出你与提供商之间的分工界线。IaaS 给你虚拟基础设施,你负责管理操作系统及其上的一切。PaaS 给你一个平台,你负责管理代码和数据。SaaS 给你一个成品应用,你负责管理用户、数据和设置。
CaaS 和 FaaS 介于这些模型之间,而 Serverless 描述的是你如何运维和付费。无论哪种模型,你(客户)始终要对数据以及谁可以访问数据负责。
感谢阅读!