云服务模型解析:IaaS、PaaS与SaaS的区别
你很可能每天都在使用云服务。当你查看Gmail、参加Zoom会议,或者在Slack上与团队交流时,其实都是在使用由云端提供的软件。 但你并不需要管理这些软件运行的服务器,也不需要维护底层的基础设施。你只需要登录后就可以开始工作了。这种服务模式被称为 软件即服务(SaaS) ,很多人多年来都在使用它,却不知道这个术语的存在。 SaaS只是三种主要的云服务模型中的一种。另外两种模型是 基础设施即服务(IaaS) 和 平台即服务(PaaS) ,它们能让你对所使用的基础设施和软件拥有不同程度的控制权。了解这些模型的区别,有助于你理解云计算的相关概念,并为自己的项目选择合适的服务模式。 在这篇文章中,我
你很可能每天都在使用云服务。当你查看Gmail、参加Zoom会议,或者在Slack上与团队交流时,其实都是在使用由云端提供的软件。
但你并不需要管理这些软件运行的服务器,也不需要维护底层的基础设施。你只需要登录后就可以开始工作了。这种服务模式被称为软件即服务(SaaS),很多人多年来都在使用它,却不知道这个术语的存在。
SaaS只是三种主要的云服务模型中的一种。另外两种模型是基础设施即服务(IaaS)和平台即服务(PaaS),它们能让你对所使用的基础设施和软件拥有不同程度的控制权。了解这些模型的区别,有助于你理解云计算的相关概念,并为自己的项目选择合适的服务模式。
在这篇文章中,我们将详细解释IaaS、PaaS和SaaS的区别,说明在每种模式下你需要负责什么,云服务提供商又负责什么,并学习如何根据实际需求来选择合适的云服务模型。
你将学到什么
读完这篇文章后,你将能够:
- 了解IaaS、PaaS和SaaS的含义,以及它们各自能为你提供哪些功能
- 运用“责任共享模型”来明确自己需要承担哪些工作,以及云服务提供商负责什么
- 识别出属于每个类别的典型云服务产品
- 为具体的项目选择合适的云服务模型
目录
先决条件
阅读这篇文章并不需要任何云计算方面的经验。只要你了解计算机、服务器和互联网的基本概念,就已经具备了所需的知识基础。
如果你是云计算领域的新手,建议先阅读我的文章什么是云计算?。这篇文章会解释什么是云计算,以及它与自己购买硬件来运行系统有何不同,而本文的内容正是建立在这一基础之上的。
什么是云计算?
云计算是一种服务模式,它允许你通过互联网按需使用计算资源,比如服务器、存储设备和网络连接。你只需要为实际使用的资源支付费用即可。
这些资源存储在由云服务提供商拥有和运营的数据中心中。最著名的云服务提供商包括亚马逊网络服务、微软Azure和谷歌云。
以上只是对关键概念的简要概述,以确保您能够理解这些基本内容。如果您需要更多信息,我的文章中有更详细的阐述。
“On-Premise”是什么意思?
在云计算出现之前,大多数组织都是将系统部署在本地环境中。“On-premise”意味着硬件设备位于该组织拥有或租用的场所内,比如他们办公室内的服务器机房,而且会有专门的人员负责维护这些设备。
在这种模式下,所有相关事务都由该组织自行负责——包括购买服务器、搭建网络、安装及更新软件,以及确保机房的供电和冷却系统正常运行。
例如,如果一家小型企业想要开设在线商店,它就需要购买服务器、安装相关软件,并雇人来维护这些系统。如果店铺的发展速度超出了预期,那么它就可能需要购买更多的硬件设备。
当您转向云计算时,会发生哪些变化?
云计算会将部分运营工作交给服务提供商来处理。虽然物理服务器仍然存在,但它们现在由服务商负责维护,而您只需租用自己所需的部分资源即可。
不同云服务之间的主要区别在于:服务提供商会为您承担多少运营工作。各种云服务模型对此进行了明确规定,其中主要有三种类型:
- 基础设施即服务(IaaS):在这种模式下,服务商为您提供虚拟服务器、存储空间和网络连接,而您则需要自行管理在这些资源上运行的应用程序。
- 平台即服务(PaaS):服务商会负责操作系统及应用程序运行所需的各类工具,您只需提供自己的应用程序和数据即可。
- 软件即服务(SaaS):服务商直接为您提供已完成开发的成熟应用程序,您只需登录后使用它,并管理自己的用户和数据即可。
因此,云服务模型实际上描述了您作为客户与服务商之间在系统运营方面的职责划分——即哪些部分由您负责管理,哪些部分由服务商来处理。
共同责任模型
“共同责任模型”明确了在云系统中,哪些部分由服务商负责管理,哪些部分需要您作为客户来承担维护职责。要理解这一模型,首先需要了解构成一个正常运行中的应用程序的所有组成部分。
计算堆栈的层次结构
计算堆栈是由多个相互协作的层构成的,这些层共同作用才能让应用程序正常运行。从下往上来看,计算堆栈包括以下几部分:
- 网络:用于将服务器相互连接以及连接到互联网的物理电缆、交换机和路由器。
- 存储设备:用于保存文件和数据库的物理硬盘。
- 服务器:提供处理能力(CPU)和内存(RAM)的物理计算机。
- 虚拟化技术:一种软件,能够将一台物理服务器划分为多台虚拟机。虽然这些虚拟机共享相同的硬件资源,但它们各自都可以像独立的计算机一样运行。
- 操作系统:如Linux或Windows这样的基础软件,它负责管理硬件资源,并使其他程序能够正常运行。
- 中间件:用于将你的应用程序与外部世界及其他服务连接起来的软件。例如,Web服务器会接收来自浏览器的请求。
- 运行环境:代码需要运行的特定环境。对于JavaScript来说,这个环境就是Node.js;对于Python来说,则是Python解释器。
- 应用程序:指具体的软件程序,比如在线商店或电子邮件客户端。
- 数据:应用程序存储和处理的信息,例如客户记录、订单内容以及电子邮件等。
各种云服务模型中谁负责管理什么
AWS将这种分工称为“云外部”的安全保障与“云内部”的安全保障。云服务提供商负责维护云平台本身的安全性,这包括数据中心、物理硬件、物理网络以及虚拟化层等。
然而,“云内部”的安全保障则是客户的责任。客户需要自行管理自己上传到云平台中的数据、配置相关设置,同时也要负责管理用户的权限以及所使用服务的各项参数。
基础设施即服务(IaaS)
基础设施即服务是一种云服务模型,在这种模式下,服务提供商会为用户提供计算所需的基本资源,包括虚拟服务器、存储空间和网络连接等。
IaaS的工作原理
使用IaaS时,用户可以向服务提供商申请一台虚拟机器。用户可以自行指定这台虚拟机器应配备多少CPU核心、多少内存空间、运行何种操作系统,以及它应该连接到哪个网络中。几分钟内,这台虚拟机器就会准备好并可供使用。
之后,这台虚拟服务器就由用户自己来管理了。用户可以在上面安装软件、更新操作系统、配置防火墙,并确保自己的应用程序能够正常运行。
在IaaS出现之前,如果要获取一台新的服务器,就需要先订购硬件设备,然后等待数周才能完成安装。而使用IaaS,几分钟内就能获得一台新的虚拟服务器,而且不再需要使用时也可以随时将其删除。
请记住:IaaS确实减轻了用户处理硬件的负担,但它并没有消除用户管理服务器的职责。
使用IaaS时,用户通常需要按照虚拟服务器实际运行的时间来付费,同时还需要支付所使用的存储空间费用以及数据传输费用。
实际的应用案例包括:
- AWS上的Amazon EC2(弹性计算云)
- Google Cloud上的Google Compute Engine
- Microsoft Azure上的Azure Virtual Machines
这些服务都能为用户提供虚拟服务器。此外,它们还与其他IaaS相关资源配合使用,例如虚拟磁盘(Amazon EBS)、文件存储与备份服务(Amazon S3)以及私有网络(Amazon VPC)等。
何时应该使用IaaS
当您需要对操作系统及其上的所有组件进行完全控制时,IaaS就是合适的选择,尤其是在以下情况下:
- 您需要使用某个特定的操作系统版本或某些特定软件,而这些功能在托管型云服务平台中是无法获得的。
- 您需要遵守某些安全规定或合规性要求,因此必须自行配置和管理服务器。
- 您希望将现有的应用程序从自己的本地服务器迁移到云端,而无需重新编写代码。这种迁移方式通常被称为“直接迁移”。
- 您需要频繁创建和删除开发测试环境,而IaaS能够满足这一需求。
权衡因素
与任何系统一样,在选择这种模型之前,有一些权衡因素需要您了解。
首先,您需要负责操作系统的管理。您需要处理补丁安装、安全更新以及数据备份工作,而任何遗漏的更新都可能带来安全隐患。
此外,您还需要考虑系统的扩展问题。虽然提供商会提供自动添加服务器的工具,但您仍需自行配置并测试这些工具。
另外,您可能需要学习一些新的技能。要顺利运行服务器,就需要掌握Linux或Windows操作系统管理、网络技术以及安全防护知识。
而且,即使服务器整夜都在运行但没有任何请求,您仍然需要为这些服务器支付费用。
平台即服务(PaaS)
平台即服务是一种云计算模型,在这种模式下,提供商会为您提供一个可以直接用于运行代码的环境。提供商负责管理服务器、操作系统、中间件以及运行时环境,而客户则只需提供应用程序代码和数据即可。
PaaS的运作原理
在IaaS模式下,您仍然需要先准备好服务器才能运行应用程序。这包括更新操作系统、配置Web服务器、安装相应的语言版本,并持续维护这些系统。
PaaS则消除了这一负担。使用PaaS时,您只需告诉平台您的应用程序使用哪种编程语言,然后通过Git推送代码或上传软件包即可。平台会为您构建应用程序,在托管的服务器上运行它,并提供一个Web地址。当访问量增加时,平台会根据您设定的规则自动扩展应用程序的运行实例数量。
您仍然可以决定应用程序占用多少内存、使用哪些配置选项,以及谁有权部署该应用程序。只不过,您再也不用亲自登录服务器来进行补丁安装或维护工作了。
在使用PaaS时,您通常需要按照实际使用的资源量来付费,比如运行实例的大小和数量,费用按小时或按月计算。
实际应用案例包括:
- Heroku
- AWS Elastic Beanstalk
- Google App Engine
- Azure App Service
也有一些产品介于不同的分类之间。例如,谷歌的Firebase常被归类为PaaS,但实际上它更准确地应该被称为“后端即服务”(BaaS)。BaaS会提供预先搭建好的后端功能,如数据库、用户认证机制和文件存储系统,应用程序可以直接调用这些功能。与在Heroku上部署整个应用程序的方式不同,使用BaaS时并不需要部署整个应用。
另一个例子是Amazon RDS(关系型数据库服务),它也是一种托管型的数据库解决方案。AWS负责运行数据库软件并处理数据备份工作,而您则可以管理数据库中的表结构、数据和访问权限。它的运作方式类似于PaaS,但专门用于数据库管理。
何时使用PaaS
- 如果您希望快速部署Web应用程序或API,并将精力集中在代码开发上,那么PaaS是一个不错的选择。
- 如果您的团队规模较小,且没有人专门负责服务器管理,PaaS也能帮助您节省人力成本。
- 如果您的应用程序使用的是平台所支持的常见编程语言,比如Node.js、Python、Java或.NET,那么PaaS能够简化开发流程。
- 如果您希望轻松实现应用程序的部署、扩展和监控功能,而无需自己进行相关配置,PaaS也是理想的选择。
权衡
首先,使用这类服务会让你失去更多的控制权。你不能随意安装任何软件,也不能更改操作系统的设置。此外,如果某个平台不支持某些功能,你就必须另寻解决办法。
你还可能面临“供应商锁定”的风险。所谓“供应商锁定”,是指由于你的应用程序依赖于某个特定平台提供的功能,因此转而使用其他供应商的服务会变得非常困难。
另外,当使用规模扩大时,你可能会付出更高的成本。随着访问量的增加,PaaS服务的费用可能会高于在自行管理的服务器上运行相同的应用程序,因为你是为这种便捷性而付费的。
此外,你还必须遵守平台的各种限制,比如最大请求次数或支持的语言版本等。
最后,你仍然需要自己负责保障代码的安全性,包括其中使用的第三方库及其带来的所有风险。
软件即服务(SaaS)
软件即服务是一种基于云技术的模式,供应商通过互联网提供完整的应用程序。用户可以通过网页浏览器或应用程序来使用这些服务,而供应商则负责维护所有必要的运行环境。
SaaS的工作原理
在SaaS出现之前,使用企业软件意味着需要购买许可证,将其安装在每台计算机上,并且每当有新版本发布时都需要为每一台机器进行更新。例如,如果一个组织想要建立自己的电子邮件系统,它就需要购置专用的电子邮件服务器,聘请专人来维护它,并制定备份方案。
而SaaS则不同。供应商会在自己的基础设施上运行这些应用程序,所有客户使用的都是同一份、由中央服务器定期更新的版本。用户只需创建账户、添加成员即可开始使用,新的功能和安全补丁会自动更新,无需用户进行任何操作。
使用SaaS后,你的工作重点从安装软件转变为配置软件。你可以决定谁可以注册账户、每个人能够访问哪些资源,以及文件应该如何共享。
通常情况下,SaaS服务是按用户数量每月或每年收费的,而且费用往往会根据提供的功能层次进行分级定价。
实际应用案例包括:
- Gmail和Google Workspace,用于处理电子邮件、文档管理和文件存储
- Microsoft 365,包含Outlook、Word、Excel和Teams等功能
- Slack,用于团队沟通
- Zoom,用于视频会议
- Dropbox,用于文件存储与共享
- Salesforce,用于客户管理和销售工作
何时使用SaaS
- 当该软件能解决许多组织共同面临的问题时,例如电子邮件管理、文档协作或会计工作等。
- 当你不想自己开发或维护这类软件时。
- 当你的团队需要随时随地在任何设备上使用这些工具时。
- 当你急需这些工具立即投入使用,而不是等待六个月后才能获得时。
例如,一个拥有20名员工的非政府组织,他们需要专业的电子邮件服务、共享文档功能以及视频通话功能。由于这个组织没有自己的IT团队,因此使用Google Workspace或Microsoft 365这样的SaaS服务,只需一名管理员在一天内为所有员工创建账户,其余的服务器维护、更新工作以及垃圾邮件过滤等任务都由供应商来负责完成。
权衡与取舍
选择这种方案,你的控制权是最小的。你只能使用提供商提供的功能;如果需要某些额外功能,就必须等待或另寻其他解决方案。
此外,你的数据会存储在提供商的服务器上。因此你必须了解自己的数据存储位置,以及离职后如何导出这些数据。
随着团队规模的扩大,你的成本也可能会相应增加。
另外,你还需要依赖互联网连接。当网络连接不稳定时,在最需要的时候,基于浏览器的工具可能就会无法正常使用。
而且,你可进行的定制选项也非常有限。要将该工具与其他系统连接起来,也需要看提供商是否允许这样做。
超越三大主流模型:CaaS、FaaS与无服务器架构
IaaS、PaaS和SaaS是当前主要的云计算服务模型,但还有CaaS、FaaS和无服务器架构等其他选择。让我们来看看这些模型的具体含义及其运作方式。
容器即服务(CaaS)
容器会将你的应用程序以及其运行所需的所有资源——包括运行环境、库文件和配置设置——打包在一起。由于所有这些内容都包含在容器内,因此该容器无论是在你的笔记本电脑上运行,还是在云服务器上运行,其运行方式都是完全相同的。Docker是目前最常用的构建容器的工具。
容器即服务是一种由提供商负责运行和管理容器的服务模型。你只需将容器镜像提供给提供商,它就会启动这些容器,在它们出现故障时重新启动它们,并将它们分配到不同的服务器上运行。用于执行这些操作的软件被称为容器编排器,而Kubernetes是目前使用最广泛的容器编排工具。
CaaS位于IaaS和PaaS之间。与PaaS相比,你拥有更大的控制权,因为你可以自行决定每个容器中应包含哪些组件;不过,运行容器的具体工作仍由提供商来完成。
一些常见的CaaS服务包括:
- Amazon ECS(弹性容器服务):这是AWS自家的容器编排工具
- Amazon EKS(弹性Kubernetes服务):在AWS平台上运行的Kubernetes管理方案
- Google Kubernetes Engine(GKE):在Google Cloud平台上运行的Kubernetes管理方案
使用ECS或EKS时,你仍然可以自行管理容器所依赖的虚拟机;不过,如果你使用AWS Fargate,那么就无需再管理任何服务器了,因为Fargate会自动处理容器的运行事宜。
函数即服务(FaaS)
函数即服务是一种服务模型:你只需上传一些被称为“函数”的小型代码片段,提供商就会在相应的事件发生时才运行这些函数。所谓事件,就是某些特定的情况发生,比如收到一个网络请求、有文件被上传,或者达到了预定的时间点等等。
在等待任务执行的过程中,你并不需要让服务器一直处于运行状态。当相关事件发生时,服务提供商会启动你的函数,让其运行完毕后再将其停止。你是按照请求次数以及每次运行所消耗的计算资源来付费的,因此当没有任何事情发生时,你也不会支付任何费用。
举个例子,假设一家网上商店需要在卖家上传产品图片时为每张图片生成缩略图。使用IaaS模型,你需要让服务器整天处于运行状态,以便随时监测上传操作的发生,即使是在凌晨3点这种没人会上传图片的时间也是如此。而使用FaaS模型,上传操作本身就会触发函数的执行,你只需要为函数运行的那几秒钟来付费即可。
一些常见的FaaS服务包括:
- AWS Lambda
- Azure Functions
- Google Cloud Run函数(之前也被称为Google Cloud Functions)
FaaS模型也存在一些缺点。每次函数运行都有一定的时间限制,而处于空闲状态的函数在启动时可能会需要更长的时间,这种现象被称为“冷启动”。
FaaS模型的适用场景
“服务器less”指的是这样一种云服务:你无需自行配置或管理服务器,服务会根据需求自动进行扩展,而且你只需要为实际使用的资源付费,而无需为闲置的资源支付费用。
“服务器less”并不是云计算技术体系中的第四种模型类型。它描述的是服务的运作方式及计费模式,而不是指你需要管理的具体技术层。FaaS属于服务器less模型,但许多其他托管型服务也同样属于这一类别,例如用于文件存储的Amazon S3、用于数据库管理的Amazon DynamoDB,以及用于容器管理的AWS Fargate等。
属于CaaS模型的Google Cloud Run函数也属于服务器less服务的范畴。
如何选择合适的服务模型
并没有一种服务模型适用于所有项目。正确的选择取决于你要构建什么、由谁来构建它,以及你需要多大的控制权限。
为了帮助你做出决定,可以按照以下顺序思考这些问题:
- 是否已经有能够完成这项任务的软件存在?如果有的话,那就优先考虑使用SaaS服务。
- 你是否正在用一种常见的编程语言开发自己的应用程序?如果是的话,可以先考虑PaaS模型;而对于那些需要根据特定事件来执行的小型任务,则可以选择FaaS模型。
- 你的应用程序是否已经被封装在容器中?如果是的话,CaaS或服务器less容器平台可能更适合你。
- 你是否需要对操作系统、自定义软件或合规性设置进行精细控制?如果需要的话,那就选择IaaS模型。
- 你的流量是稳定的还是不可预测的?对于那些流量不稳定的场景来说,按使用量计费的服务器less服务通常更为合适。
首先选择最适合你需求的托管型服务模型,只有当你有明确的理由时,才考虑向下调整技术层次。
大多数生产环境中的系统都会结合使用多种云服务模型,每种模型都会承担不同的功能。
总结
不同的服务模型会在云计算技术体系中的不同层面上划分用户的工作内容与服务提供商的责任范围。IaaS模型提供虚拟基础设施,用户需要自行管理操作系统及上层应用;PaaS模型提供一个开发平台,用户负责管理自己的代码和数据;而SaaS模型则直接提供成品应用程序,用户只需管理用户、数据和配置设置即可。
CaaS和FaaS处于这些模型之中,而“无服务器架构”则描述了相应的运营方式及付费模式。在所有这些方案中,您(作为客户)依然需要对自己的数据负责,并且需要自行控制哪些人可以访问这些数据。
感谢您的阅读! 相关文章
在人工智能生成的代码盛行的时代,如何加快持续集成流程的速度?
如今,编码人员编写代码的速度远远超过了大多数 持续集成管道 检查代码的速度。2026年4月, GitHub首席运营官Kyle Daigle表示 ,他的平台每周要处理2.75亿次代码提交操作,到今年这一数字预计将达到140亿次,而2025年时这一数字仅为约10亿次。在同一篇帖子中,他还提到GitHub Actions在单周内所处理的操作量已经达到了21亿次,而2023年时这一数字仅为5亿次。 第二个数据说明了这些代码提交最终会去往哪里:也就是持续集成系统中。如果开发人员每天只进行几次代码提交,那么耗时15分钟的持续集成流程还是可以接受的。但当某个编码人员在一天下午就提交了10个 Pull Req
阅读全文
如何在React Native应用程序中使用shadcn/ui[完整使用指南]
如果你已经开发过几个React Native应用,那么以下这些情况你应该很熟悉。你通常会从创建一个`colors.ts`文件和一个简单的`Button`组件开始。一开始,一切看起来都很正常。但后来,当设计发生了一些变化时,那个小小的颜色配置文件就会逐渐变长;而每次有人要求稍微调整组件的样式时,`Button`组件也需要添加更多的属性来满足这些新需求。 刚开始的时候,这种开发方式确实挺方便的,但经过几次设计修改后,即使是小小的更新,也可能意味着需要检查项目中的多个文件。 过了一段时间后,典型的颜色配置文件会变成这样: export const colors = { primary: '#6e48
阅读全文
Anthropic为那些重要的开源项目提供了自愿选择的安全扫描功能。
人工智能公司Anthropic推出了OSS Scanner,这是一项免费的服务,用户可以选择是否使用它来检测开源项目中的安全漏洞。注册使用该服务的项目维护者会定期收到由该公司最强大的模型生成的 security reports,这些模型包括Claude Mythos。这些报告在生成后不会经过人工审核,项目维护者可以自行验证其中列出的问题,并决定哪些修复方案应该被采纳。 作者:Matt Saunders
阅读全文
如何将应用程序从AWS迁移到GKE [完整指南]
这个指导性实验将带你了解如何迁移一个小型支付应用。该应用包含使用React开发的用户界面以及运行在AWS EC2实例上的Express API,而数据库则仍保存在AWS上。 你需要将用户界面和API迁移到Google Kubernetes Engine上,但无需更改客户目前使用的公共URL地址,而是逐步将流量从AWS转移至GKE,每次转移的比例为几百分比。 完成整个迁移过程后,你将能够在本地运行该应用,在AWS上搭建基础设施,通过八个Terraform步骤在GKE上构建环境,测试新环境是否正常工作,然后将生产环境的流量全部转移到GKE上,完成切换流程,并拆除不再需要的资源。 下图展示了迁移过程
阅读全文