引言
无服务器计算是云计算领域一个相对较新的发展。无服务器提供商让开发者能够专注于其应用程序所需的功能,而无需担心执行环境或任何其他底层。
在本文中,我们将介绍一些最受欢迎的无服务器提供商,并分析它们在不同类别中的比较。了解您的选项后,您将能更好地评估选择,并挑选最符合您需求的服务。
我们将讨论每项服务的共同点、不同之处,以及可能促使您选择某一项而非另一项的标准。虽然没有一个无服务器提供商适用于所有用户,但本次分析旨在强调一些标准,以便您更容易根据自身优先级评估候选服务。
请查看 Prisma 数据平台以在一个地方管理所有应用程序数据。
提供商概述和评估标准
虽然确实存在其他选项,但本文将介绍一些最常见的商业无服务器提供商。我们将评估以下选项
- 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。Amazon 的 Lambda 服务于 2014 年推出,是首批引起市场广泛关注的提供商之一,这很大程度上归因于其其他服务产品带来的现有客户群。
AWS Lambda 因其稳定性、功能范围和普遍的熟悉度,仍然是其他产品的主要比较对象。
重点
AWS Lambda 是一个通用无服务器平台。它不侧重于解决特定问题,而是提供一个平台,供您用于任何事件驱动的工作流。
由于亚马逊广泛的服务目录,Lambda 非常强调与其他 AWS 服务的兼容性和集成。
功能
AWS Lambda 提供的功能超越了所有无服务器提供商所能提供的基本功能。随着时间的推移,该服务变得更加灵活和强大,使其保持竞争力和创新。
以下是它的一些特色功能:
- 任意可执行文件:您可以配置 Lambda 服务来运行任意可执行文件以处理事件,而不是使用特定语言的函数。
- 自定义运行时:用户可以在亚马逊原生提供的运行时之外,实现自己的语言运行时。
- 预置并发:能够保持事件处理器启动并处于待机状态,以帮助缓解在事件发生时分配资源的冷启动问题。
- 轻松访问持久性:用户可以使用亚马逊的 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 可能是当今最成熟的无服务器平台。它已被证明可靠,并能够处理各种规模的工作负载。
价格
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 产品在其初始产品的基础上进行了迭代,现在已成为一个相当稳定的产品,在大多数用例中表现良好。即便如此,微软的产品通常仍感觉像是在追赶亚马逊的产品,这对于某些用户来说可能很重要。
价格
在成本方面,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 是通用无服务器应用程序的绝佳选择。微软拥有一个完整的服务和工具生态系统,您可以将它们与 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 更像一家网络工具公司而非通用云提供商,它决定从不同角度解决问题。
由于其实现细节和一些自我施加的限制,Cloudflare Workers 能够以更低的成本为开发者提供高性能。如果您的应用程序符合 Cloudflare Workers 的范例,那么它是为客户端提供低延迟响应的绝佳选择。
您可以在Prisma 文档中了解如何部署一个使用 Prisma 将每个请求保存到 MongoDB 数据库以供后续检查的 Cloudflare Worker。
重点
与通用云提供商提供的无服务器解决方案不同,Cloudflare Workers 是一种更专注于特定领域的产品。Cloudflare Workers 主要关注通过将函数部署到离客户端尽可能近的位置来实现高性能、低延迟执行。
它们不仅通过高度分布式的部署位置,而且还通过其执行环境来实现高性能。Cloudflare Workers 直接使用 Chrome V8 执行函数,而不是通过 Node.js 或在不同的运行时上执行。这有助于它提供更快的性能并避免无服务器的一些常见问题,例如冷启动问题,因为代码可以直接执行,而无需通过运行时。
功能
由于 Cloudflare Workers 提供了与众不同的无服务器方法,因此它与传统云平台的功能集不同:
- 更快的执行支持:Cloudflare Workers 直接在 V8 上快速执行,而不是在 Node.js 等传统 JavaScript 运行时环境中执行。
- 更低的延迟:由于无服务器函数在全球 200 多个地点进行全球分布,客户端延迟通常显著降低。
- 天然沙盒化:在 V8 上运行的优势之一是函数彼此自动隔离,而无需在更高层进行隔离。
- 使用熟悉的 API:Cloudflare Workers 以渐进式 Web 应用程序中使用的 JavaScript Service Workers 为模型。它们的 API 尽可能使用相同的模式。
语言支持
由于其 Chrome V8 运行时,Cloudflare Workers 必须使用或可编译为 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
- 函数持续时间:捆绑计划的 CPU 时间为 50 毫秒,非绑定计划按时间收费,最长 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(一个 Web 应用程序构建和部署平台)提供的无服务器产品。Functions 产品于 2018 年发布,实际上是基于 AWS Lambda 构建的增值服务,旨在简化将无服务器功能集成到 Netlify 生态系统中的过程。
虽然由于这种定位而与某些其他产品不同,但 Netlify Functions 之所以有趣,是因为它将无服务器功能集成到专注于应用程序交付的连贯生态系统中的方式。
您可以轻松地将使用 Prisma 构建的 Node.JS 应用程序部署到 Netlify。此部署指南更详细地介绍了该过程。
重点
Netlify Functions 专注于帮助开发者轻松部署 Web 应用程序。它没有将自己的无服务器产品定位为通用工具,而是将 AWS Lambda 作为一种手段,以简化构建和部署过程。
对于符合 Netlify 专业领域经验的项目,Functions 功能可以帮助加速其工作流和迭代周期。然而,对于不属于该领域范围的项目,其他解决方案可能更合适。
功能
Netlify Functions 主要专注于将无服务器能力集成到您的 Web 应用程序中。其功能集围绕该用例展开:
- 随应用程序部署函数:Netlify Functions 可以与其集成的应用程序一起开发和管理。
- 预览和回滚功能:您可以在将函数部署到实时环境之前进行预览和测试,并在出现任何问题时进行回滚。
- A/B 测试:您可以运行 A/B 测试,比较前端应用程序代码和无服务器函数中的更改。
语言支持
Netlify 的语言支持相当有限,因为它进一步将通过 AWS Lambda 可用的选项限制为其应用程序管理平台愿意支持的子集。
函数可以用以下语言编写:
- JavaScript
- TypeScript
- Go
成熟度
Netlify Functions 是一项相对较新的产品,但受益于基于 AWS Lambda 构建所带来的成熟度。实际的无服务器执行由亚马逊处理,这已被证明是稳定可靠的。
然而,粘合功能以及与 Netlify 其他应用程序构建和部署功能的集成由 Netlify 本身运行。由于 Netlify 本质上是 AWS Lambda 的客户,其无服务器产品的可靠性应与您认为其产品目录中其他产品的可靠性相同。
价格
Netlify Functions 根据发生的请求调用次数和执行持续时间计费。
为了使定价更易于理解,Netlify 使用分层系统来计算成本和限制。这些层级与 Netlify 为其平台提供的计划相交,使得您可以在一定程度上独立选择您的通用平台级别和无服务器级别。
就其无服务器产品而言,他们提供的层级是:
- 级别 0:免费,但功能有限。可与 Starter(免费)或 Pro(每月每位用户 19 美元)Netlify 计划一起使用。
- 级别 1:每月每站额外 25 美元。可与 Starter(免费)或 Pro(每月每位用户 19 美元)Netlify 计划一起使用。
- 级别 2:包含在 Netlify 通用平台的商业或企业计划中。
限制
与无服务器功能相关的阈值直接与您的 Netlify 计划级别和 Netlify Functions 层级挂钩。以下限制适用:
- 每月请求:级别 0 为 125,000 次,级别 1 为 200 万次,级别 2 无限制
- 每月运行时长:级别 0 为 100 小时,级别 1 为 1,000 小时,级别 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产品的其他部分密切相关。这些包括:
- 两种函数类型:无服务器(Serverless)函数和边缘(Edge)函数,让您可以为每个函数选择最适合的选项。
- 一流的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 version 4
- Deno: 任何支持的标签
- PHP: 8.0.3
- Rust
成熟度
评估Vercel Functions的成熟度略显复杂,因为它分为无服务器函数和边缘函数。
Vercel的无服务器函数运行在AWS Lambda上,类似于Netlify对该功能的封装方式。在这些情况下,Lambda的稳定性是Vercel自身可靠性的一个优势。
Vercel的边缘函数是一项较新的产品,似乎不使用Amazon Lambda的基础设施。相反,它直接运行在V8运行时上,类似于Cloudflare Workers。由于边缘函数仍处于测试阶段,它们可能被认为不如无服务器函数稳定,且更容易发生变化。
价格
然而,与迄今为止所有其他提供商不同的是,Vercel的无服务器产品完全捆绑在其常规产品中。它没有单独的无服务器产品定价。
尽管如此,Vercel的定价方案包括:
- Hobby(爱好版):非商业网站免费
- Pro(专业版):每位成员每月20美元
- Enterprise(企业版):根据客户定制方案
限制
Vercel对其无服务器函数的上限和限制在某种程度上继承自AWS Lambda。这些限制包括:
- 无服务器函数执行时间:Hobby版100 GB-小时,Pro版1,000 GB-小时,企业版自定义执行级别
- 无服务器函数执行超时:Hobby版5秒,Pro版15秒,企业版30秒
- 无服务器函数调用次数:无限制
- 边缘函数每日调用次数:Hobby版100,000次,Pro版500,000次,企业版500万次
- 无服务器函数部署大小:压缩后50 MB,解压后250 MB
- 无服务器函数内存:Hobby版1024 MB,Pro版3008 MB
- 无服务器函数请求或响应体大小:5 MB
总结
Vercel Functions是Vercel平台用户的优秀Web应用程序解决方案。无服务器功能与平台紧密集成,并与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
微软也提供了几种无服务器数据库选项。
微软的Cosmos DB Serverless是其NoSQL Cosmos数据库的无服务器层。它提供与几种不同NoSQL技术兼容的多模型操作。
对于关系型数据,微软还提供了Azure SQL Serverless。这是其托管SQL数据库服务的无服务器层,可根据传入请求自动扩展。
Google Firestore
Google的无服务器数据库产品是Firestore。Firestore是一个NoSQL文档数据库,旨在自动匹配其接收查询所需的处理能力。它专注于成为文档存储的“即设即忘”选项,让您在开发和生产过程中轻松连接应用程序。
PlanetScale
PlanetScale是一个兼容MySQL的无服务器数据库平台,基于Vitess构建,Vitess是一个为Kubernetes环境中的扩展而设计的关系型数据库实现。PlanetScale能够提供版本化数据分支、非阻塞式模式更改以及其他高级功能,并提供易于部署的工具。
了解更多关于Prisma和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目前处于测试阶段,因此值得关注其当前进展并经常回来查看。
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 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隔离。如果您的无服务器工作流适合此执行模型,Cloudflare Workers可能以更低的成本提供更好的性能。 |
Netlify Functions | Web应用程序函数 | JavaScript, TypeScript, Go | Web应用程序,JAM堆栈网站,无头CMS。 | Netlify通过将无服务器功能集成到完整的应用程序构建和部署管理中,为AWS Lambda增添了价值。如果您的无服务器需求符合该用例,Netlify是集中管理一切的不错选择。 |
Vercel Functions | Web应用程序函数 | Node.js, Go, Python, Ruby, Bash, Deno, PHP, Rust | Web应用程序,JAM堆栈网站,无头CMS。 | 如果您需要无服务器来增强您的Web应用程序部署体验,Vercel是一个绝佳选择。如果您的应用程序使用Next.js构建,这一点尤其正确,因为其集成度有保证非常出色。 |
请查看 Prisma 数据平台以在一个地方管理所有应用程序数据。