Intervalle exponentiel entre les tentatives

L'intervalle exponentiel entre les tentatives est une stratégie standard 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 utiliser un intervalle exponentiel entre les tentatives pour toutes les requêtes pour Memorystore pour Redis qui renvoient des erreurs de code de réponse HTTP 5xx et 429.

Il est important de comprendre le fonctionnement de l'intervalle exponentiel entre les tentatives dans les cas suivants :

  • Créer des applications clientes utilisant directement l'API REST Memorystore pour Redis

  • Accès à Memorystore pour Redis via une bibliothèque cliente Notez que certaines bibliothèques clientes, telles que la bibliothèque cliente Memorystore pour Redis pour Node.js, disposent d'un intervalle exponentiel entre les tentatives.

Si vous utilisez Google Cloud Console, celle-ci envoie des requêtes à Memorystore pour Redis en votre nom et gère tout intervalle nécessaire.

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 à Memorystore pour Redis.

  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 doit être recalculée après chaque demande de nouvelle tentative.

  • 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 délai d'attente maximal et le nombre maximal de tentatives utilisées par un client 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 demandes de nouvelle tentative échouent après avoir dépassé le nombre maximal de tentatives, signalez ou enregistrez une erreur à l'aide de l'une des méthodes répertoriées dans la section Assistance.