設定執行個體數量上限 (第 1 代)

您可以設定 Cloud Run functions 執行個體的數量上限,控管函式的資源調度行為。設定執行個體數量上限可控管費用,以及防止下游資源因流量過大而不堪負荷。

Cloud Run functions 擴充資源的方式,是為函式建立新的執行個體。由於每個執行個體每次只能處理一個要求,因此要求數量大幅暴增時,可能會導致建立許多執行個體。

自動調整資源配置功能通常很實用,但在某些時候,您可能需要限制特定時間內可存在的執行個體總數,例如與函式互動的資料庫只能處理一定數量的開放連線時。

設定及清除執行個體數量上限

您可以在部署期間設定函式的執行個體數量上限。每個函式都有自己的執行個體數量上限設定。函式會獨立調度資源,不會互相影響。

設定執行個體數量上限

您可以使用 Google Cloud CLI 或 Google Cloud 控制台,設定執行個體數量上限。如未指定上限,Cloud Run functions 會預設為 3000。

如要設定執行個體數量上限,請按照下列步驟操作:

控制台

  1. 前往「Cloud Run functions Overview」(Cloud Run functions 總覽) 頁面。

  2. 按一下「Create function」(建立函式)

  3. 填寫函式的必填欄位。

  4. 展開頁面底部的「Runtime, build...」(執行階段,建構…) 部分,然後按一下「Runtime」(執行階段) 分頁標籤。

  5. 在「Autoscaling」(自動調度資源) 部分的「Maximum number of instances」(執行個體數量上限) 欄位中,輸入值或使用預設值。

gcloud

如要設定執行個體數量上限,請執行 deploy 指令搭配 --max-instances 旗標:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

更改下列內容:

  • FUNCTION_NAME:函式的名稱。

  • MAX_INSTANCE_LIMIT:要設定的執行個體數量上限,例如 3000。

清除執行個體數量上限

您可以使用 gcloud 指令列工具或 Google Cloud 控制台,清除函式的執行個體數量上限。

控制台

如要清除函式的執行個體數量上限,請按照下列步驟操作:

  1. 前往「Cloud Run functions Overview」(Cloud Run functions 總覽) 頁面。

  2. 點選現有函式,前往詳細資料頁面。您可以在「Details」(詳細資料) 分頁中,查看函式目前的執行個體數量上限。

  3. 按一下「Edit」(編輯)

  4. 展開頁面底部的「Runtime, build...」(執行階段,建構…) 部分,然後按一下「Runtime」(執行階段) 分頁標籤。

  5. 在「Autoscaling」(自動調度資源) 部分的「Maximum number of instances」(執行個體數量上限) 欄位中,輸入 0

gcloud

如要清除函式的執行個體數量上限,請執行 deploy 指令搭配 --clear-max-instances 旗標:

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances

限制與最佳做法

本節提供執行個體數量上限的使用準則。

選擇執行個體數量上限

最適合的函式執行個體數量上限值,取決於函式的特性,包括叫用作業的執行時間長度、預期的平均和高峰叫用頻率,以及應用程式對叫用失敗的容許程度。一般來說,建議先將執行個體數量上限值設為 3,然後監控叫用失敗情形,再視需要調高此值。

防止過度擴充資源

如果沒有指定執行個體數量上限,Cloud Run functions 會「優先擴充資源以滿足需求」,而非限制處理量。也就是說,除非設定上限,否則函式實際上可擁有無限數量的並行執行個體。

如果函式會將要求傳送至處理量受限或無法擴充的下游服務,建議為其指派 --max-instances 上限。設定執行個體數量上限可提升系統整體穩定性,並防止異常高的要求量。

所有執行個體忙碌時的要求處理方式

正常情況下,系統會建立新的執行個體來為函式擴充資源,以處理傳入的流量負載。不過若已設定執行個體數量上限,可能會發生執行個體數量不足以應付傳入流量負載的情況。

此時,Cloud Run functions 會嘗試處理新的傳入要求最多 30 秒:

  • 如果執行個體在這段時間內完成處理要求,可能會開始處理新的傳入要求。
  • 如果沒有可用的執行個體,要求就會失敗。

傳送至超載 HTTP 函式的要求會失敗,並傳回以下回應代碼

  • 429 Too Many Requests (已設定執行個體數量上限時)
  • 500 Internal Server Error (未設定執行個體數量上限時)

系統會自動儲存要傳送至事件驅動函式的事件,直到有可用容量為止。

超出 Cloud Run functions 資源調度能力的執行個體數量上限

當您指定執行個體數量上限值時,所設定的是最大數量。設定很高的上限並不代表函式能擴充至指定的執行個體數量,只代表在任何時間點能共存的執行個體數量,不能超過該上限。

此外,設定執行個體數量上限,可能會影響 Cloud Run functions 用來滿足流量需求的資源調度策略。一般來說,Cloud Run functions 會優先遵守您指定的上限,而不是擴充資源且可能超出上限。

處理流量高峰

某些情況下 (例如流量暴增),Cloud Run functions 可能會在短暫期間內,建立超過指定數量上限的執行個體。如果您的函式無法容許這樣的暫時行為,建議預留安全餘裕,設定較低的執行個體數量上限值,確保不超出函式的容許範圍。

部署作業

部署新版函式時,Cloud Run functions 會將流量從舊版遷移至新版。由於執行個體數量上限是針對各個函式版本分別設定,部署後可能會暫時超過指定的上限。

舉例來說,假設某函式的執行個體數量上限是 5 個。在一般情況下,函式處理要求時最多可擴充至 5 個執行個體。部署的新版函式設有自己的執行個體數量上限 5 個。

部署新版函式時,舊版函式執行中的要求處理作業不會中斷,而是會持續進行。新的傳入要求會由新部署的函式版本處理。

因此,部署新版本後,上例中的函式最多可有 10 個執行個體 (新舊版各 5 個)。舊的函式執行個體停止運作所需的時間,取決於完成所有進行中要求處理作業所需的時間。選取適當的執行個體數量上限時,請一併考量這項因素。

清除執行個體數量上限

將函式的執行個體數量上限設為 0,會清除函式現有的執行個體數量上限設定,但不會暫停函式。