Partager via


Implémenter une stratégie de nouvelles tentatives en utilisant Python

Toute application qui s’exécute dans le cloud ou communique avec les services et ressources distants doit être en mesure de gérer les erreurs temporaires. Il est courant que ces applications rencontrent des erreurs en raison d’une perte momentanée de connectivité réseau, d’un délai d’expiration de requête lorsqu’un service ou une ressource est occupé ou d’autres facteurs. Les développeurs doivent créer des applications pour gérer les erreurs temporaires de manière transparente afin d’améliorer la stabilité et la résilience.

Dans cet article, vous allez apprendre à utiliser les bibliothèques de client Stockage Azure pour Python afin de configurer une stratégie de nouvelles tentatives pour une application qui se connecte à Stockage Blob Azure. Les stratégies de nouvelles tentatives définissent la façon dont l’application gère les demandes ayant échoué et doivent toujours être ajustées pour répondre aux exigences métier de l’application et à la nature de l’échec.

Configurer les options de nouvelles tentatives

Les stratégies de nouvelles tentatives pour le stockage d’objets blob sont configurées par programme, offrant un contrôle sur la façon dont les options de nouvelle tentative sont appliquées à diverses demandes de service et scénarios. Par exemple, une application web qui émet des demandes en fonction de l’interaction utilisateur peut implémenter une stratégie avec moins de nouvelles tentatives et des retards plus courts pour augmenter la réactivité et avertir l’utilisateur lorsqu’une erreur se produit. Par ailleurs, une application ou un composant exécutant des demandes de traitement par lots en arrière-plan peut augmenter le nombre de nouvelles tentatives et utiliser une stratégie d’interruption exponentielle pour permettre la fin de la demande.

Pour configurer une stratégie de nouvelles tentatives pour les requêtes clientes, vous pouvez choisir l’une des approches suivantes :

  • Utiliser les valeurs par défaut : la stratégie de nouvelles tentatives par défaut de la bibliothèque de client Stockage Azure pour Python est une instance de ExponentialRetry avec les valeurs par défaut. Si vous ne spécifiez pas de stratégie de nouvelles tentatives, la stratégie de nouvelles tentatives par défaut est utilisée.
  • Passer les valeurs en tant que mots clés au constructeur du client : vous pouvez passer les valeurs des propriétés de stratégie de nouvelles tentatives en tant qu’arguments par mots clés quand vous créez un objet client pour le service. Cette approche vous permet de personnaliser la stratégie de nouvelles tentatives du client. Elle est utile si vous devez configurer seulement quelques options.
  • Créer une instance d’une classe de stratégie de nouvelles tentatives : vous pouvez créer une instance de la classe ExponentialRetry ou LinearRetry, et définir les propriétés permettant de configurer la stratégie de nouvelles tentatives. Vous pouvez ensuite passer l’instance au constructeur du client pour appliquer la stratégie de nouvelles tentatives à toutes les demandes de service.

Le tableau suivant présente toutes les propriétés qui vous permettent de configurer une stratégie de nouvelles tentatives. Toutes ces propriétés peuvent être passées en tant que mots clés au constructeur du client, mais certaines ne peuvent être utilisées qu’avec une instance de ExponentialRetry ou LinearRetry. Ces restrictions sont notées dans le tableau avec les valeurs par défaut de chaque propriété, si vous n’apportez aucun changement. Vous devez régler la valeur de ces propriétés de manière proactive pour répondre aux besoins de votre application.

Propriété Type Description Valeur par défaut ExponentialRetry LinearRetry
retry_total int Nombre maximal de nouvelles tentatives. 3 Oui Oui
retry_connect int Nombre maximal de nouvelles tentatives de connexion 3 Oui Oui
retry_read int Nombre maximal de nouvelles tentatives de lecture 3 Oui Oui
retry_status int Nombre maximal de nouvelles tentatives en fonction de l’état 3 Oui Oui
retry_to_secondary bool Indique si la requête doit être retentée sur le point de terminaison secondaire, le cas échéant. Utilisez uniquement cette option avec les comptes de stockage pour lesquels la réplication géoredondante est activée, par exemple la réplication RA-GRS ou RA-GZRS. Vous devez également vérifier que votre application peut gérer les données périmées le cas échéant. False Oui Oui
initial_backoff int Intervalle de backoff (en secondes) pour la première nouvelle tentative. S’applique uniquement à la stratégie de backoff exponentiel. 15 secondes Oui Non
increment_base int Base (en secondes) à utiliser pour incrémenter initial_backoff après la première nouvelle tentative. S’applique uniquement à la stratégie de backoff exponentiel. 3 secondes Oui Non
backoff int Intervalle de backoff (en secondes) entre chaque nouvelle tentative. S’applique uniquement à la stratégie de backoff linéaire. 15 secondes Non Oui
random_jitter_range int Nombre (en secondes) qui indique une plage de fluctuation/randomisation pour l’intervalle de backoff. Par exemple, si vous affectez 3 à random_jitter_range, cela signifie qu’un intervalle de backoff de x peut varier entre x+3 et x-3. 3 secondes Oui Oui

