云平台系列:What is Serverless (FaaS、BaaS)

2023年 11月 28日 52.5k 0

前言

  • 哈喽,大家好,我是 Lorin,随着云平台的发展,Serverless 成为一个备注关注的话题,这一架构模型为开发人员提供了更简单、更灵活的方式来构建和部署应用程序,而无需过多关注底层基础设施的管理。本文将介绍什么是 Serverless,以及为什么它在现代应用开发中变得如此重要。

IaaS 与 PaaS 和SaaS

  • 在 Serverless 兴起之前,IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)是云平台中三种常见的服务模型。

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编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论