分享到

导言

Article header

Serverless 计算是云计算领域中相当新的演进。Serverless 提供商允许开发者专注于其应用程序所需的功能,而无需担心执行环境或任何其他较低级别的层。

在本文中,我们将了解一些最受欢迎的 Serverless 提供商,并分解它们在不同类别中的比较情况。在了解您的选择后,您将能够更好地评估您的选择,并选择最适合您需求的服务。

我们将讨论每种服务的共同点、不同之处,以及可能使您选择一种服务而不是另一种服务的标准。虽然没有哪一个 Serverless 提供商适合所有用户,但此细分旨在突出显示一些标准,以便更轻松地根据您的优先级评估候选者。

提供商概述和评估标准

虽然还存在其他选项,但在本文中,我们将了解一些最常见的商业 Serverless 提供商。我们将评估以下选项:

  • AWS Lambda
  • Microsoft Azure Functions
  • Google Cloud Functions
  • Cloudflare Workers
  • Netlify Functions
  • Vercel Functions

这些产品都代表了 Serverless 计算的实现。要更好地了解什么是 Serverless 计算以及它可以提供哪些好处,请查看我们的“什么是 Serverless?”文章

请注意,我们在此避免讨论基于容器的解决方案。容器服务应用广泛,并且在许多情况下,与 Serverless 计算提供的一些价值存在重叠。然而,基于容器的生态系统比短暂的、面向需求的 Serverless 用例要广泛得多,因此我们将保持专注于适合这种较窄设计范围的解决方案,以限制我们的范围。

当我们描述各种提供商提供的服务时,能够使用相同的通用类别来比较每个选项会很有帮助。在本指南中,我们将了解每个 Serverless 平台在以下方面的比较:

  • 重点: 提供商对该服务的主要目标是什么?他们是通用产品还是专注于市场的特定方面?
  • 功能: 该平台是否提供任何独特的卖点使其脱颖而出?
  • 语言支持: 函数支持哪些语言?
  • 成熟度: 该服务经过良好测试的程度如何?它证明自身可靠性的时间有多长?
  • 价格: 使用该服务需要多少钱?是否有免费和付费层级?如何计算使用量?
  • 限制: 工作负载执行的限制和上限是什么?执行时间、请求和响应大小、每天或每月的执行次数等的阈值是多少?

我们还将简要介绍一些 Serverless 计算邻近技术,例如 Serverless 数据库,这些技术可能有助于改进您的 Serverless 策略。我们将提及以下提供商和服务:

  • Amazon DynamoDB 和 Aurora Serverless
  • Microsoft Cosmos DB Serverless 和 Azure SQL Serverless
  • Google Firestore
  • PlanetScale
  • MongoDB Atlas Serverless
  • CockroachDB Serverless
  • Fauna
  • Neon

最后,我们将介绍一些您可能想要关注的较新工具和服务,如果您正在构建 Serverless 应用程序。虽然它们此时可能尚未准备好用于生产,但它们可能很快就能提供价值:

  • Deno Deploy
  • Prisma Accelerate

考虑到这些类别,我们可以开始查看可用的服务。

AWS Lambda

概述

  • 已发布 2014
  • 重点: 通用 Serverless 计算。AWS 服务集成。
  • 语言支持: 广泛
  • 成熟度: 成熟
  • 定价: 按调用次数和资源消耗量计费。边缘部署或预配置的预热实例需要额外付费。

一般描述

也许 Serverless 领域中最知名的提供商是 AWS Lambda。亚马逊的 Lambda 服务于 2014 年推出,是最早引起市场广泛关注的提供商之一,这很大程度上归功于来自其他服务产品的内置客户群。

AWS Lambda 仍然是其他产品与之比较的主要服务,因为它具有稳定性、广泛的功能和普遍的熟悉度。

重点

AWS Lambda 是一个通用的 Serverless 平台。它并没有过多地关注解决特定问题,而是提供一个平台来用于您可能拥有的任何事件驱动型工作流程。

由于亚马逊广泛的服务目录,Lambda 确实非常强调与其他 AWS 服务的兼容性和集成。

功能

AWS Lambda 除了每个 Serverless 提供商都应具备的基本功能外,还提供了更多功能。随着时间的推移,该服务变得更加灵活和强大,使其能够保持竞争力和新鲜感。

以下是它所拥有的一些功能:

  • 任意可执行文件:您可以配置 Lambda 服务以运行任意可执行文件来处理事件,而不是使用特定于语言的函数。
  • 自定义运行时:用户可以实现自己的语言运行时,而不仅仅是亚马逊提供的原生运行时。
  • 预配置并发:能够保持事件处理程序启动并处于待机状态,以帮助缓解事件发生时分配资源时出现的冷启动问题。
  • 轻松访问持久性:用户可以使用 Amazon 的 RDS Proxy 从其函数安全地连接到数据库实例,并使用 Elastic File System 存储基于文件的数据。

