關於 Cloud Run 服務中的執行個體自動調度

本頁說明 Cloud Run 的預設自動調度資源行為。如果您需要進一步控管資源調度行為,請參閱手動調度這項替代調度選項的相關資訊。

根據預設,每個 Cloud Run 修訂版本都會自動調整所需的執行個體數量,以處理所有傳入要求、事件或 CPU 使用率。

如果修訂版本未收到任何流量,則會依預設縮減為零個執行個體。不過,如有需要,您可以變更這項預設值,使用最少執行個體設定指定要保持閒置或「暖機」的執行個體。如果您在要求之外使用 CPU,應將最低執行個體數設為 1

除了傳入要求、事件或 CPU 使用率的速率之外,排定的執行個體數量也會受到以下因素影響:

Cloud Run 自動配置器會定期評估這些值。

以執行個體為基礎的計費和自動調度資源

如果您為 Cloud Run 服務設定以執行個體為基準的計費,請注意「從」和「到」零的行為。

從零開始擴大規模只有要求才能觸發從零開始的縮放作業,因此未處理要求的服務無法從零開始縮放。針對這類工作負載,您可以將最小執行個體數量設為大於 0,或是在設計中加入「喚醒要求」,在縮減至零個後重新啟動處理作業。

將資源調度率降至零由於沒有任何執行個體的 CPU 使用率會達到 0%,因此查看所有 CPU 用量時,結果永遠不會縮放為零。也就是說,您只能透過檢查執行個體是否正在處理要求,來決定是否要從 1 縮減到 0。

關於執行個體數量上限

在某些情況下,您可能會因為成本控制或服務使用的其他資源相容性,而限制可啟動的執行個體總數。例如,Cloud Run 服務可能會與資料庫互動,而該資料庫只能處理特定數量的並行開放連線。

您可以使用「執行個體數量上限」設定,限制可同時啟動的執行個體總數,詳情請參閱「設定執行個體數量上限」一文。

超過執行個體數量上限

在正常情況下,修訂版本會建立新的執行個體進行擴充,以處理外來流量負載。不過,如果您設定了上限執行個體限制,在某些情況下,執行個體可能不足以因應流量負載。在這種情況下,系統會將傳入的要求排入 (待處理) 的佇列,如下所示:

要求會處於待處理狀態,最長為這項服務容器執行個體平均啟動時間的 3.5 倍,或 10 秒 (以較大者為準)。

在此時間範圍內,如果執行個體完成處理要求,就可用於處理佇列中的待處理要求。如果在時間範圍內沒有執行個體可用,要求就會失敗,並傳回 429 錯誤代碼。

資源調度保證

執行個體數量上限是每個修訂版本的上限,也就是說,這個修訂版本的執行個體數量不得超過上限。

在一般情況下,Cloud Run 能夠快速擴充至執行個體上限,以便處理所有傳入的要求或事件。不過,設定高限制並不代表修訂版本能夠在任何時間點擴充至指定的執行個體數量。在特殊情況下,Cloud Run 可以限制調整,確保所有客戶都能享有良好的服務。

因流量激增而超過執行個體上限

在某些情況下 (例如流量迅速增加或系統維護),Cloud Run 可能會在短暫期間內,建立比上限執行個體設定中指定的執行個體還要多的執行個體。您可以啟動超過上限執行個體設定的新執行個體,以取代現有的執行個體,並為處理中的要求提供寬限期。

在正常運作情況下,每週可能會超過執行個體上限幾次。寬限期通常為 15 分鐘,或 要求逾時設定中指定的值。這些額外的執行個體會在閒置 15 分鐘後銷毀。

如果需要大量替換作業,更新作業通常會分散在數分鐘或數小時內,但每個替換作業都會有一個超出寬限期的例項。超出最大執行個體值的執行個體通常不會超過所設定的上限執行個體數量兩倍,但如果流量突然暴增,執行個體數量可能會大得多。

負載測試會產生更多執行個體,超過設定的最大執行個體數,因為系統可能會變更流量尖峰的放送位置,以便為具有持續負載模式的現有工作負載保留容量。

如果您的服務無法承受這樣的臨時行為,可以考慮採用安全餘裕,設定較低的上限執行個體值。

流量分配

由於上限執行個體限制是每個修訂版本的限制,如果服務將流量分散至多個修訂版本,服務的執行個體總數可能會超過每個修訂版本的上限執行個體數。您可以在「Instance Count」指標中觀察到這項現象。

部署作業

當您部署新修訂版本來處理 100% 的流量時,Cloud Run 會先啟動足夠的新修訂版本執行個體,再將流量導向該執行個體。這可減少新修訂版本部署作業對要求延遲的影響,尤其是在處理大量流量時。由於上限執行個體限制是針對各個修訂版本設定,因此在部署期間,服務的執行個體總數可能會超過每個修訂版本的上限執行個體數量。您可以在「Instance Count」指標中觀察到這項現象。

閒置執行個體及盡可能減少冷啟動

處理完所有要求後,Cloud Run 不會立即關閉執行個體。為了盡可能降低冷啟動的影響,Cloud Run 可能會讓部分執行個體閒置,最長時間為 15 分鐘。啟用 GPU 的 Cloud Run 資源可能會讓部分執行個體閒置,最長時間為 10 分鐘。這類執行個體可在流量突然激增時處理要求。

例如執行個體完成處理要求,可能會維持閒置狀態一段時間,以免需要處理其他要求。閒置執行個體可能會持續佔用資源,例如開放資料庫連線。請注意,除非您明確設定服務為以執行個體為準的結帳,否則預設的結帳設定為以要求為準。

如要讓閒置的執行個體永久可用,請使用 min-instance 設定。請注意,即使服務未主動放送要求,使用這項功能仍會產生費用

自動調度資源和待處理要求

要求會處於待處理狀態,最長為這項服務容器執行個體平均啟動時間的 3.5 倍,或 10 秒 (以較大者為準)。

自動調度資源對後端服務的影響

隨著執行個體數量自動增加,Cloud Run 服務可能會遇到其後端服務的限制。舉例來說,Cloud SQL 有API 配額限制。請確認這些後端服務具備足夠的配額,且可處理來自所有 Cloud Run 服務執行個體的連線。建議設定執行個體數量上限,以免後端服務超載。

自動調整資源與 Pub/Sub

Google 建議您使用推播訂閱,從 Cloud Run 中的 Pub/Sub 主題取用訊息。容器會像接收 HTTP 要求一樣接收推播訊息,進而觸發相同的自動調整大小行為。

自動調度資源和多個容器 (附屬程式)

Cloud Run 會考量執行個體的 CPU 使用率,以便進行自動調度資源。執行個體的 CPU 使用率是指目前使用的已分配 CPU 百分比。

請注意,在容器層級設定 CPU 限制時,您會分配 CPU。如果您使用每個執行個體有多個容器,則該執行個體的實際 CPU 分配量,就是您為每個容器設定的 CPU 限制總和。

後續步驟