分享到

导论

Article header

无服务器计算是云计算领域中相对较新的发展。无服务器提供商允许开发者专注于应用程序所需的功能,而无需担心执行环境或任何其他底层。

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

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

提供商概述和评估标准

虽然 *确实* 存在其他选项,但在本文中,我们将了解一些最常见的商业无服务器提供商。我们将评估以下选项

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

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

请注意,我们在此处避免讨论基于容器的解决方案。容器服务非常普及,并且在许多情况下,与无服务器计算提供的一些价值有所重叠。然而,基于容器的生态系统比短期的、以需求为导向的无服务器用例要广泛得多,因此我们将继续专注于符合这种更窄设计范围的解决方案,以限制我们的范围。

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

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

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

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

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

  • Deno Deploy
  • Prisma Accelerate

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

AWS Lambda

概述

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

一般描述

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

由于其稳定性、功能范围和普遍的熟悉度,AWS Lambda 仍然是其他产品与之比较的主要服务。

重点

AWS Lambda 是一个通用的无服务器平台。它不侧重于解决特定问题,而是提供一个平台来用于您可能拥有的任何事件驱动的工作流程。

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

功能

AWS Lambda 提供的功能超出了每个无服务器提供商都可以提供的基本功能。随着时间的推移,该服务变得更加灵活和强大,使其保持竞争力和新鲜感。

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

  • 任意可执行文件:您可以配置 Lambda 服务以运行任意可执行文件来处理事件,而不是使用特定于语言的函数。
  • 自定义运行时:用户可以实现他们自己的语言运行时,超出亚马逊本地提供的运行时。
  • 预配置并发:保持事件处理程序启动并处于待机状态的能力,以帮助缓解在事件发生时分配资源时出现的冷启动问题。
  • 轻松访问持久性:用户可以使用亚马逊的 RDS 代理从其函数安全地连接到数据库实例,并使用 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 可能是当今最成熟的无服务器平台。它已被证明是可靠的,并且能够处理各种规模的工作负载。

价格

AWS Lambda 根据以毫秒级跟踪的资源使用量收费。不幸的是,运行 AWS Lambda 的总成本通常很难提前计算,因为有太多不同的因素会影响总体价格。

总价基于许多因素

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

限制

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

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

总结

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

它与其他 AWS 服务的集成使其成为已经身处亚马逊生态系统中的用户的明显选择。不幸的是,它也继承了 AWS 服务经常被批评的成本预测难题。

然而,总的来说,AWS Lambda 是无服务器函数的强大通用选择。它可能会继续增加功能和集成以保持竞争力。

Microsoft Azure Functions

概述

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

一般描述

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

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

重点

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

功能

Azure Functions 提供您期望从无服务器平台获得的所有标准功能。此外,它提供的一些有趣的功能包括

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

语言支持

Azure Functions 本地支持以下语言运行时

  • C#: .Net Framework 4.8, .Net Core 2.1 and 3.1, .Net 5.0 and 6.0
  • JavaScript: Node.js 6, 8, 10, 12, 14
  • F#: .Net Framework 4.8, .Net Core 2.1 and 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: (transpiled to JavaScript)

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

成熟度

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

价格

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

Azure Functions 的一些不同之处包括

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

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

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

限制

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

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

总结

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

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

Google Cloud Functions

概述

  • 发布 2016
  • 重点:通用无服务器计算。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 Cloud Functions 相关的成本计算方式与其他提供商类似:都按资源使用量和执行次数计算。总体而言,这最终的价格大致与亚马逊和微软的产品相当。

使用 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 的其他产品。与其他大型云提供商一样,它与其其他服务高度集成,因此配置函数以响应其他产品事件或在函数中调用其他服务非常简单。

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

Cloudflare Workers

概述

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

通用描述

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

由于 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 的收费基于请求数量和每个请求的持续时间。收费金额取决于您的 Workers 是“无绑定”计划还是“捆绑”计划的一部分。

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

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

局限性