语言支持

在撰写本文时,AWS Lambda 提供以下原生语言运行时:

  • Node.js:10、12、14
  • Python:2.7、3.6、3.7、3.8、3.9
  • Ruby:2.5、2.7
  • Java:8、11
  • Go:1.x
  • .Net Core:2.1、3.1

此外,如上所述,您可以提供自己的自定义运行时,这使您可以任意扩展可用的运行时支持。

成熟度

AWS Lambda 可能是当今最成熟的 Serverless 平台,因为它已经运行了很长时间。它已被证明是可靠的,并且能够处理各种规模的工作负载。

价格

AWS Lambda 根据资源使用量按毫秒级计费。不幸的是,运行 AWS Lambda 的总成本通常很难提前计算出来,因为许多不同的因素会影响总价。

总价基于以下多个因素:

  • 执行功能的架构:x86 或 Arm。这根据请求数量和每个请求的持续时间收费。
  • 分配给函数的内存量:从 128 MB 到 10,240 MB,以 1 MB 增量分配
  • 预配置并发使用量:如果您选择预配置并发以帮助提高性能,则额外的并发将花费更多。
  • 函数传入和传出的数据量
  • Lambda@Edge 使用量:如果您将函数部署在更靠近客户端的位置,您将需要为额外的服务付费。

限制

Serverless 提供商通常对您的函数和帐户允许消耗的资源有限制或配额。以下是 AWS Lambda 一些更重要的上限:

  • 函数内存:以 1 MB 增量配置,从 128 MB 到 10240 MB
  • 函数超时:900 秒(15 分钟)
  • 函数层:5
  • 函数突发并发:500-3000,取决于区域
  • 请求和响应大小:同步为 6 MB,异步为 256 KB
  • 部署大小:压缩后 50 MB,解压缩后 250 MB

总结

AWS Lambda 是一个强大而成熟的平台,用于构建 Serverless 应用程序。它比许多其他提供商拥有经验优势,并且在 Serverless 领域中的许多功能和发展方面仍然处于领先地位。

它与其他 AWS 服务的集成使其成为那些已经生活在亚马逊生态系统中的人的显而易见的选择。不幸的是,它也继承了 AWS 服务经常受批评的成本预测难题。

然而,总的来说,AWS Lambda 是 Serverless 函数的强大通用选择。它很可能继续其添加功能和集成的轨迹,以保持竞争力。

Microsoft Azure Functions

概述

  • 已发布 2016
  • 重点: 通用 Serverless 计算。Azure 服务集成。
  • 语言支持: 广泛
  • 成熟度: 成熟
  • 定价: 按调用次数和资源消耗量计费。提供分层捆绑包。

一般描述

Microsoft Azure Functions 是 Azure 云生态系统的 Serverless 产品,于 2016 年发布。虽然 AWS Lambda 具有先发优势,但 Microsoft 能够以其示例为起点,开发自己的定价策略、定位和功能。

由于 Azure Functions 旨在填补其服务目录中与 AWS Lambda 相同的利基市场,因此在许多方面,它都是类似的产品。即便如此,Microsoft 的产品仍然有一些重要的区别。

重点

Microsoft Azure Functions 是一个通用的 Serverless 平台,旨在运行事件驱动型应用程序。虽然它的开发目标是成为一个灵活的通用工具,但 Azure Functions 在设计时也考虑了 Azure 生态系统的其余部分。

功能

Azure Functions 提供了您对 Serverless 平台期望的所有标准功能。此外,它还提供了一些有趣的功能,包括:

  • 各种部署选项:Azure 为 Serverless 函数提供各种计划,这些计划根据您的需求捆绑了功能。
  • 可扩展的绑定:您可以向平台添加扩展以支持不同的工作流程和集成。
  • 集成的 HTTP 端点:Azure 函数开箱即用地配备了 HTTP 端点管理。

语言支持

Azure Functions 原生支持以下语言运行时:

  • C#:.Net Framework 4.8、.Net Core 2.1 和 3.1、.Net 5.0 和 6.0
  • JavaScript:Node.js 6、8、10、12、14
  • F#:.Net Framework 4.8、.Net Core 2.1 和 3.1、.Net 6.0
  • Java:8、11
  • PowerShell:PowerShell Core 6、PowerShell 7.0
  • Python:3.6、3.7、3.8、3.9
  • TypeScript:(转译为 JavaScript)

