Backoff esponenziale

Il backoff esponenziale è una strategia standard di gestione degli errori 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 for Valkey che restituiscono errori con codici 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 Valkey.

Se utilizzi la Google Cloud console, questa invia le richieste a Memorystore for Valkey per tuo conto e gestisce qualsiasi backoff necessario.

Algoritmo di esempio

Un algoritmo di backoff esponenziale riprova le richieste aumentando esponenzialmente il tempo di attesa tra i nuovi tentativi fino a un tempo di backoff massimo. Ecco 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 via così fino a un tempo di maximum_backoff.

  6. Continua ad attendere e riprovare fino a un numero massimo di nuovi tentativi, ma non aumentare il periodo di attesa tra i nuovi 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 casi in cui molti client vengono sincronizzati da una determinata situazione e riprovano tutti contemporaneamente, inviando richieste in onde sincronizzate. Il valore di random_number_milliseconds deve essere ricalcolato dopo ogni richiesta di nuovi tentativi.

  • maximum_backoff è in genere 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 nuovi tentativi dopo questo punto non devono continuare ad aumentare il tempo di backoff. Ad esempio, se un client utilizza un tempo di 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 nuovi 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 nuovi tentativi 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 Richiedere assistenza.