Cloudflare Workers 对其使用有以下限制或配额

  • HTTP 请求大小:取决于您的总体 Cloudflare 计划(免费版和 Pro 版为 100 MB,Business 版为 200 MB,Enterprise 版为 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 是 Netlify 提供的无服务器产品,Netlify 是一个 Web 应用程序构建和部署平台。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 之上的成熟度。实际的无服务器执行由亚马逊处理,亚马逊已被证明是稳定可靠的。

然而,粘合功能以及与 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 的成熟度有点复杂,因为它在无服务器函数和边缘函数之间存在拆分。

Vercel 的无服务器函数在 AWS Lambda 上运行,类似于 Netlify 封装该功能的方式。对于这些情况,Lambda 的稳定性是 Vercel 自身可靠性的资产。

Vercel 的边缘函数是一项较新的产品,似乎没有使用 Amazon Lambda 的基础设施。相反,它直接在 V8 运行时上运行,类似于 Cloudflare Workers。由于边缘函数仍处于 Beta 版,因此与无服务器函数相比,它们可能应被认为不太稳定且更可能发生变化。

价格

然而,与迄今为止的所有其他提供商不同,Vercel 的 Serverless 产品完全捆绑在其常规产品中。它的 Serverless 产品没有单独的价格。

话虽如此,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 是一个不错的解决方案。Serverless 功能与平台紧密集成,并与 Next.js 框架同步开发,以确保兼容性。

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

Serverless 计算邻近技术:Serverless 数据库

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

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

Amazon DynamoDB 和 Aurora Serverless

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

Amazon 的 DynamoDB 是一种 NoSQL Serverless 数据库解决方案,可以根据接收到的请求级别按需扩展和缩减。它充当键值存储,能够快速响应和扩展。

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

Microsoft Cosmos DB Serverless 和 Azure SQL Serverless

Microsoft 同样为 Serverless 数据库提供了一些选择。

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

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

Google Firestore

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

PlanetScale

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

MongoDB Atlas Serverless

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

CockroachDB Serverless

CockroachDB Serverless 是 CockroachDB 新近宣布的产品,旨在利用 Serverless 功能增强其灵活的 SQL 数据库。该数据库将根据用户需求自动扩展和缩减。

Fauna

Fauna 提供 Serverless 事务数据库实例,旨在与各种基于云环境中的现代应用程序配合使用。Fauna 提供基于 API 的数据操作,更像是您需要管理的实用程序,而不是基础设施的一部分。这种模型非常符合您已用于构建应用程序的 Serverless 范例。

Neon

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

值得关注的新选项

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

Deno Deploy

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

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

Prisma Accelerate

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

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

总结

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

产品焦点语言支持推荐用途附加评论
AWS Lambda通用函数Node.js、Python、Ruby、Java、Go、.Net、自定义运行时在技术堆栈的任何地方都需要 Serverless 的情况,尤其是在已经使用 AWS 的情况下。AWS Lambda 是目前最成熟的产品。它定期推出新功能,并具有像 Lambda@Edge 这样的变体,专注于填补额外的细分市场。
Microsoft Azure Functions通用函数.Net、Node.js、Java、PowerShell、Python、自定义运行时在技术堆栈的任何地方都需要 Serverless 的情况,尤其是在已经使用 Azure 的情况下。如果您的技术以 Microsoft 为中心,则 Microsoft Azure Functions 是有意义的,但它在功能方面往往落后于 AWS Lambda。
Google Cloud Functions通用函数Node.js、Python、Go、Java、.Net、Ruby、PHP、自定义运行时在技术堆栈的任何地方都需要 Serverless 的情况,尤其是在已经使用 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,与其他通用提供商相比,提供了主要区别。如果您的 Serverless 工作流程适合此执行模型,则 Cloudflare Workers 可能会以更低的成本提供更好的性能。
Netlify FunctionsWeb 应用程序函数JavaScript、TypeScript、GoWeb 应用程序、JAM stack 站点、无头 CMS。Netlify 通过将 Serverless 功能集成到完整的应用程序构建和部署管理中,为 AWS Lambda 增加了价值。如果您的 Serverless 需求与该用例匹配,则 Netlify 是在一个地方管理所有内容的理想选择。
Vercel FunctionsWeb 应用程序函数Node.js、Go、Python、Ruby、Bash、Deno、PHP、RustWeb 应用程序、JAM stack 站点、无头 CMS。如果您需要 Serverless 来增强您的 Web 应用程序部署故事,Vercel 是一个绝佳的选择。如果您的应用程序是使用 Next.js 构建的,则更是如此,因为集成保证非常出色。
关于作者
Justin Ellingwood

Justin Ellingwood

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