可以通过运行轻量级 Web 服务器作为自定义处理程序来支持其他语言和运行时。

成熟度

Azure Functions 已经存在一段时间了,并且已经有时间变得成熟。Azure Functions 产品在其初始产品的基础上进行了迭代,现在代表着一个相当稳定的产品,对于大多数用例都具有良好的性能。即便如此,Microsoft 的产品通常感觉仍然在追赶亚马逊的产品,这对于某些人来说可能很重要。

价格

在成本方面,Microsoft 的 Azure Functions 的价格与 Amazon Lambda 的定价非常相似。按照相同的模式,Azure Functions 的计费方式基于执行次数和分配给处理函数的资源。

Azure Functions 的一些不同之处包括:

  • 仅对使用的内存收费,而不是对分配的内存收费
  • 在同一执行实例中执行多个函数时,资源仅收费一次

此外,Azure Functions 提供分层定价模型,为不同类型的使用提供计划:

  • 消耗计划:经典的 Serverless 产品,具有事件驱动、自动扩展执行和按使用量付费的模型
  • 高级计划:以更高的价格增加额外的保留容量和资源分配,以避免冷启动。
  • 专用计划:函数主机不会关闭,因此不可能出现冷启动。

限制

Microsoft Azure Functions 的限制取决于您使用的计划类型。函数的一些资源分配包括:

  • 规模:消耗计划最多 200 个实例,高级计划 100 个实例,专用计划 10-20 个实例
  • 函数最大执行时间:消耗计划为 10 分钟,高级计划和专用计划无限制
  • 最大请求大小:100 MB
  • 最大内存:消耗计划为 1.5 GB,高级计划为 3.5-14 GB,专用计划为 1.75-14 GB

总结

总的来说,Microsoft Azure Functions 是通用 Serverless 应用程序的绝佳选择。Microsoft 拥有一个完整的服务和工具生态系统,您可以使用 Functions 将它们粘合在一起。此外,它在分配资源和预测成本方面提供了更大的灵活性。

最终,您选择 Microsoft Azure Functions 可能与其他关于您的云环境的选择类似。这不仅关乎服务本身,还关乎您是否对整个生态系统感兴趣。对于使用以 Windows 为中心的开发技术或依赖于基于 Azure 的服务的开发人员来说,Azure Functions 提供了一个很好的选择,应该可以与您的其他工具很好地协同工作。

Google Cloud Functions

概述

  • 已发布 2016
  • 重点: 通用 Serverless 计算。GCP 服务集成。
  • 语言支持: 广泛
  • 成熟度: 成熟
  • 定价: 按调用次数和资源消耗量计费。函数存储另行收费。

通用描述

Google Cloud Functions 是 Google Cloud Platform 上提供的通用无服务器解决方案。Google Cloud Functions 于 2016 年发布,旨在弥合几年前 AWS Lambda 造成的差距。

Google Cloud Functions 遵循竞争云平台提供的一般产品模式,提供高性能、稳定的平台,用于部署功能而无需管理。与其他提供商一样,它也注重与 Google 产品目录中的其他服务集成,以补充已经投资于该生态系统的用户。

重点

Google Cloud Functions 专注于为通用无服务器应用程序提供平台。它没有进行高度专业化,主要旨在为应用程序开发人员提供一个可靠的目标和平台,以便在 Google 云中部署无服务器函数。

功能

除了标准的无服务器功能外,Google Cloud Functions 还提供一些差异化功能

  • 分布式跟踪和调试:设计为与 Google 的 Cloud Trace 和 Cloud Debugger 工具良好配合。
  • 集成 HTTP 端点:Google Cloud Functions 开箱即用地提供完整的 HTTP 端点管理。

语言支持

在撰写本文时,Google Cloud Functions 支持以下原生语言运行时

  • Node.js: 8, 10, 12, 14, 16
  • Python: 3.7, 3.8, 3.9
  • Go: 1.11, 1.13, 1.16
  • Java: 11
  • .Net Core: 3.1
  • Ruby: 2.6, 2.7
  • PHP: 7.4

与其他提供商一样,Google Cloud Functions 也允许您指定自定义运行时以访问更广泛的语言支持。

成熟度

自推出以来,Google Cloud Functions 已经有时间成熟和稳定。一般来说,您可以期望它提供与其他 GCP 服务相当的稳定性水平。Google 的产品似乎在某些方面落后于其他云提供商提供的解决方案,但仍然代表着可靠的实现和部署无服务器代码的可靠场所。

价格

