分享於

簡介

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 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 搶先一步,但 Microsoft 能夠以其範例作為開發自己的定價策略、定位和功能的起點。

由於 Azure Functions 的目標是在其服務目錄中填補與 AWS Lambda 相同的利基市場,因此在許多方面,它都是類似的產品。即便如此,仍有一些重要的區別可以區分 Microsoft 的產品。

重點

Microsoft Azure Functions 是一個通用無伺服器平台,旨在執行事件驅動的應用程式。雖然它被開發為一個靈活、通用的工具,但 Azure Functions 在設計時也考慮到了 Azure 生態系統的其餘部分。

功能

Azure Functions 提供您對無伺服器平台所期望的所有標準功能。此外,它提供的一些有趣功能包括

  • 各種部署選項:Azure 為無伺服器函式提供各種方案,根據您的需求捆綁功能。
  • 可擴展的繫結:您可以將擴展新增至平台,以支援不同的工作流程和整合。
  • 整合式 HTTP 端點:Azure Functions 開箱即用,隨附完整的 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 提供分層定價模型,為不同類型的使用量提供方案

  • 耗用方案:經典的無伺服器產品,具有事件驅動、自動縮放執行和隨用隨付模型
  • 進階方案:新增額外的保留容量和資源配置,價格更高,以避免冷啟動。
  • 專用方案:函式主機不會關閉,因此不可能發生冷啟動。

限制

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 的產品似乎稍有落後,但仍然是一個穩固的實作,以及部署無伺服器程式碼的可靠平台。

價格

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 更像是一家網路工具公司,而非一般雲端供應商,因此決定從不同的角度切入這個問題。

由於 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 盡可能使用相同的模式。

語言支援

由於 Cloudflare Workers 使用 Chrome V8 執行環境,因此必須使用 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 方案(Free 和 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 之上的成熟度。實際的無伺服器執行由 Amazon 處理,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 通用平台的 Business 或 Enterprise 方案中。

限制

與無伺服器功能相關的門檻值直接與您的 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 專注於改善現代網路應用程式的開發、部署和交付體驗。其產品與 Vercel 的其他功能緊密整合,為這些工作流程創造良好的體驗。

這種專注意味著 Vercel Functions 的設計旨在讓在網路應用程式中更輕鬆地使用無伺服器運算,因此如果您的專案屬於此類別,它將非常有用。該平台可協助您實作此功能,以新增功能並提高效能。

功能特色

與 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 的無伺服器產品完全捆綁在其常規產品中。 它的無伺服器產品沒有單獨的價格。

話雖如此,Vercel 的定價方案包括:

  • Hobby:非商業網站免費
  • Pro:每位成員每月 20 美元
  • Enterprise:每個客戶客製化方案

限制

Vercel 的上限和限制在某種程度上繼承自 AWS Lambda 對於其無伺服器函數。 限制包括:

  • 無伺服器函數執行時間:Hobby 方案為 100 GB-小時,Pro 方案為 1,000 GB-小時,Enterprise 方案為客製化執行等級
  • 無伺服器函數執行逾時:Hobby 方案為 5 秒,Pro 方案為 15 秒,Enterprise 方案為 30 秒
  • 無伺服器函數調用次數:無限制
  • 邊緣函數每日調用次數:Hobby 方案為 100,000 次,Pro 方案為 500,000 次,Enterprise 方案為 500 萬次
  • 無伺服器函數部署大小:壓縮後 50 MB,解壓縮後 250 MB
  • 無伺服器函數記憶體:Hobby 方案為 1024 MB,Pro 方案為 3008 MB
  • 無伺服器函數請求或回應主體:5 MB

總結

對於使用 Vercel 平台的網路應用程式開發人員來說,Vercel Functions 是一個很好的解決方案。 無伺服器功能與平台緊密整合,並與 Next.js 框架同步開發,以確保相容性。

對於需要將無伺服器運算用於 Next.js 應用程式的使用者來說,Vercel 顯然是一個理想的選擇。 對於其他網路應用程式開發人員來說,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 Functions網路應用程式函數JavaScript、TypeScript、Go網路應用程式、JAM stack 網站、Headless CMS。Netlify 透過將無伺服器功能整合到完整的應用程式建置和部署管理中,為 AWS Lambda 增加了價值。 如果您的無伺服器需求符合該用例,Netlify 是在一個地方管理所有事務的理想選擇。
Vercel Functions網路應用程式函數Node.js、Go、Python、Ruby、Bash、Deno、PHP、Rust網路應用程式、JAM stack 網站、Headless CMS。如果您需要無伺服器運算來擴展您的網路應用程式部署方案,Vercel 是一個絕佳的選擇。 如果您的應用程式是使用 Next.js 建置的,則更是如此,因為整合保證會非常出色。
關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎架構和開發人員工具的文章。 他目前與妻子和兩隻兔子住在柏林。 他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。