Il backoff esponenziale è una strategia standard di gestione degli errori per le applicazioni di rete in cui un client riprova periodicamente a effettuare una richiesta non riuscita con crescenti ritardi tra le richieste. I client dovrebbero utilizzare il backoff esponenziale per tutte le richieste a Memorystore per Redis che restituiscono errori dei codici di risposta HTTP 5xx
e 429
.
Capire come funziona il backoff esponenziale è importante se:
Creare applicazioni client che utilizzano direttamente l'API REST di Memorystore for Redis.
Accesso a Memorystore for Redis tramite una libreria client. Tieni presente che alcune librerie client, come la libreria client di Memorystore for Redis per Node.js, hanno un backoff esponenziale integrato.
Se utilizzi la console Google Cloud, la console invia le richieste a Memorystore for Redis per tuo conto e gestisce eventuali backoff necessari.
Algoritmo di esempio
Un algoritmo di backoff esponenziale tenta di ripetere le richieste in modo esponenziale, aumentando il tempo di attesa tra un nuovo tentativo e l'altro fino a un tempo di backoff massimo. Un esempio è:
Effettua una richiesta a Memorystore per Redis.
Se la richiesta non va a buon fine, attendi 1 +
random_number_milliseconds
secondi e riprova.Se la richiesta non va a buon fine, attendi 2 +
random_number_milliseconds
secondi e riprova.Se la richiesta non va a buon fine, attendi 4 +
random_number_milliseconds
secondi e riprova.E così via, fino a
maximum_backoff
volta.Continua ad attendere e riprovare fino al numero massimo di nuovi tentativi, ma non aumentare il periodo di attesa tra un nuovo tentativo e l'altro.
dove:
Il tempo di attesa è min((2^
n
)+random_number_milliseconds
),maximum_backoff
), conn
incrementato di 1 per ogni iterazione (richiesta).random_number_milliseconds
è un numero casuale di millisecondi minore o uguale a 1000. Ciò consente di evitare i casi in cui molti client vengono sincronizzati a causa di qualche situazione e tutti riprovano contemporaneamente, inviando le richieste in wave sincronizzate. Il valore dirandom_number_milliseconds
deve essere ricalcolato dopo ogni richiesta di nuovo tentativo.maximum_backoff
dura in genere 32 o 64 secondi. Il valore appropriato dipende dal caso d'uso.
Puoi continuare a riprovare una volta raggiunta la soglia di maximum_backoff
.
I nuovi tentativi dopo questo punto non devono necessariamente aumentare il tempo di backoff. Ad esempio, se un client utilizza un tempo maximum_backoff
di 64 secondi, dopo aver raggiunto questo valore, il client può riprovare ogni 64 secondi. A un certo punto, ai client dovrebbe essere impedito di riprovare all'infinito.
Il backoff massimo e il numero massimo di nuovi tentativi utilizzati da un client dipendono dal caso d'uso e dalle condizioni della rete. Ad esempio, i client mobile di un'applicazione potrebbero dover riprovare più volte e per intervalli più lunghi rispetto ai client desktop della stessa applicazione.
Se le richieste di nuovo tentativo non vanno a buon fine dopo aver superato il numero massimo di nuovi tentativi, segnala o registra un errore utilizzando uno dei metodi elencati in Ricevere assistenza.