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
Vous accédez à Memorystore pour Redis via une bibliothèque cliente. Notez qu'un intervalle exponentiel entre les tentatives est directement intégré dans certaines bibliothèques clientes, telles que la bibliothèque cliente Memorystore pour Redis pour Node.js.
Si vous utilisez la console Google Cloud, elle envoie des requêtes à Memorystore pour Redis en votre nom et gère tout intervalle 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 :
Envoyez une requête à Memorystore pour Redis.
Si la requête échoue, attendez 1 +
random_number_milliseconds
secondes, puis effectuez une nouvelle tentative.Si la requête échoue, attendez 2 +
random_number_milliseconds
secondes, puis effectuez une nouvelle tentative.Si la requête échoue, attendez 4 +
random_number_milliseconds
secondes, puis effectuez une nouvelle tentative.Poursuivez ainsi jusqu'à atteindre la valeur
maximum_backoff
.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
), avecn
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 derandom_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.