分享到

引言

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。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 的範例,那麼它是為客戶端提供低延遲響應的絕佳選擇。

重點

與通用雲提供商提供的無伺服器解決方案不同,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 之所以有趣,是因為它將無伺服器功能整合到專注於應用程式交付的連貫生態系統中的方式。

重點

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能夠提供版本化資料分支、非阻塞式模式更改以及其他高階功能,並提供易於部署的工具。

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 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、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不需要以第三人稱寫作,這對所有相關方都是一種解脫。
© . This site is unofficial and not affiliated with Prisma Data, Inc.