前言
- 哈喽,大家好,我是 Lorin,随着云平台的发展,Serverless 成为一个备注关注的话题,这一架构模型为开发人员提供了更简单、更灵活的方式来构建和部署应用程序,而无需过多关注底层基础设施的管理。本文将介绍什么是 Serverless,以及为什么它在现代应用开发中变得如此重要。
IaaS 与 PaaS 和SaaS
- 在 Serverless 兴起之前,IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)是云平台中三种常见的服务模型。
IaaS(基础设施即服务)
- 概念: IaaS 提供的是云计算基础设施,包括计算资源(虚拟机、存储、网络等)。
- 特点: 用户可以通过虚拟化的资源来部署和运行操作系统、应用程序和服务。用户对基础设施有更多的控制权,但需要自行负责操作系统和应用程序的管理。
- 例子: AWS EC2(弹性云计算)、Azure Virtual Machines 等。
PaaS(平台即服务)
- 概念: PaaS 提供了一个应用程序开发和部署的平台,包括运行时环境、开发工具、数据库等。
- 特点: 用户不再关心底层的基础设施,而是专注于应用程序的开发和部署。PaaS提供商负责管理操作系统、运行时环境和一些底层服务。
- 例子: Heroku、Google App Engine、Azure App Service 等。
SaaS(软件即服务)
- 概念: SaaS 提供的是完整的应用程序,用户通过互联网访问并使用这些应用程序。
- 特点: 用户无需关心底层的硬件、操作系统和应用程序的管理,只需通过浏览器或应用程序接口访问即可。通常以订阅模式提供,按照使用量或用户数量计费。
- 例子: Salesforce、Google Workspace(以前是 G Suite)、Microsoft 365 等。
聊聊 IaaS
- 在标准的基础架构即服务(IaaS)云计算模型中,用户需要预先购买容量单元;也就是说,我们需要要先向公共云提供商支付始终可用的服务器组件的费用,才能运行我们的应用。 用户自行负责在需求高时扩展服务器容量,并在不再需要时缩减容量。即使在应用闲置不用期间,运行该应用所需的云基础架构也要保持就绪。
What is Serverless?
- Serverless 是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器,主要分为 FaaS(函数即服务)和BaaS(后端即服务)。
- Serverless 直译为"无服务器",但实际上仍然有服务器,但它们已从应用开发中抽离了出来。由云提供商负责置备、维护和扩展服务器基础架构等例行工作。开发人员则只需要关注业务本身的开发,可以简单地将代码打包到容器中进行部署。
- 部署之后,无服务器应用即可响应需求,并根据需要自动扩容。公共云提供商的 Serverless 产品通常通过一种事件驱动执行模型来按需计量。因此,当 Serverless 功能闲置时,不会产生费用。(比如阿里云 Function Compute 就是一种 FaaS)。
FaaS(函数即服务)
- FaaS 强调将应用程序拆分为小型、独立的函数,每个函数执行特定的任务。这些函数按需触发执行,无需事先预置服务器。
执行
- 函数是事件驱动的,通常与特定的事件(如HTTP请求、队列消息)相关联。函数的执行是短暂的,一旦任务完成,函数就会终止,不再耗费资源。
适应场景
- 适用于处理短暂而离散的异步任务,例如图像处理、数据处理、事件处理等。
BaaS(后端即服务)
- BaaS 提供了一整套后端服务,包括数据库、身份验证、推送通知等。它旨在简化应用程序的后端开发,让开发者无需自己搭建和管理这些后端服务。
执行
- 一般是长期运行的移动应用、Web应用,比如 API 服务等,实时监听请求,根据业务逻辑处理请求。
适应场景
- 适用于需要构建移动应用、Web应用的开发者,希望通过使用现有的后端服务(Baas平台提供:比如鉴权、存储、或者业务方向的通用服务)来加速开发过程。
FaaS vs BaaS 区别
关注点
- FaaS: 关注于执行单一任务的函数,强调按需触发执行。
- BaaS: 关注于提供整套后端服务,通过BaaS平台提供的现有服务来加速开发过程。
任务类型
- FaaS: 适用于短暂而离散的任务,强调事件驱动的函数执行。
- BaaS: 适用于构建应用程序的全面后端,包括数据库、身份验证等。
执行时长
- FaaS: 函数执行通常是短暂的,与特定事件相关联。
- BaaS: 服务一直在后台运行,持续提供后端功能,不受短暂事件的限制。
使用场景
- FaaS: 适用于处理短暂而离散的异步任务,例如图像处理、数据处理、事件处理等。
- BaaS: 适用于需要构建移动应用、Web应用的开发者,希望通过使用现有的后端服务(Baas平台提供:比如鉴权、存储、或者业务方向的通用服务)来加速开发过程。
优缺点
优点
- 可以提高开发人员的工作效率,降低运营成本。通过摆脱诸如服务器置备和管理等例行任务,开发人员有更多的时间专注于自己的应用本身。
- 可以通过整合第三方 BaaS 产品的完整组件来进一步简化应用开发。
- 只需为所需的云计算时间付费,而不用全程运行和管理自己的服务器,因此在一些场景可以大大降低了运营成本。
缺点
- 云提供商可能对其组件的交互方式有着严格的限制,从而影响您系统的灵活性和定制能力。采用 BaaS 环境时,开发人员可能要为代码不受其控制的服务负责。
- 放弃对 IT 堆栈这些方面的控制,也同时意味着您会受制于供应商技术锁定。即便您决定要更换提供商,也可能需要升级系统以符合新供应商的规范,而这无疑会增加成本。
总结
- Serverless 是一种云计算服务模型,强调无需关心底层基础设施,按需付费,同时开发者可以专注于编写应用程序的代码。大致分为 FaaS(函数即服务)和BaaS(后端即服务)。
- 在实际的业务开发过程中,如果我们基于云平台部署应用,可以根据需求选择不同的云平台架构,而 Serverless 不失为一个比较好的选择,对于更加复杂的场景,我们可以选择混合使用的方式,这也是目前的主流方式。
个人简介
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。
🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。
💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。
🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。
📖 保持关注我的博客,让我们共同追求技术卓越。