运行 Google Cloud Functions 相关的成本计算方式与其他提供商类似:按资源使用量和执行次数计费。总体而言,最终价格与 Amazon 和 Microsoft 的产品大致相同。

使用 Google Cloud Functions 需要记住的一件事是,函数本身存储在 Google Container Registry 中,客户必须为此付费。因此,除了执行成本外,还需要支付在 Google 生态系统中上传和存储函数的成本。

限制

Google Cloud Functions 对在平台上执行的操作有以下限制和配额

  • 每个区域的函数数量:1000
  • 部署大小:源代码压缩后 100 MB,源代码加模块解压缩后 500 MB
  • HTTP 请求大小:10 MB
  • HTTP 响应大小:10 MB
  • 函数内存:8192 MB
  • 函数超时:540 秒
  • 函数并发:3000
  • 函数调用速率:每秒 1000 次

总结

Google Cloud Functions 是无服务器市场中一位有能力的竞争者,非常适合通用工作负载,特别是如果您已经在使用 GCP 的其他产品。与其他大型云提供商一样,它与其其他服务高度集成,因此配置函数以响应其他产品事件或调用函数中的其他服务非常简单。

与 Microsoft 类似,Google 似乎仍在无服务器领域追随 Amazon 的领导。函数可用的内存配额为 8 GB,远低于我们迄今为止看到的其他主要云提供商,这可能是某些工作负载的一个因素。然而,总的来说,Google Cloud Functions 是用于通用无服务器部署的绝佳平台。

Cloudflare Workers

概述

  • 已发布 2018
  • 重点: 边缘和性能计算。
  • 语言支持: 可编译为 JavaScript 和 WASM 兼容的语言。
  • 成熟度: 较新
  • 定价: 按调用次数和持续时间计费。提供不同的套餐。

通用描述

Cloudflare Workers 是 Cloudflare 提供的无服务器选项,它将函数即服务模型与边缘计算相结合。Cloudflare Workers 于 2018 年发布,鉴于 Cloudflare 更像是一家 Web 工具公司而非通用云提供商,因此决定从不同的角度解决问题。

由于其实现细节和一些自我施加的限制,Cloudflare Workers 能够以更低的成本为开发人员提供高性能。如果您的应用程序符合 Cloudflare Workers 的范例,那么它是为您的客户端提供低延迟响应的绝佳选择。

重点

与通用云提供商提供的无服务器解决方案不同,Cloudflare Workers 是一个更专注于特定领域的产品。Cloudflare Workers 主要关注高性能、低延迟执行,方法是将函数尽可能靠近客户端部署。

它们之所以能够实现高性能,不仅是因为其高度分布式的部署位置,还因为它们执行的环境。Cloudflare Workers 直接使用 Chrome V8 执行函数,而不是通过 Node.js 或不同的运行时。这有助于它提供更快的性能并避免一些常见的无服务器问题,例如冷启动问题,因为代码可以直接执行,而不是通过运行时执行。

功能

由于 Cloudflare Workers 为无服务器领域提供了不同的方法,因此它具有与传统云平台不同的一组功能

  • 更快的执行支持:Cloudflare Workers 直接在 V8 上快速执行,而不是在传统的 JavaScript 运行时环境(如 Node.js)中执行。
  • 更低的延迟:由于无服务器函数在全球 200 多个位置进行全球分布,因此客户端延迟通常明显更低。
  • 天然沙盒化:在 V8 上运行的优势之一是函数彼此自动隔离,而无需在更高的层面上进行隔离。
  • 使用熟悉的 API:Cloudflare Workers 仿照 JavaScript Service Workers 构建,后者用于渐进式 Web 应用程序。它们的 API 尽可能使用相同的模式。

语言支持

由于其 Chrome V8 运行时,Cloudflare Workers 必须使用 Web 友好的语言编写或编译为 Web 友好的语言。支持的语言包括

  • JavaScript
  • TypeScript
  • 可编译为 WebAssembly (WASM) 的语言,例如
    • Rust
    • C
    • Cobol
  • 可编译为 JavaScript 的语言,例如
    • Kotlin
    • Dart
    • Python
    • Scala
    • Reason/OCaml
    • Perl
    • PHP
    • F#

成熟度

Cloudflare Workers 是一项相对较新的产品,其出现时间不足以发展出像主要云提供商相关的生态系统那样庞大的生态系统。然而,它的性能和执行模型已经吸引了许多开发团队。反过来,Cloudflare 也做出了响应,增加了对更多语言的支持,并开发了广泛的文档,以帮助开发人员了解 Cloudflare Workers 采用的概念模型以及如何使用该平台编写和部署函数。

价格

