Stratégie de nouvelle tentative (Retry)
Les SDK OUTSCALE pour nos API intègrent une prise en charge native des nouvelles tentatives automatiques (retry) avec temporisation exponentielle (exponential backoff) en cas d’erreurs HTTP.
La logique de retry est actuellement implémentée uniquement dans le SDK Python, à partir de la version v0.35.0. La compatibilité avec d’autres SDK est prévue pour les prochaines versions. |
Informations générales
Le SDK réessaie automatiquement les requêtes qui échouent avec les codes HTTP suivants :
-
HTTP 429 Too Many Requests
-
Code 24 - ErrorOperationThrottledPerAccount: Request rate exceeded.
-
Code 25 - ErrorOperationThrottledPerCall: Request rate exceeded.
-
-
HTTP 500 Internal Server Error – Temporary server issue
-
HTTP 503 Service Unavailable – ErrorOperationThrottledWholePlatform: Request rate exceeded.
Pour en savoir plus, voir la page de référence des codes d’erreur. |
Le mécanisme de retry est basé sur le comportement de urllib3.util.Retry. Par défaut, il est configuré comme suit :
-
Retry maximum : 3
-
Facteur backoff : 1
-
Jitter backoff : 3 s
Exponential Backoff
Exponential backoff est une stratégie utilisée pour gérer les retry après que l’API a renvoyé un code de limite.
Le délai entre chaque retry augmente de façon exponentielle. La limite est appliquée par requête d’API et par compte. Pour réduire les problèmes de concurrence lors de l’exécution d’un programme multithread effectuant des requêtes API, une variation aléatoire (jitter) est ajoutée à la stratégie.
Il est calculé comme suit :
{facteur backoff} * (2 ** ({nombre de précédents retry}))
Exemple de paramétrage de backoff et jitter :
Nombre de retry | Temps d’attente (en secondes) |
---|---|
Premier retry |
Entre 0 s et 3 s |
Second retry |
Entre 2 s et 5 s |
Troisième retry |
Entre 4 s et 7 s |
Personnalisation du retry
Le comportement de retry peut être personnalisé. Vous devez ajouter ou modifier les paramètres suivants :
-
max_retries
: Nombre maximal de retry avant l’échec de la requête. -
retry_backoff_factor
: Le multiplicateur pour le délai d’exponential backoff. -
retry_backoff_jitter
: Une valeur ajoutée au délai afin d’éviter que les retry se produisent en même temps dans les scénarios multithreads.
Personnalisation du SDK Python
Exemple de personnalisation du fichier osc-sdk-python
:
"eu2": {
"access_key": "XXXX",
"region_name": "eu-west-2",
"secret_key": "XXXX",
"max_retries": 3,
"retry_backoff_factor": 1,
"retry_backoff_jitter": 3,
},