分享

简介

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 服务以运行任意可执行文件来处理事件,而不是使用特定于语言的功能。
  • 自定义运行时:用户可以实现自己的语言运行时,超出亚马逊原生提供的那些运行时。
  • 预置并发:能够保持事件处理程序处于启动和待机状态,以帮助减轻在事件发生时分配资源的冷启动问题。
  • 轻松访问持久性:用户可以使用 Amazon 的 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 抢先一步,但微软能够利用他们的例子作为起点来开发自己的定价策略、定位和功能。

由于 Azure Functions 旨在在其服务目录中填补与 AWS Lambda 相同的空白,因此在许多方面,它都是类似的产品。即便如此,也有一些重要的区别将微软的产品区分开来。

重点

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

功能

Azure Functions 提供了你对无服务器平台的所有标准功能。此外,它提供的一些有趣功能包括

  • 各种部署选项:Azure 为无服务器函数提供各种计划,根据你的需要捆绑功能。
  • 可扩展绑定:你可以向平台添加扩展以支持不同的工作流程和集成。
  • 集成 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 产品在其初始产品基础上进行了迭代,现在已经成为一个相当稳定的产品,在大多数用例中都具有良好的性能。即便如此,微软的产品往往感觉仍然在追赶亚马逊的产品,这对某些人来说可能很重要。

价格

在成本方面,微软的 Azure Functions 与亚马逊 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 是通用无服务器应用程序的绝佳选择。微软拥有一个完整的服务和工具生态系统,您可以将这些服务和工具与 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 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 已经成熟并稳定。一般而言,您可以预期 Google Cloud Functions 提供的稳定性水平与其他 GCP 服务相当。Google 的产品似乎落后于其他云提供商提供的解决方案,但仍然代表着稳固的实施和可靠的无服务器代码部署位置。

价格

运行 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 计划(免费版和专业版为 100 MB,企业版为 200 MB,企业版为 500 MB)
  • 函数内存:128 MB
  • 函数持续时间:捆绑计划的 CPU 时间为 50 毫秒,无绑定计划按时间收费,最长为 30 秒
  • 函数调用率:没有限制
  • 部署大小:1 MB 压缩

您可能已经注意到,在预期执行时间和资源使用方面,对 Cloudflare Workers 的预期与之前解决方案大不相同。这应该暗示什么类型的工作负载最适合 Cloudflare 的环境。

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

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 为其平台提供的计划相交,这使得您可以独立选择您的通用平台级别和无服务器级别。

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

  • 级别 0:免费,但功能有限。可用于入门版(免费)或专业版(每月每用户 19 美元)的 Netlify 计划。
  • 级别 1:每月每站点额外 25 美元。可用于入门版(免费)或专业版(每月每用户 19 美元)的 Netlify 计划。
  • 级别 2:包含在 Netlify 通用平台的商业版或企业版计划中。

限制

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

  • 每月请求:级别 0 为 125,000 次,级别 1 为 200 万次,级别 2 为无限次
  • 每月运行时间:级别 0 为 100 小时,级别 1 为 1,000 小时,级别 2 为无限小时
  • 访问后台(异步)函数:使用 Netlify 专业版或更高版本的帐户可用
  • 函数超时:同步函数为 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 有两种类型:无服务器函数,它们像普通无服务器服务一样执行;边缘函数,它们部署到 Vercel 的边缘网络并由其运行。这种灵活性使您可以根据最适合每个函数的类型在部署类型之间进行选择。

重点

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

这种专注意味着 Vercel 函数旨在使在 Web 应用程序中使用无服务器更轻松,因此,如果您的项目属于此类别,它将非常有用。该平台可帮助您实现此功能,以添加功能并提高性能。

功能

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

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

语言支持

Vercel 函数可以执行多种语言。正式地,他们支持以下语言

  • 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 函数的成熟度有点复杂,因为它分为无服务器函数和边缘函数。

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

Vercel 的边缘函数是一种较新的产品,似乎没有使用 Amazon Lambda 的基础设施。相反,它直接在 V8 运行时上运行,类似于 Cloudflare Workers。由于边缘函数仍处于测试阶段,因此应将其视为比无服务器函数稳定性差,并且更可能发生更改。

价格

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

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

  • 爱好:免费用于非商业网站
  • 专业版:每月每位成员 20 美元
  • 企业版:根据客户定制计划

限制

Vercel 的上限和限制在一定程度上继承自 AWS Lambda,用于其无服务器函数。限制包括

  • 无服务器函数执行:爱好版 100 GB 小时,专业版 1,000 GB 小时,企业版自定义执行级别
  • 无服务器函数执行超时:爱好版 5 秒,专业版 15 秒,企业版 30 秒
  • 无服务器函数调用:无限次
  • 每天的边缘函数调用:爱好版 100,000 次,专业版 500,000 次,企业版 500 万次
  • 无服务器函数部署大小:压缩后 50 MB,解压缩后 250 MB
  • 无服务器函数内存:爱好版 1024 MB,专业版 3008 MB
  • 无服务器函数请求或响应主体:5 MB

总结

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

对于需要为 Next.js 应用程序使用无服务器功能的用户来说,Vercel 是显而易见的选择。对于其他 Web 应用程序开发人员,Vercel 函数和 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 无服务器

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

CockroachDB 无服务器

CockroachDB 无服务器 是 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 目前处于测试阶段,因此值得一看它的当前进展,并经常查看它的最新消息。

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 的情况下。Google Cloud Functions 对于那些已经生活在 GCP 中的人来说是一个不错的选择,但它比其他一些通用提供商的限制更多。
Cloudflare Workers基于性能的边缘函数JavaScript、TypeScript、WASM 可编译语言(Rust、C、COBOL)、可编译为 JavaScript 的语言(Kotlin、Dart、Python、Scala、OCaml、Perl、PHP、F#)高性能边缘计算,尤其是在使用 JavaScript 或 TypeScript 的情况下。CloudFlare Workers 通过专注于边缘交付并使用 V8 隔离,与其他通用提供商有重大区别。如果您的无服务器工作流程适合这种执行模型,那么 CloudFlare Workers 可能会以更低的成本提供更好的性能。
Netlify FunctionsWeb 应用程序函数JavaScript、TypeScript、GoWeb 应用程序、JAM 堆栈网站、无头 CMS。Netlify 通过将无服务器功能集成到完整的应用程序构建和部署管理中,为 AWS Lambda 增添了价值。如果您的无服务器需求与该用例相匹配,那么 Netlify 是在一个地方管理所有事物的不错选择。
Vercel FunctionsWeb 应用程序函数Node.js、Go、Python、Ruby、Bash、Deno、PHP、RustWeb 应用程序、JAM 堆栈网站、无头 CMS。如果您需要无服务器来增强您的 Web 应用程序部署故事,Vercel 是一个不错的选择。如果您使用的是 Next.js,这一点尤其如此,因为集成可以保证是优秀的。
关于作者
Justin Ellingwood

Justin Ellingwood

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