Intervalle exponentiel entre les tentatives tronqué

L'intervalle exponentiel entre les tentatives tronqué est une stratégie standard en matière de traitement des erreurs pour les applications réseau, où un client relance régulièrement une requête ayant échoué en observant des délais croissants entre les tentatives. Les clients doivent employer cette stratégie pour toutes les requêtes adressées à Cloud Storage qui renvoient les codes de réponse HTTP 5xx et 429, y compris les importations et les téléchargements de données ou de métadonnées.

Il est important que vous compreniez le fonctionnement de l'intervalle exponentiel entre les tentatives tronqué dans les cas suivants :

Si vous utilisez la console Google Cloud Platform, celle-ci envoie des requêtes à Cloud Storage en votre nom et gère tout intervalle qui s'avère nécessaire entre les tentatives.

Exemple d'algorithme

Un algorithme d'intervalle exponentiel entre les tentatives relance les requêtes de manière exponentielle, en augmentant le temps d'attente entre les tentatives jusqu'à ce que la durée maximale de l'intervalle exponentiel soit atteinte. Par exemple :

  1. Envoyez une requête à Cloud Storage.

  2. Si la requête échoue, attendez 1 + random_number_milliseconds secondes, puis effectuez une nouvelle tentative.

  3. Si la requête échoue, attendez 2 + random_number_milliseconds secondes, puis effectuez une nouvelle tentative.

  4. Si la requête échoue, attendez 4 + random_number_milliseconds secondes, puis effectuez une nouvelle tentative.

  5. Poursuivez ainsi jusqu'à atteindre la valeur maximum_backoff.

  6. Continuez d'attendre et de relancer la requête jusqu'à atteindre le nombre maximal de tentatives, mais n'augmentez pas le temps d'attente entre les tentatives.

où :

  • Le temps d'attente correspond à min(((2^n)+random_number_milliseconds), maximum_backoff), avec n incrémenté de 1 pour chaque itération (requête).

  • random_number_milliseconds correspond à un nombre aléatoire de millisecondes inférieur ou égal à 1 000. Cela permet d'éviter les cas où de nombreux clients se retrouvent synchronisés pour une raison quelconque et effectuent tous une nouvelle tentative en même temps, en envoyant des requêtes par vagues synchronisées. La valeur de random_number_milliseconds est recalculée après chaque nouvelle tentative de la requête.

  • La valeur maximum_backoff est généralement définie sur 32 ou 64 secondes. La valeur appropriée dépend du cas d'utilisation.

Vous pouvez continuer à effectuer des nouvelles tentatives une fois que vous avez atteint la valeur maximum_backoff. Au-delà de ce point, il n'est pas nécessaire de continuer à augmenter la durée de l'intervalle exponentiel entre les tentatives. Par exemple, si un client utilise une valeur maximum_backoff de 64 secondes, une fois celle-ci atteinte, il peut effectuer une nouvelle tentative toutes les 64 secondes. À un certain moment, vous devez empêcher les clients d'effectuer des tentatives à l'infini.

Le temps d'attente des clients entre les tentatives et le nombre de tentatives qu'ils peuvent effectuer dépendent du cas d'utilisation et des conditions du réseau. Par exemple, les clients mobiles d'une application peuvent avoir besoin d'effectuer davantage de tentatives et à des intervalles plus longs que les clients de bureau de la même application.

Si les nouvelles tentatives de requête échouent après le dépassement de la valeur maximum_backoff plus tout temps supplémentaire autorisé pour les nouvelles tentatives, signalez ou enregistrez une erreur à l'aide de l'une des méthodes répertoriées sur la page Assistance et aide.

Exemples de mise en œuvre

Voici des exemples d'intervalle exponentiel entre les tentatives tronqué utilisés avec Cloud Storage :

Voici des exemples d'intervalle exponentiel entre les tentatives mis en œuvre dans les bibliothèques clientes que vous pouvez utiliser avec Cloud Storage :

  • La bibliothèque Retrying pour Python.

  • Les bibliothèques clientes Google Cloud pour Node.js peuvent automatiquement utiliser des stratégies d'intervalle exponentiel entre les tentatives pour relancer des requêtes avec le paramètre autoRetry.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.