Backoff esponenziale

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:

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 è:

  1. Effettua una richiesta a Memorystore per Redis.

  2. Se la richiesta non va a buon fine, attendi 1 + random_number_milliseconds secondi e riprova.

  3. Se la richiesta non va a buon fine, attendi 2 + random_number_milliseconds secondi e riprova.

  4. Se la richiesta non va a buon fine, attendi 4 + random_number_milliseconds secondi e riprova.

  5. E così via, fino a maximum_backoff volta.

  6. 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), con n 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 di random_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.