Backoff esponenziale

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 Valkey che restituiscono errori di codice di risposta HTTP 5xx e 429.

È importante capire come funziona il backoff esponenziale se stai creando applicazioni client che utilizzano direttamente l'API REST di Memorystore for Redis.

Se utilizzi la console Google Cloud, questa invia le richieste a Memorystore for Valkey per tuo conto e gestisce eventuali operazioni di backoff necessarie.

Algoritmo di esempio

Un algoritmo di backoff esponenziale riprova le richieste aumentando in modo esponenziale il tempo di attesa tra i tentativi fino a un tempo di backoff massimo. Un esempio è:

  1. Invia una richiesta a Memorystore for Valkey.

  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 un intervallo di maximum_backoff.

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