簡體   English   中英

“請求已中止,因為沒有可用實例”的根本原因和重試。 雲函數錯誤

[英]Root cause and retry of "The request was aborted because there was no available instance." error in Cloud Functions

隨着時間的推移,我們有時會在我們的 Cloud Functions 中看到錯誤的爆發——“請求被中止,因為沒有可用的實例。” HTTP 響應 500,這表明 Cloud Functions 本質上無法管理流量速率。 對於由 Firestore、RTDB、PubSub 甚至計划函數的更改觸發的 Cloud Functions,會發生這種情況。 根據故障排除指南,這可能是由於流量突然增加、冷啟動時間長或請求處理時間長而導致的。 我們還了解到,在 Cloud Function 執行很重要的情況下,使用指數退避重試機制是一種很好的做法。 我們知道這不是最大實例問題,因為我們沒有為這些函數設置一個,而且錯誤是 500 而不是 429。

問題:

  1. 我們能否確定根本原因 - 例如,它是冷啟動嗎? 是長時間運行的 function 導致的嗎?
  2. 當功能因冷啟動時間而失敗時? 這個冷啟動是否只包括提供實例並將代碼放在那里所花費的時間,或者還包括運行時環境(例如node index.js )的初始執行,它也執行全局 scope 中的代碼?
  3. 雲 Function 有失敗重試配置 它是否也涵蓋了我們遇到的“無可用實例”案例?

此錯誤可能由以下原因之一引起:

  • 流量突然增加。
  • 冷啟動時間長。
  • 請求處理時間長。
  • 歸因於 Cloud Run 服務的瞬態因素

github中所述,Cloud Run 不會使用有關它們是否導致冷啟動的信息標記請求日志。但是,Stackdriver 是一套監控工具(Stackdriver Logging、Stackdriver Error reporting、Stackdriver Monitoring),可幫助您了解您的雲功能中發生了什么。 它具有用於記錄、報告錯誤和監控的內置工具。除了 stackdriver,您還可以在 GCP 控制台中執行執行時間、執行計數和 memory 使用情況。您可以參考Stackdriver Logging 和 Stackdriver Trace for Cloud Functions & Error Reporting

冷啟動包括提供實例所需的時間以及運行時環境的初始執行。 並且失敗配置重試不涵蓋“無可用實例”

我發現這個github & Issue tracker提出了一個類似的問題,它仍然是開放的。如果你仍然面臨這個問題,你可以關注這個問題以獲取未來的更新,並在那里添加你的疑慮。

暫無
暫無

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

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