設定執行個體數量上限 (第 1 代)
您可以設定 Cloud Run functions 執行個體的數量上限,控管函式的資源調度行為。設定執行個體數量上限可控管費用,以及防止下游資源因流量過大而不堪負荷。
Cloud Run functions 擴充資源的方式,是為函式建立新的執行個體。由於每個執行個體每次只能處理一個要求,因此要求數量大幅暴增時,可能會導致建立許多執行個體。
自動調整資源配置功能通常很實用,但在某些時候,您可能需要限制特定時間內可存在的執行個體總數,例如與函式互動的資料庫只能處理一定數量的開放連線時。
設定及清除執行個體數量上限
您可以在部署期間設定函式的執行個體數量上限。每個函式都有自己的執行個體數量上限設定。函式會獨立調度資源,不會互相影響。
設定執行個體數量上限
您可以使用 Google Cloud CLI 或 Google Cloud 控制台,設定執行個體數量上限。如未指定上限,Cloud Run functions 會預設為 3000。
如要設定執行個體數量上限,請按照下列步驟操作:
控制台
前往「Cloud Run functions Overview」(Cloud Run functions 總覽) 頁面。
按一下「Create function」(建立函式)。
填寫函式的必填欄位。
展開頁面底部的「Runtime, build...」(執行階段,建構…) 部分,然後按一下「Runtime」(執行階段) 分頁標籤。
在「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 控制台,清除函式的執行個體數量上限。
控制台
如要清除函式的執行個體數量上限,請按照下列步驟操作:
前往「Cloud Run functions Overview」(Cloud Run functions 總覽) 頁面。
點選現有函式,前往詳細資料頁面。您可以在「Details」(詳細資料) 分頁中,查看函式目前的執行個體數量上限。
按一下「Edit」(編輯)。
展開頁面底部的「Runtime, build...」(執行階段,建構…) 部分,然後按一下「Runtime」(執行階段) 分頁標籤。
在「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,會清除函式現有的執行個體數量上限設定,但不會暫停函式。