Il backoff esponenziale è una strategia standard di gestione degli errori
per le applicazioni di rete in cui un client ritenta periodicamente una
richiesta non riuscita con ritardi crescenti tra le richieste. I client devono utilizzare
il backoff esponenziale per tutte le richieste a Memorystore for Redis che restituiscono
errori di codice di risposta HTTP 5xx
e 429
.
Comprendere il funzionamento del backoff esponenziale è importante se:
Creazione di 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 Memorystore for Redis per Node.js, hanno un backoff esponenziale integrato.
Se utilizzi la Google Cloud console, questa invia richieste a Memorystore for Redis per tuo conto e gestisce qualsiasi backoff necessario.
Algoritmo di esempio
Un algoritmo di backoff esponenziale riprova le richieste in modo esponenziale, aumentando il tempo di attesa tra i tentativi fino a un tempo di backoff massimo. Un esempio è:
Invia una richiesta a Memorystore for 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 un tempo di
maximum_backoff
.Continua ad attendere e riprovare fino al numero massimo di nuovi tentativi, ma non aumentare il periodo di attesa tra un 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 inferiore o uguale a 1000. In questo modo si evitano casi in cui molti client vengono sincronizzati da una determinata situazione e tutti riprovano contemporaneamente, inviando richieste in onde sincronizzate. Il valore dirandom_number_milliseconds
deve essere ricalcolato dopo ogni richiesta di riprova.maximum_backoff
dura in genere 32 o 64 secondi. Il valore appropriato dipende dal caso d'uso.
Puoi continuare a riprovare una volta raggiunto il tempo maximum_backoff
.
I nuovi tentativi dopo questo punto non devono continuare ad aumentare il tempo di backoff. Ad esempio, se un client utilizza un valore maximum_backoff
di 64 secondi, dopo aver raggiunto questo valore, il client può riprovare ogni 64 secondi. A un certo punto, è necessario impedire ai client di effettuare ulteriori tentativi indefinitamente.
Il backoff massimo e il numero massimo di tentativi che un client utilizza dipendono dal caso d'uso e dalle condizioni di rete. Ad esempio, i client mobile di un'applicazione potrebbero dover riprovare più volte e per intervalli di tempo più lunghi rispetto ai client desktop della stessa applicazione.
Se i tentativi di ripetizione non vanno a buon fine dopo aver superato il numero massimo di tentativi, segnala o registra un errore utilizzando uno dei metodi elencati in Richiedi assistenza.