Ritenta le richieste non riuscite

In questa pagina vengono descritte le best practice per riprovare a inviare le richieste non riuscite all'API Identity and Access Management (IAM).

Per le richieste che puoi riprovare in sicurezza, ti consigliamo di utilizzare il backoff esponenziale troncato con il tremolio introdotto.

Panoramica del backoff esponenziale troncato

Ogni richiesta all'API IAM può avere esito positivo o negativo. Se l'applicazione ripete le richieste non riuscite senza attendere, potrebbe inviare un numero elevato di nuovi tentativi a IAM in un breve periodo di tempo. Di conseguenza, potresti superare quote e limiti che si applicano a ogni risorsa IAM nel tuo progetto Google Cloud.

Per evitare l'attivazione di questo problema, ti consigliamo vivamente di utilizzare il backoff esponenziale troncato con il jitter introdotto, una strategia standard di gestione degli errori per le applicazioni di rete. Con questo approccio, un client ritenta periodicamente una richiesta non riuscita, con ritardi crescenti in modo esponenziale tra un nuovo tentativo e l'altro. Tra i tentativi viene aggiunto anche un piccolo ritardo casuale, noto come tremolio. Questo ritardo casuale contribuisce a impedire un'onda sincronizzata di nuovi tentativi da parte di più client, noto anche come problema di gruppo di tuono.

Algoritmo di backoff esponenziale

Il seguente algoritmo implementa il backoff esponenziale troncato con jitter:

  1. Invia una richiesta a IAM.
  2. Se la richiesta non va a buon fine, attendi 1 + random-fraction secondi, quindi riprova.
  3. Se la richiesta non va a buon fine, attendi 2 + random-fraction secondi, quindi riprova.
  4. Se la richiesta non va a buon fine, attendi 4 + random-fraction secondi, quindi riprova.
  5. Continua questa sequenza, attendendo 2n + random-fraction secondi dopo ogni nuovo tentativo, fino a un massimo di maximum-backoff volta.
  6. Dopo deadline secondi, interrompi i nuovi tentativi di richiesta.

Utilizza i seguenti valori per implementare l'algoritmo:

  • Prima di ogni nuovo tentativo, il tempo di attesa è min((2n + random-fraction), maximum-backoff), con n che inizia da 0 e aumenta di 1 per ogni nuovo tentativo.
  • Sostituisci random-fraction con un valore frazionario casuale minore o uguale a 1. Utilizza un valore diverso per ogni nuovo tentativo. L'aggiunta di questo valore casuale impedisce ai client di essere sincronizzati e di inviare un numero elevato di nuovi tentativi contemporaneamente.
  • Sostituisci maximum-backoff con il tempo massimo, in secondi, di attesa tra un nuovo tentativo e l'altro. I valori tipici sono 32 o 64 (25 o 26) secondi. Scegli il valore più adatto al tuo caso d'uso.
  • Sostituisci deadline con il numero massimo di secondi per continuare a inviare nuovi tentativi. Scegli un valore che rifletta il tuo caso d'uso. Ad esempio, in una pipeline di integrazione continua/deployment continuo (CI/CD) che non è altamente sensibile al tempo, potresti impostare deadline su 300 secondi (5 minuti).

Tipi di errori da riprovare

Utilizza questa strategia di ripetizione per tutte le richieste all'API IAM che restituiscono i codici di errore 500, 502, 503 o 504.

Facoltativamente, puoi utilizzare questa strategia di ripetizione per le richieste all'API IAM che restituiscono il codice di errore 404. Le letture IAM sono coerenti. Di conseguenza, le risorse potrebbero non essere visibili subito dopo la creazione, il che può causare errori di tipo 404.

Inoltre, utilizza una versione modificata di questa strategia per i nuovi tentativi per tutte le richieste all'API IAM che restituiscono il codice di errore 409 e lo stato ABORTED. Questo tipo di errore indica un problema di contemporaneità; ad esempio, è possibile che tu stia tentando di aggiornare un criterio di autorizzazione che un altro client ha già sovrascritto. Per questo tipo di errore, devi sempre riprovare l'intera serie di richieste lettura, modifica e scrittura, utilizzando il backoff esponenziale troncato con il tremolio introdotto. Se riprovi solo con l'operazione di scrittura, la richiesta continuerà a non riuscire.

Passaggi successivi