Cloudflare Workers 的收费基于请求数量和每个请求的持续时间。收费金额取决于您的 Worker 是属于“无绑定”套餐还是“捆绑”套餐。

捆绑套餐包括每月一定数量的请求,并限制每个请求的持续时间。另一方面,无绑定套餐不限制执行持续时间,但会根据请求数量和执行时间收费。

Cloudflare Workers 的运行成本往往低于其更传统的同类产品。V8 执行模型允许单台机器托管比其他运行时环境更多的隔离函数。这种增加的密度使 Cloudflare 能够以相同的硬件处理更大的容量,因此他们收取的费用也更低。

限制

Cloudflare Workers 在使用方面有以下限制或配额

  • HTTP 请求大小:取决于您的总体 Cloudflare 套餐(免费版和专业版为 100 MB,商务版为 200 MB,企业版为 500 MB)
  • 函数内存:128 MB
  • 函数持续时间:捆绑套餐为 50 毫秒 CPU 时间,无绑定套餐按时间收费,最长 30 秒
  • 函数调用速率:无限制
  • 部署大小:压缩后 1 MB

您可能已经注意到,就预期执行时间和资源使用量而言,对 Cloudflare Workers 的期望与之前的解决方案大相径庭。这应该提示哪些类型的工作负载最适合 Cloudflare 的环境。

同样重要的是要记住 Cloudflare Workers 独特实现带来的一些限制。一个重要的限制是它们无法建立 TCP 连接,这意味着数据库连接和其他外部连接可能很困难或不可能。Cloudflare 提供了一些其他产品(Workers KV:键值存储,R2:对象存储,以及 Durable Objects:用于维护状态的对象),旨在填补其自身产品目录中的这些空白,但可能不适合您的用例。

V8 运行时固有的另一个限制是 Node.js 标准库不可用,这限制了您可以使用的库函数类型。如果您计划编写依赖 Node.js 标准库的函数,请记住这一点。

总结

Cloudflare Workers 因其低延迟交付和高性能执行环境而成为许多项目的非常有吸引力的解决方案。该平台专为在边缘快速执行小型、专注的函数而设计。

虽然 Cloudflare Workers 可能不是每种类型的无服务器的最佳解决方案,但对于那些主要使用 JavaScript 或 TypeScript 且已经具有渐进式 Web 应用程序基础知识经验的人来说,它们是理想的解决方案。熟悉的开发人员体验、轻松的部署和可扩展的高性能执行环境使其成为许多项目的绝佳选择。

Netlify Functions

概述

  • 已发布 2018
  • 重点: Web 应用程序集成。
  • 语言支持: 狭窄
  • 成熟度: 较新
  • 定价: 按调用次数和持续时间计费。提供不同的层级。

通用描述

Netlify Functions 是由 Web 应用程序构建和部署平台 Netlify 提供的无服务器产品。Functions 产品于 2018 年发布,实际上是构建在 AWS Lambda 之上的增值服务,专注于使无服务器功能更容易集成到 Netlify 生态系统中。

虽然由于这种定位而与其他一些产品不同,但 Netlify Functions 很有趣,因为它将无服务器集成到专注于应用程序交付的连贯生态系统中的方式。

重点

Netlify Functions 的重点完全是帮助开发人员轻松部署 Web 应用程序。它没有将其无服务器产品定位为通用工具,而是将 AWS Lambda 用作简化构建和部署过程的一种手段。

对于与 Netlify 专业领域相匹配的项目,Functions 功能可以帮助加快其工作流程和迭代周期。但是,对于超出该领域的项目,其他解决方案可能是更好的选择。

功能

Netlify Functions 主要专注于将无服务器容量集成到您的 Web 应用程序中。其功能集围绕该用例

  • 将函数与应用程序一起部署:Netlify Functions 可以在它们集成的应用程序旁边进行开发和管理。
  • 预览和回滚功能:您可以在将函数部署到实时环境之前预览和测试函数,并且可以在出现任何问题时回滚。
  • A/B 测试:您可以运行 A/B 测试,让您可以比较前端应用程序代码和无服务器函数中的更改。

语言支持

Netlify 的语言支持非常有限,因为 Netlify 进一步限制了通过 AWS Lambda 提供的选项,使其成为它愿意为其应用程序管理平台支持的子集。

函数可以使用以下语言编写

  • JavaScript
  • TypeScript
  • Go

成熟度

Netlify Functions 是一项相对较新的产品,但受益于构建在 AWS Lambda 之上的成熟度。实际的无服务器执行由 Amazon 处理,这已被证明是稳定可靠的。

