Il backoff esponenziale è una strategia di gestione degli errori standard per le applicazioni di rete in cui un client riprova periodicamente una richiesta non riuscita con ritardi crescenti tra le richieste. I client devono utilizzare il backoff esponenziale per tutte le richieste a Memorystore per Redis che restituiscono errori di codice di risposta HTTP 5xx
e 429
.
È importante comprendere il funzionamento del backoff esponenziale se:
Creazione di applicazioni client che utilizzano direttamente l'API REST di Memorystore for Redis.
Accedere a Memorystore for Redis tramite una libreria client. Tieni presente che alcune librerie client, come la libreria client Memorystore per Redis per Node.js, hanno il backoff esponenziale integrato.
Se utilizzi la console Google Cloud, questa invia le richieste a Memorystore for Redis per tuo conto e gestisce eventuali operazioni di backoff necessarie.
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 intervallo di
maximum_backoff
.Continua ad attendere e riprovare fino al numero massimo di nuovi tentativi, ma non aumentare il periodo di attesa tra i tentativi.
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. In questo modo si evitano i casi in cui molti client vengono sincronizzati da qualche situazione e riprovano tutti contemporaneamente, inviando richieste in ondate sincronizzate. Il valore dirandom_number_milliseconds
deve essere ricalcolato dopo ogni richiesta di nuovo tentativo.maximum_backoff
in genere dura 32 o 64 secondi. Il valore appropriato dipende dal caso d'uso.
Puoi continuare a riprovare una volta raggiunto il tempo di maximum_backoff
.
I tentativi successivi a questo punto non devono continuare ad aumentare il tempo di backoff. Ad esempio, se un client utilizza un tempo maximum_backoff
di 64 secondi, dopo aver raggiunto questo valore può riprovare ogni 64 secondi. A un certo punto,
i client devono essere impediti di riprovare all'infinito.
Il backoff massimo e il numero massimo di tentativi utilizzati da un client 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 più lunghi rispetto ai client desktop della stessa applicazione.
Se le richieste 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 Ricevere assistenza.