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 envoyées à Memorystore pour Valkey Erreurs de code de réponse HTTP 5xx et 429.

Il est important de comprendre le fonctionnement de l'intervalle exponentiel entre les tentatives Les applications clientes qui utilisent l'API REST Memorystore pour Valkey directement.

Si vous utilisez la console Google Cloud, celle-ci envoie les à Memorystore for Valkey en votre nom et gère tout cela entre les tentatives.

Exemple d'algorithme

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

  1. Envoyez une requête à Memorystore pour Valkey.

  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 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.

L'intervalle maximal entre les tentatives et le nombre maximal de nouvelles tentatives pour un client dépendent des conditions 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 du nombre maximal de tentatives, signalez ou enregistrez une erreur à l'aide de l'une des méthodes répertoriées sur la page Assistance.