什么是函数即服务 (FaaS)?

函数即服务 (FaaS) 是一种云计算模型,您可以在其中开发称为函数的模块化小型代码,云服务提供商会执行这些代码来响应特定事件。在此模型中,您只需专注于代码逻辑,而无服务器运行时会管理基础设施。云服务提供商负责处理物理硬件、操作系统和 Web 服务器软件。

这与传统的基于服务器的应用或单体式架构不同。在这些旧模型中,您通常需要管理一个持续运行的服务器,即使没有人使用您的应用也是如此。使用 FaaS 时,平台仅在特定事件触发时运行您的代码。这样,您就可以高效地构建应用,因为您只需在必要时才使用资源。

FaaS、PaaS 和 IaaS

了解 FaaS 与平台即服务 (PaaS) 和基础设施即服务 (IaaS) 等其他云服务模式的比较情况很有帮助。FaaS 属于更广泛的“无服务器”类别,由提供方管理服务器,但它提供了不同级别的抽象。无服务器涵盖任何由提供方管理服务器的服务,例如数据库、存储或计算。FaaS 专门负责无服务器的计算部分,用于运行代码以响应事件。

  • FaaS 专注于事件驱动型代码。您部署一个函数,该函数会响应事件(例如文件上传)来执行特定任务。该平台会自动处理扩缩,通常在空闲时缩减至零。
  • PaaS 提供了一个构建和运行整个应用的平台。PaaS 同样无需管理硬件和操作系统,但通常会保持应用持续运行,等待用户请求。它最适合完整的 Web 应用,而不是单个事件触发器。
  • IaaS 提供最大的控制权,但需要最多的管理工作。您租用虚拟机 (VM) 和存储空间,但需要负责管理操作系统、运行时和中间件。

云服务模型比较

特征

FaaS(函数即服务)

PaaS(平台即服务)

IaaS(基础设施即服务)

主要单位

单个函数(小代码段)

整个应用

虚拟机

可伸缩性

即时按请求扩缩(包括缩减至零)

速度较慢,根据配置的规则进行扩缩

手动或预配置的自动扩缩

定价模式

按执行时间(毫秒)付费

按运行资源(正常运行时间)付费

按分配的资源(大小/时间)付费

维护

无(由提供方管理一切)

较低(提供商管理操作系统/运行时)

较高(您负责管理操作系统、更新和补丁)

适用场景

事件驱动型任务、粘合代码、数据处理

Web 应用、长期运行的服务

旧式应用、复杂的基础设施

特征

FaaS(函数即服务)

PaaS(平台即服务)

IaaS(基础设施即服务)

主要单位

单个函数(小代码段)

整个应用

虚拟机

可伸缩性

即时按请求扩缩(包括缩减至零)

速度较慢,根据配置的规则进行扩缩

手动或预配置的自动扩缩

定价模式

按执行时间(毫秒)付费

按运行资源(正常运行时间)付费

按分配的资源(大小/时间)付费

维护

无(由提供方管理一切)

较低(提供商管理操作系统/运行时)

较高(您负责管理操作系统、更新和补丁)

适用场景

事件驱动型任务、粘合代码、数据处理

Web 应用、长期运行的服务

旧式应用、复杂的基础设施

函数即服务的工作原理

FaaS 工作流可以简单高效。它通常依赖于事件驱动型模型,即操作会触发您的代码。

  1. 代码部署:您编写一小段代码(或函数)来执行一项任务,然后将其上传到云服务提供商。
  2. 事件触发:发生事件,例如用户点击按钮、文件上传到存储空间或消息到达队列中。
  3. 资源分配:云服务提供商确认该事件,并立即预配必要的执行环境。
  4. 函数执行:您的代码运行,执行其任务并生成结果,例如处理数据或发送通知。
  5. 停用和结算:任务完成后,资源会立即释放,您只需为代码运行的毫秒数付费。

FaaS 的常见应用场景

FaaS 用途广泛,非常适合许多现代应用架构。

您可以将复杂的应用分解为通过事件进行通信的小型独立组件。

FaaS 非常适合在用户上传图片后立即调整图片大小,或在数据到达时清理数据等任务。

您可以使用函数为移动应用背后的逻辑提供支持,或处理来自物联网 (IoT) 设备的数据。

对于可以拆分为许多小型同步作业的任务(如视频编码),FaaS 的运行效率非常高。

您可以使用在特定时间运行的函数来替换传统的计划任务,以执行维护或生成报告。

采用 FaaS 的主要优势

采用 FaaS 云技术可为开发者和企业带来诸多好处。

自动即时扩缩

您的应用可以处理流量突然激增的情况,从一个用户到数千个用户,无需您手动配置任何内容。

出色的费用控制(按用量付费)

您只需为代码运行的时间付费,与为空闲服务器付费相比,这可以显著节省成本。

加快开发速度

开发者可以快速编写代码并进行部署,而无需花费时间进行服务器管理或基础设施设置。

专注于应用代码,而非基础设施管理

团队可以将精力投入到为客户创造价值上,而不是修补服务器或管理操作系统。

高可用性和弹性

FaaS 平台通常会在多个可用区运行您的代码,因此,如果某个区域发生故障,您的应用仍可继续运行。

开发者常见问题:“冷启动”

开发者在使用 FaaS 时面临的最常见问题之一是“冷启动”。当函数有一段时间没有运行时,云服务提供商会关闭环境以节省资源。下次有事件触发该函数时,系统需要设置环境并加载您的代码,因此会产生短暂的延迟。这种延迟称为冷启动,可能会拖慢应用的速度。

如何减少冷启动

如果您的应用需要即时响应,可以按照以下步骤尽量缩短延迟时间。

  1. 减小代码大小:检查代码,移除任何并非绝对必要的大型库或依赖项。函数越小,加载速度越快。
  2. 使用延迟加载:对代码进行结构化处理,使其仅在函数逻辑中实际需要时才加载大型变量或连接,而不是在函数启动时立即加载。
  3. 配置实例数下限:大多数主要云提供商都允许您设置“实例数下限”。这样可以确保至少有一个函数实例始终处于预热状态,随时可以运行,从而消除启动延迟。
  4. 选择更快的运行时:有些编程语言(如 Go 或 Python)的启动速度通常比其他语言(如 Java)更快。如果速度至关重要,请考虑使用更轻量级的语言编写对延迟时间敏感的函数。

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。

FaaS 和 Cloud Run functions

函数即服务描述的是一种云计算模型,而 Cloud Run functions 是 Google Cloud 实现这一概念的产品。它是一种可扩缩的随用随付 FaaS 解决方案,让您无需执行任何服务器管理工作即可运行代码。

选择 Cloud Run functions 时,您将采用无服务器方法,由 Google Cloud 处理底层基础设施。您提供代码,平台负责管理执行环境、操作系统更新和自动扩缩功能。通过这种集成,您可以部署单一用途的函数来响应事件(例如 HTTP 请求或数据更改),而无需预配任何虚拟机。

该服务将函数部署的简易性与 Cloud Run 技术的强大功能相结合。开发者可以使用 Python、Node.js、Go、Java、.NET 和 Ruby 等语言构建事件驱动型应用。由于它在 Google 的强大基础设施上运行,因此您的函数可以自动从 0 个实例扩展到数千个实例,以满足需求。

其他资源

如需详细了解函数即服务和无服务器计算,您可以探索以下资源。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。