Personnalisation des prédicats de nouvelle tentative dans les bibliothèques Google Cloud Python

Barbara Streisand
Libérer: 2024-11-19 18:11:02
original
319 Les gens l'ont consulté

Customizing Retry Predicates in Google Cloud Python Libraries

Les bibliothèques Python de Google Cloud sont conçues pour la résilience. Ils ajoutent des mécanismes de nouvelle tentative puissants pour gérer efficacement les erreurs transitoires. Cependant, il peut arriver que le comportement de nouvelle tentative par défaut ne soit pas adapté. Par exemple, vous pourriez rencontrer certaines erreurs qui ne devraient pas déclencher de nouvelle tentative, ou vous pourriez avoir besoin de plus de contrôle sur la logique de nouvelle tentative.

Cet article de blog explore la manière dont les bibliothèques Python de Google Cloud interagissent avec les prédicats de nouvelle tentative personnalisés, vous permettant ainsi de personnaliser le comportement des nouvelles tentatives afin de mieux répondre à vos besoins spécifiques.

Dans cet article de blog, je souhaite mettre en évidence un exemple spécifique lié à l'utilisation de l'usurpation d'identité de compte de service dans les bibliothèques Google Cloud. Dans une architecture que j'ai conçue et sur laquelle je travaille actuellement, nous isolons les environnements utilisateur dans des projets Google Cloud distincts. Nous avons constaté que certains de nos services connaissaient des performances dégradées dans certains flux utilisateurs. Après enquête, nous avons remonté le problème au comportement de nouvelle tentative par défaut des bibliothèques mentionnées précédemment.

Le mécanisme de nouvelle tentative par défaut

Avant de passer à la personnalisation, il est important de comprendre le comportement de nouvelle tentative par défaut des bibliothèques Google Cloud Python. Ces bibliothèques ont généralement une stratégie d'attente exponentielle avec une instabilité supplémentaire pour les tentatives. Cela signifie que lorsqu'une erreur passagère se produit, la bibliothèque réessayera l'opération après un bref délai, le délai augmentant de façon exponentielle après chaque tentative ultérieure. L'inclusion de la gigue introduit un caractère aléatoire dans le délai, ce qui permet d'empêcher la synchronisation des tentatives sur plusieurs clients.

Bien que cette stratégie soit efficace dans de nombreuses situations, elle n'est peut-être pas idéale pour tous les scénarios. Par exemple, si vous utilisez l'usurpation d'identité de compte de service et que vous rencontrez une erreur d'authentification, tenter de réessayer l'opération peut ne pas être utile. Dans de tels cas, le problème d'authentification sous-jacent doit probablement être résolu avant qu'une nouvelle tentative puisse réussir.

Saisir des prédicats de nouvelle tentative personnalisés

Dans les bibliothèques Google Cloud, les prédicats de nouvelle tentative personnalisés vous permettent de spécifier les conditions précises dans lesquelles une nouvelle tentative doit être effectuée. Vous pouvez créer une fonction qui accepte une exception en entrée et renvoie True si l'opération doit être réessayée, et False si elle ne doit pas être tentée.

Par exemple, voici un prédicat de nouvelle tentative personnalisé qui empêche les nouvelles tentatives pour certaines erreurs d'authentification qui se produisent lors de l'usurpation d'identité du compte de service :

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
Copier après la connexion
Copier après la connexion

Ce prédicat vérifie si l'exception est une GoogleAPICallError et recherche spécifiquement le message « Impossible d'acquérir des informations d'identification usurpées ». Si cette condition est remplie, il renvoie False, empêchant une nouvelle tentative.

Utiliser des prédicats personnalisés avec les bibliothèques Google Cloud

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
Copier après la connexion
Copier après la connexion

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)
Copier après la connexion

Dans les deux exemples, nous créons un objet Retry avec notre prédicat personnalisé et une valeur de délai d'attente. Cet objet Retry est ensuite transmis en argument aux appels d'API respectifs.

Avantages des prédicats de nouvelle tentative personnalisés

  • Contrôle précis : définissez avec précision les conditions de nouvelle tentative en fonction d'exceptions spécifiques ou de messages d'erreur.
  • Efficacité améliorée : évitez les tentatives inutiles pour les erreurs non transitoires, économisant ainsi des ressources et du temps.
  • Stabilité améliorée des applications : gérez les erreurs spécifiques avec élégance pour éviter les pannes en cascade.

Conclusion

Les prédicats de nouvelle tentative personnalisés offrent un moyen efficace d'améliorer la résilience de vos applications Google Cloud. En personnalisant le comportement des nouvelles tentatives en fonction de vos besoins spécifiques, vous pouvez garantir que vos applications sont robustes, efficaces et évolutives. Prenez en charge la gestion de vos erreurs et maîtrisez le processus de nouvelle tentative !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal