簡體   English   中英

如何修復 CloudRun 錯誤“請求已中止,因為沒有可用實例”

[英]How to fix CloudRun error 'The request was aborted because there was no available instance'

我正在使用托管 CloudRun 來部署concurrency=1的容器。 部署后,我將並行觸發四個長時間運行的請求。 大多數時候,一切正常——但偶爾,我會在幾秒鍾內面對來自其中一個節點的 500; 日志僅提供主題中提供的錯誤消息。

使用帶指數退避的重試並沒有改善這種情況; 重試也以 500 秒結束。 StackDriver 日志也不提供更多信息。

可能相關gcloud beta run deploy參數:

--memory 2Gi --concurrency 1 --timeout 8m --platform managed

錯誤消息的確切含義是什么——我該如何解決這個問題?

當基礎設施的擴展速度不足以趕上流量高峰時,可能會出現此錯誤消息。 基礎設施只會將請求保留在隊列中一段時間​​(大約 10 秒),然后中止它。

這通常發生在:

  1. 流量突然大幅增加
  2. 冷啟動時間長
  3. 請求時間長

我也試驗了這個問題。 易於復制。 我有一個以 6s fibo(45) 處理的斐波那契容器。 我使用 Hey 執行 200 個請求。 我將 Cloud Run 並發設置為 1。

超過 200 個請求我有 8 個類似的錯誤。 就我而言:突然的流量高峰和長時間的處理時間。 (對我來說是短暫的冷啟動,它在 Go 中)

當工作時間內流量突然增加時,我們也遇到了這個問題。 該問題通常是由於流量突然增加和更長的實例啟動時間來適應傳入請求造成的。 處理此問題的一種方法是保持預熱實例始終運行,即在 cloud run deploy 命令中配置 --min-instances 參數。 另一種推薦的方法是減少服務冷啟動時間(這在某些語言如 Java 和 Python 中很難實現)

我能夠通過將最大自動縮放容器數從 2 提高到 10 來解決我的服務上的這個問題。對於流量來說,2 真的沒有理由甚至太低,但我懷疑有關 Cloud Run 內部的某些東西是以某種方式最多捆綁 2 個容器。

Max Retry Attempts設置為零以外的任何值都可以解決這個問題,就像它對我所做的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM