設定執行個體數量上限 (第 1 代)
您可以設定 Cloud Run 函式執行個體的上限數量,藉此控管函式的資源調度行為。設定執行個體上限可控管成本,並避免下游資源因流量過多而超載。
Cloud Run 函式會建立新的函式執行個體進行資源調度。其中每個執行個體每次只能處理一個要求,因此要求量大幅激增時,可能會導致建立許多執行個體。
自動調度資源在大多數情況下都很有幫助,但在某些情況下,您可能會想限制在任何特定時間能夠共存的執行個體總數。例如函式可能與資料庫互動,而該資料庫只能處理特定數量的開放連線。
設定及清除上限執行個體限制
您可以在部署期間設定函式的執行個體上限。每個函式都有自己的上限執行個體設定。函式會獨立資源調度,不受彼此影響。
設定執行個體數量上限
您可以使用 Google Cloud CLI 或 Google Cloud 主控台設定執行個體數量上限。如果您未指定限制,Cloud Run 函式會將預設值設為 3000。
如要設定執行個體數量上限,請按照下列步驟操作:
主控台
gcloud
如要設定上限執行個體限制,請搭配 --max-instances
標記執行 deploy
指令:
gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT
更改下列內容:
FUNCTION_NAME:函式名稱。
MAX_INSTANCE_LIMIT:要設為執行個體數量上限的數字,例如 3000。
清除上限執行個體限制
您可以使用 gcloud
指令列工具或 Google Cloud 主控台,清除函式的上限執行個體限制。
主控台
如要清除函式執行個體數量上限,請按照下列步驟操作:
gcloud
如要清除函式的執行個體數量上限,請執行 deploy
指令並加上 --clear-max-instances
標記:
gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances
限制與最佳做法
本節提供使用上限執行個體的準則。
選擇最大執行個體值
執行個體上限設定的最佳值取決於函式的特性,包括叫用執行所需的時間、預期的平均和最高叫用頻率,以及應用程式對叫用失敗的容許值。一般來說,建議您先將最大執行個體值設為 3,然後監控叫用失敗情況,並視需要調高最大執行個體值。
防範過度擴大規模
如未指定執行個體數量上限,Cloud Run 函式會優先擴充以滿足需求,而非限制吞吐量。也就是說,除非您設定了限制,否則函式實際上可以有無限的同時執行個體數量。
建議您為所有將要求傳送至吞吐量受限或無法擴充的下游服務的函式,指派 --max-instances
限制。上限執行個體限制可提升整體系統穩定性,並有助於防範異常高的請求層級。
在所有執行個體都忙碌時處理要求
在正常情況下,函式會建立新的執行個體進行擴充,以處理外來流量負載。不過若您已經設定上限執行個體限制,就可能遭遇執行個體不足無法因應流量負載的情況。
在這種情況下,Cloud Run 函式會嘗試處理新的傳入要求,最多 30 秒:
- 如果執行個體在這個時間範圍內完成處理要求,可能會開始處理新的內送要求。
- 如果沒有可用的執行個體,要求就會失敗。
傳送至超載 HTTP 函式 的要求會失敗,並傳回
429 Too Many Requests
(如果已設定執行個體數量上限值),或500 Internal Server Error
(如果未設定執行個體數量上限值)
系統會自動儲存事件驅動函式的事件,直到容量可用為止。
執行個體數量上限超過 Cloud Run 函式的調度能力
指定上限執行個體限制時,您會指定上限。設定高限制並不代表函式能夠擴充至指定的執行個體數量,只代表執行個體在不超過限制的情況下,在任何時間點能夠共存的數量。
此外,設定執行個體上限可能會影響 Cloud Run 函式用來滿足流量需求的調整策略。一般而言,Cloud Run 函式會優先遵守您指定的限制,而非擴大規模並可能超出限制。
處理流量尖峰
在某些情況下 (例如流量迅速增加),Cloud Run 函式可能會在短暫期間內,建立略高於指定上限執行個體值的執行個體。如果函式無法承受這樣的臨時行為,您可以考慮採用安全餘裕,設定較低的上限執行個體值,讓函式能夠承受。
部署作業
您部署新版的函式時,Cloud Run 函式會將流量從舊版遷移至新版。由於上限執行個體限制是針對各個函式版本個別設定,您在部署後可能會暫時超過指定限制。
舉例來說,函式執行個體數量上限可能為 5。在一般情況下,函式會在處理要求時擴充至 5 個執行個體。部署新版函式時,新版的執行個體上限為 5。
當您部署新版函式時,先前版本函式處理的請求不會中斷。相反地,這些要求會繼續進行。新的內送要求會由新部署的函式版本處理。
因此,在部署新版本後的期間,前述範例中的函式最多可能會有 10 個執行個體 (每個函式版本 5 個)。先前函式的執行個體需要多長時間才能終止,取決於這些執行個體處理任何有效要求所需的時間。在選擇適當的上限執行個體限制時,請務必考量這項額外因素。
清除上限執行個體限制
將函式的執行個體數量上限設為 0 會清除函式的現有執行個體數量上限,但不會暫停函式。