來源:https://www.splunk.com/en_us/blog/devops/gcp-serverless-comparison.html
作者:Splunk
譯者:donghui
Serverless 平臺的主要優點是,它們使您可以專注於編寫代碼,而不必關心管理基礎結構,自動擴容或爲所用資源支付更多費用。
這使得 Serverless 計算非常適合以下用例:
- 無狀態 HTTP 應用程序
- Web 和移動後端
- 實時的或事件驅動的數據處理
Cloud Run、Cloud Functions 和 App Engine 都是 Google Cloud 提供的 Serverless 平臺,但是它們之間有細微差別,在某些情況下某個平臺可能會比其他平臺更受歡迎。
Google Cloud Run:Serverless 容器
Cloud Run 由 Knative 構建, 是 Google 最新的 Serverless 產品。其他 Serverless 平臺使用事件驅動函數作爲部署的主要單元,而 Cloud Run 使您可以將代碼打包在無狀態容器中,然後通過 HTTP 請求調用它。
在 Google 完全託管環境中部署 Cloud Run 容器可爲開發人員提供 Serverless 的通常優勢(無需管理基礎架構,按使用付費,更容易自動縮放),還支持任意數量的編程語言、庫或系統二進制文件。Cloud Run 還可以在 Google Kubernetes Engine(GKE)上部署容器,並能夠爲後一種場景的 Serverless 容器專門配置硬件需求。
有了這種靈活性,Cloud Run 的用戶可以使用他們已經用來在 Google Cloud 上打包和運行容器的工具輕鬆地運行 Serverless 工作負載,或者將有狀態和無狀態工作負載一起部署。
Google Cloud Functions: Serverless 函數
儘管 Cloud Run 接受容器並通過 HTTP 請求來調用,但 Cloud Functions 仍然是 Google 的事件驅動型 Serverless 平臺。與打包在 Docker 容器中不同,您需要將代碼部署爲函數。Google 支持編寫 Cloud Functions,因此也可以通過 HTTP 請求調用它們,或將其設置爲根據後臺事件觸發。
def hello_get(request):
"""HTTP Cloud Function.
Args:
request (flask.Request): The request object.
<http://flask.pocoo.org/docs/1.0/api/#flask.Request>
Returns:
The response text, or any set of values that can be turned into a
Response object using `make_response`
<http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>.
"""
return 'Hello World!'
Cloud Functions 對代碼的部署方式施加了更多限制(顯然易見,您需要將其打包爲一個函數),並且僅支持一組特定的語言(您可以使用 JavaScript、Node.js、Python 3,或 Go 運行時),但可以使用您的雲環境中的事件觸發功能。
Google App Engine: Serverless 應用
App Engine 是 Google 針對 Web 和 API 後端的完全託管的 Serverless 應用程序平臺。儘管 Serverless 函數使您可以輕鬆地運行輕量級和獨立的函數,但使用 Cloud Functions 運行更復雜的應用程序可能會很困難。對於想要構建具有多種功能的 Serverless 應用程序或保留超出單個請求範圍的某種程度的上下文的開發人員,Google App Engine 提供了一種引人注目的選擇。
在 Google App Engine 中,您只需獲取代碼並將其部署到 Google 上,然後爲您消耗的資源付費-這在 App Engine 上作爲包含一個或多個服務的單個資源運行。對於每種服務,您都可以部署該服務的一個或多個版本,這些版本又可以在一個或多個實例中運行,具體取決於每個版本處理的流量。
如上所示,使用單個命令從您的應用程序目錄在 Google App Engine 上部署 Hello World。
根據您的特定需求,您可以在兩種類型的 App Engine 環境中選擇一種來運行代碼。如果您要運行需要快速擴容的應用程序,並且使用 App Engine 支持的特定語言版本編寫,那麼 Google 建議您使用標準環境。對於具有更穩定流量的應用程序,使用自定義運行時或不受支持的編程語言在 Docker 容器中運行,或者要訪問在運行在 Compute Engine 上的 Google Platform 項目的其他部分,請使用 App Engine 靈活環境。
在 Cloud Run、Cloud Functions 和 App Engine 之間進行選擇
通常,Serverless 平臺最好用於構建無狀態應用程序,並且無需管理基礎架構。一些示例包括:
- 快速製作功能原型
- 快速自動縮放 Web 應用程序
- 爲了響應後臺事件執行一個任務
在確定哪種 Serverless 平臺最適合您時,請記住以下幾點:
- 如果您已經將代碼打包在 Docker 容器中或正在 Google Cloud 中運行 Kubernetes 集羣,請針對您的 Serverless 工作負載考慮使用 Cloud Run 或 Knative。
- 對於運行響應實時事件的代碼,或在不使用容器的情況下處理請求,請使用 Cloud Functions。
- 如果您需要在一個地方放置多個函數並且只想部署整個應用程序,請使用 App Engine。