然而,粘合功能以及与 Netlify 的其他应用程序构建和部署功能的集成由 Netlify 本身运行。由于 Netlify 基本上充当 AWS Lambda 客户,因此其无服务器产品的可靠性可能应被视为与您认为其产品目录其余部分的可靠性相同。

价格

Netlify Functions 的计费依据是发生的请求调用次数以及执行持续时间。

为了使定价更易于理解,Netlify 使用分层系统来计算成本和限制。这些层级与 Netlify 为其平台提供的套餐相交,这使得可以相对独立地选择您的通用平台级别和无服务器级别。

就其无服务器产品而言,它们提供的层级是

  • Level 0:免费,但功能有限。可与 Starter(免费)或 Pro(每月每用户 19 美元)Netlify 套餐一起使用。
  • Level 1:每个站点每月额外收费 25 美元。可与 Starter(免费)或 Pro(每月每用户 19 美元)Netlify 套餐一起使用。
  • Level 2:包含在 Netlify 通用平台的商务版或企业版套餐中。

限制

与无服务器功能相关的阈值直接与您的 Netlify 套餐级别和 Netlify Functions 层级相关联。以下限制适用

  • 每月请求数:Level 0 为 125,000 次,Level 1 为 200 万次,Level 2 无限制
  • 每月运行时长:Level 0 为 100 小时,Level 1 为 1,000 小时,Level 2 无限制
  • 访问后台(异步)函数:Netlify Pro 或更高版本的帐户可用
  • 函数超时:同步函数为 10 秒,后台(异步)函数为 15 分钟

总结

对于在更大的应用程序管理平台中利用无服务器功能,Netlify Functions 是一个绝佳的选择。虽然它在 Netlify 平台之外不可用或没有用处,但它与构建和部署生命周期管理其余部分的紧密集成使其成为一个有价值的选择。

Netlify Functions 的目标不是成为通用的无服务器解决方案。相反,它消除了在开发工作流程中整合 AWS Lambda 的一些粗糙之处。如果您有兴趣使用无服务器来增强您的 Web 项目,Netlify 是一个绝佳的选择,它可以使该过程直观而直接。

Vercel Functions

概述

  • 已发布 2016
  • 重点: Web 应用程序集成
  • 语言支持: 广泛
  • 成熟度: 较新
  • 定价: 与平台捆绑

通用描述

Vercel Functions 是另一个旨在简化 Web 应用程序开发人员的无服务器体验的产品。与 Netlify Functions 类似,Vercel Functions 是一个整体平台的一部分,该平台专注于使 Web 应用程序的开发和交付体验更好。

Vercel Functions 有两种类型:Serverless Functions(无服务器函数),其执行方式类似于常规的无服务器服务;以及 Edge Functions(边缘函数),它们部署到 Vercel 的边缘网络并由其运行。这种灵活性使您可以根据最适合每个函数的情况在部署类型之间进行选择。

重点

Vercel Functions 完全专注于改善现代 Web 应用程序的开发、部署和交付体验。它的产品与 Vercel 的其余功能紧密集成,从而为这些工作流程创造良好的体验。

这种重点意味着 Vercel Functions 旨在使 Web 应用程序中无服务器的使用更加容易,因此,如果您的项目属于该类别,它可能会非常有用。该平台可帮助您实施此功能,以便添加功能并提高性能。

功能

与 Vercel Functions 相关的功能与 Vercel 产品的其余部分密切相关。这些包括

  • 两种类型的函数:无服务器函数和边缘函数允许您选择最适合您的每个函数的选项。
  • 一流的 Next.js 支持:Vercel 负责 Next.js 的开发,并且有既得利益使其 Next.js 体验出色。
  • 将函数与应用程序一起部署:Vercel Functions 可以在它们集成的应用程序旁边进行开发和管理。
  • 快速执行:Vercel 的边缘函数使用 V8 运行时,以提高执行性能,优于较重的运行时。

语言支持

Vercel Functions 可以执行各种语言。官方支持以下语言

  • Node.js: 12.x, 14.x
  • Go: 1.16,可通过 go.mod 文件配置替代方案
  • Python: 3.6
  • Ruby: 2.7.x, 2.5.x

社区还扩展了此列表,提供了

  • Bash: GNU 版本 4
  • Deno: 任何支持的标签
  • PHP: 8.0.3
  • Rust

成熟度

评估 Vercel Functions 的成熟度稍微有些复杂,因为它分为 Serverless Functions(无服务器函数)和 Edge Functions(边缘函数)。

Vercel 的 Serverless Functions 运行在 AWS Lambda 上,类似于 Netlify 封装该功能的方式。在这些情况下,Lambda 的稳定性是 Vercel 自身可靠性的保障。

