Google Cloud 的 Python 函式庫專為提高彈性而設計。它們添加了強大的重試機制來有效處理瞬態錯誤。但是,在某些情況下,預設重試行為可能不適合。例如,您可能會遇到某些不應觸發重試的錯誤,或者您可能需要對重試邏輯進行更多控制。
這篇部落格文章探討了 Google Cloud 的 Python 函式庫如何與自訂重試謂詞交互,讓您可以自訂重試行為以更好地滿足您的特定要求。
在這篇文章中,我想重點介紹一個與在 Google Cloud 庫中使用服務帳號模擬相關的具體範例。在我設計並目前正在研究的架構中,我們將使用者環境隔離到單獨的 Google Cloud 專案中。我們注意到,我們的一些服務在某些用戶流中效能下降。經過調查,我們將問題追溯到前面提到的庫的預設重試行為。
在進行自訂之前,了解 Google Cloud Python 程式庫的預設重試行為非常重要。這些函式庫通常具有指數退避策略,並增加重試抖動。這意味著,當發生暫時性錯誤時,庫將在短暫延遲後重試該操作,並且每次後續嘗試後延遲都會呈指數增長。包含抖動會帶來延遲的隨機性,這有助於防止多個客戶端之間的重試同步。
雖然此策略在許多情況下都很有效,但它可能不適合所有情況。例如,如果您使用服務帳戶模擬並遇到身份驗證錯誤,則嘗試重試該操作可能沒有幫助。在這種情況下,可能需要先解決底層身份驗證問題,然後才能重試成功。
在 Google Cloud 庫中,自訂重試謂詞可讓您指定應進行重試嘗試的精確條件。您可以建立一個接受異常作為輸入的函數,如果應該重試操作則傳回 True,如果不應該重試則傳回 False。
例如,以下是自訂重試謂詞,可防止重試服務帳戶模擬期間發生的某些驗證錯誤:
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
此謂詞檢查異常是否為 GoogleAPICallError,並特別尋找訊息「無法取得類比憑證」。如果滿足此條件,則傳回 False,防止重試。
Firestore:
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
BigQuery:
from google.cloud import firestore # ... your Firestore setup ... retry = Retry(predicate=custom_retry_predicate, timeout=10) # example of an arbitrary firestore api call, works with all stream = collection.stream(retry=retry)
在這兩個範例中,我們使用自訂謂詞和逾時值來建立一個 Retry 物件。然後,此 Retry 物件作為參數傳遞給對應的 API 呼叫。
自訂重試謂詞提供了一種增強 Google Cloud 應用程式彈性的有效方法。透過自訂重試行為以滿足您的特定要求,您可以確保您的應用程式穩健、高效且可擴展。負責您的錯誤處理並掌握重試過程!
以上是自訂 Google Cloud Python 庫中的重試謂詞的詳細內容。更多資訊請關注PHP中文網其他相關文章!