Remarque

Les propriétés retry_connect, retry_read et retry_status permettent de compter différents types d’erreurs. Le nombre de nouvelles tentatives restant est calculé en tant que minimum des valeurs suivantes : retry_total, retry_connect, retry_read et retry_status. C’est la raison pour laquelle définir uniquement retry_total peut ne pas avoir d’effet, sauf si vous définissez également les autres propriétés. Dans la plupart des cas, vous pouvez affecter la même valeur aux quatre propriétés pour imposer un nombre maximal de nouvelles tentatives. Toutefois, vous devez paramétrer ces propriétés en fonction des besoins spécifiques de votre application.

Les sections suivantes montrent comment configurer une stratégie de nouvelles tentatives à l’aide de différentes approches :

Utiliser la stratégie de nouvelles tentatives par défaut

La stratégie de nouvelles tentatives par défaut de la bibliothèque de client Stockage Azure pour Python est une instance de ExponentialRetry avec les valeurs par défaut. Si vous ne spécifiez pas de stratégie de nouvelles tentatives, la stratégie de nouvelles tentatives par défaut est utilisée. Vous pouvez également passer des propriétés de configuration en tant qu’arguments par mots clés quand vous créez un objet client pour le service.

L’exemple de code suivant montre comment passer une valeur de la propriété retry_total en tant qu’argument par mot clé au moment de la création d’un objet client pour le service BLOB. Dans cet exemple, l’objet client utilise la stratégie de nouvelles tentatives par défaut. La propriété retry_total et les autres propriétés relatives au nombre de nouvelles tentatives ont la valeur 5 :

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object with retry options
blob_service_client = BlobServiceClient(account_url, credential, retry_total=5,
                                        retry_connect=5, retry_read=5, retry_status=5)

Créer une stratégie ExponentialRetry

Vous pouvez configurer une stratégie de nouvelles tentatives en créant une instance de ExponentialRetry, et en passant l’instance au constructeur du client à l’aide de l’argument par mot clé retry_policy. Cette approche peut s’avérer utile si vous devez configurer plusieurs propriétés ou plusieurs stratégies pour différents clients.

L’exemple de code suivant montre comment configurer les options relatives aux nouvelles tentatives à l’aide d’une instance de ExponentialRetry. Dans cet exemple, nous affectons 10 secondes à initial_backoff, 4 secondes à increment_base, et 3 nouvelles tentatives à retry_total :

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Specify retry policy parameters
retry = ExponentialRetry(initial_backoff=10, increment_base=4, retry_total=3)

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)

Créer une stratégie LinearRetry

Vous pouvez configurer une stratégie de nouvelles tentatives en créant une instance de LinearRetry, et en passant l’instance au constructeur du client à l’aide de l’argument par mot clé retry_policy. Cette approche peut s’avérer utile si vous devez configurer plusieurs propriétés ou plusieurs stratégies pour différents clients.

L’exemple de code suivant montre comment configurer les options relatives aux nouvelles tentatives à l’aide d’une instance de LinearRetry. Dans cet exemple, nous affectons 10 secondes à backoff, 3 nouvelles tentatives à retry_total, et True à retry_to_secondary :

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Specify retry policy parameters
retry = LinearRetry(backoff=10, retry_total=3, retry_to_secondary=True)

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)

Étapes suivantes

  • Cet article fait partie du guide Stockage Blob pour Python pour les développeurs. Consultez la liste complète des articles du guide pour les développeurs à la page Générer votre application.
  • Pour obtenir des conseils architecturaux et des bonnes pratiques générales pour les stratégies de nouvelles tentatives, consultez Gestion des erreurs temporaires.
  • Pour obtenir des conseils sur l’implémentation d’un modèle de nouvelles tentatives pour les échecs temporaires, consultez Modèle de nouvelle tentative.