Vercel 的 Edge Functions 是一项较新的产品,似乎没有使用 Amazon Lambda 的基础设施。相反,它直接在类似于 Cloudflare Workers 的 V8 运行时上运行。由于 Edge Functions 仍处于 Beta 阶段,因此它们可能被认为不如 Serverless Functions 稳定,并且更可能发生变化。

价格

然而,与目前为止的所有其他提供商不同,Vercel 的无服务器产品完全捆绑在其常规产品中。它没有为其无服务器产品单独定价。

话虽如此,Vercel 的定价计划包括:

  • Hobby:非商业站点免费
  • Pro:每位成员每月 20 美元
  • Enterprise:根据客户定制计划

限制

Vercel 的上限和限制在某种程度上继承自 AWS Lambda 的 Serverless Functions。这些限制包括:

  • Serverless Function 执行时间:Hobby 计划为 100 GB-小时,Pro 计划为 1,000 GB-小时,Enterprise 计划为自定义执行级别
  • Serverless Function 执行超时:Hobby 计划为 5 秒,Pro 计划为 15 秒,Enterprise 计划为 30 秒
  • Serverless Function 调用次数:无限
  • Edge Function 每日调用次数:Hobby 计划为 100,000 次,Pro 计划为 500,000 次,Enterprise 计划为 500 万次
  • Serverless Function 部署大小:压缩后 50 MB,解压缩后 250 MB
  • Serverless Function 内存:Hobby 计划为 1024 MB,Pro 计划为 3008 MB
  • Serverless Function 请求或响应主体:5 MB

总结

对于使用 Vercel 平台的 Web 应用程序开发人员来说,Vercel Functions 是一个不错的解决方案。无服务器功能与平台紧密集成,并与 Next.js 框架协同开发,以确保兼容性。

对于需要为其 Next.js 应用程序使用无服务器的用户来说,Vercel 是一个显而易见的选择。对于其他 Web 应用程序开发人员来说,Vercel Functions 和 Vercel 平台的其余部分可能能够帮助您管理无服务器需求和应用程序生命周期管理。

与无服务器计算相关的:无服务器数据库

虽然我们已尝试涵盖无服务器计算领域中一些最常见和最有趣的提供商,但还有其他相关的服务也值得一提。在本节中,我们将简要介绍一些无服务器数据库产品,这些产品可以补充您的无服务器计算需求。

您可以在我们的“什么是无服务器?”文章中阅读有关无服务器数据库工作原理的更多信息。

Amazon DynamoDB 和 Aurora Serverless

Amazon 根据您的需求提供一些无服务器数据库服务。

Amazon 的 DynamoDB 是一种 NoSQL 无服务器数据库解决方案,可以根据接收到的请求级别进行横向和纵向扩展。它充当键值存储,能够非常快速地响应和扩展。

对于面向 SQL 的工作负载,Amazon 提供了 Aurora Serverless,这是一种无服务器关系数据库解决方案,可根据需求扩展数据处理单元。

Microsoft Cosmos DB Serverless 和 Azure SQL Serverless

Microsoft 同样为无服务器数据库提供了一些选项。

Microsoft Cosmos DB Serverless 是其 NoSQL Cosmos 数据库的无服务器层。它提供与多种不同 NoSQL 技术兼容的多模型操作。

对于关系数据,Microsoft 还提供了 Azure SQL Serverless。这是其托管 SQL 数据库服务的无服务器层,可自动扩展以匹配传入的请求。

Google Firestore

Google 的无服务器数据库产品是 Firestore。Firestore 是一种 NoSQL 文档数据库,旨在自动匹配处理其接收的查询所需的能力。它专注于成为文档存储的“一劳永逸”选项,让您可以在开发和生产期间轻松连接应用程序。

PlanetScale

PlanetScale 是一个与 MySQL 兼容的无服务器数据库平台,构建于 Vitess 之上,Vitess 是一个为在 Kubernetes 环境中扩展而构建的关系数据库实现。PlanetScale 能够提供版本化数据分支、非阻塞模式更改以及其他高级功能,并提供易于部署的工具。

MongoDB Atlas Serverless

MongoDB Atlas 是 MongoDB 的托管多云版本。他们现在提供 MongoDB Atlas Serverless,作为根据无服务器模型与 MongoDB 数据库交互的一种方式。其托管数据库的无服务器版本提供无缝扩展体验,以适应高度可变和不频繁的工作负载,同时仅对使用的资源收费。

CockroachDB Serverless

CockroachDB Serverless 是 CockroachDB 新近宣布的产品,旨在通过无服务器功能增强其灵活的 SQL 数据库。该数据库将根据用户需求自动横向和纵向扩展。

Fauna

Fauna 提供无服务器事务数据库实例,旨在与各种基于云环境中的现代应用程序配合使用。Fauna 提供基于 API 的数据操作,其作用更像是一种实用程序,而不是您需要管理的 инфраструктура 组件。这种模型与您已用于构建应用程序的无服务器范例完美契合。

Neon

Neon 是完全托管的无服务器 PostgreSQL。Neon 分离了存储和计算,以提供现代开发人员功能,例如无服务器、分支、无限存储等等。

值得关注的新选项

最后,我们将介绍一些您可能需要在未来关注的工具和服务。这些工具和服务才刚刚起步,但有潜力帮助完成许多无服务器项目。

Deno Deploy

Deno Deploy 是 Deno 推出的一项新的无服务器计算产品。与 Cloudflare Workers 类似,Deno Deploy 允许您将代码部署到运行 Chrome V8 的边缘服务器。由于这种运行时选择,它具有与 Cloudflare Workers 相同的许多优点和限制(高密度和高性能,不支持打开 TCP 连接或使用完整的 Node.js 库)。

Deno Deploy 希望通过使用与 Deno CLI 相同的技术为您提供统一的开发体验。Deno Deploy 目前处于 Beta 阶段,因此值得关注其当前的进展并经常回来查看。

Prisma Accelerate

Prisma Accelerate 是一种旨在简化无服务器环境中数据库连接的工具。由于无服务器提供商用于执行函数的实例本质上是短暂的,因此如果同时激活的函数实例过多,很容易耗尽任何后端数据库的连接池。

Prisma Accelerate 通过充当数据库的中介来为这个问题提供解决方案。无服务器实例可以连接到 Prisma Accelerate,后者自动管理连接池,以避免因资源争用而导致无服务器调用失败或延迟。

总结

为了总结我们涵盖的无服务器产品,我们将一些细节提炼到下表中,以便更轻松地一目了然地进行比较。我们只包含无服务器计算选项,以避免混淆

产品焦点语言支持推荐用法附加评论
AWS Lambda通用函数Node.js、Python、Ruby、Java、Go、.Net、自定义运行时在技术堆栈的任何位置都需要无服务器的情况,尤其是在已经使用 AWS 的情况下。AWS Lambda 是目前最成熟的产品。它定期推出新功能,并具有像 Lambda@Edge 这样的变体,专注于填补额外的利基市场。
Microsoft Azure Functions通用函数.Net、Node.js、Java、PowerShell、Python、自定义运行时在技术堆栈的任何位置都需要无服务器的情况,尤其是在已经使用 Azure 的情况下。如果您的技术以 Microsoft 为中心,则 Microsoft Azure Functions 是有意义的,但它的功能往往落后于 AWS Lambda。
Google Cloud Functions通用函数Node.js、Python、Go、Java、.Net、Ruby、PHP、自定义运行时在技术堆栈的任何位置都需要无服务器的情况,尤其是在已经使用 GCP 的情况下。如果已经在使用 GCP,则 Google Cloud Functions 是一个不错的选择,但与某些其他通用提供商相比,它的限制更多。
Cloudflare Workers基于性能的边缘函数JavaScript、TypeScript、WASM 可编译语言(Rust、C、COBOL)、可编译为 JavaScript 的语言(Kotlin、Dart、Python、Scala、OCaml、Perl、PHP、F#)高性能边缘计算,尤其是在使用 JavaScript 或 TypeScript 的情况下。Cloudflare Workers 通过专注于边缘交付和使用 V8 isolates,与其他通用提供商提供了主要区别。如果您的无服务器工作流程适合此执行模型,则 Cloudflare Workers 可能能够以更低的成本提供更好的性能。
Netlify FunctionsWeb 应用程序函数JavaScript、TypeScript、GoWeb 应用程序、JAM stack 站点、无头 CMS。Netlify 通过将无服务器功能集成到完整的应用程序构建和部署管理中,为 AWS Lambda 增加了价值。如果您的无服务器需求与该用例匹配,则 Netlify 是在一个地方管理所有内容的理想选择。
Vercel FunctionsWeb 应用程序函数Node.js、Go、Python、Ruby、Bash、Deno、PHP、RustWeb 应用程序、JAM stack 站点、无头 CMS。如果您需要无服务器来增强您的 Web 应用程序部署故事,Vercel 是一个绝佳的选择。如果您的应用程序是使用 Next.js 构建的,则更是如此,因为可以保证集成效果出色。
关于作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,Justin 一直在撰写有关数据库、Linux、基础设施和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。