Comportamento dei nuovi tentativi - AWSSDK e strumenti

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Comportamento dei nuovi tentativi

Il comportamento Riprova include impostazioni relative al modo in cui gli SDK tentano di ripristinare gli errori derivanti dalle richieste effettuate a. Servizi AWS

Configura questa funzionalità utilizzando quanto segue:

max_attempts- impostazione dei AWS config file condivisi
AWS_MAX_ATTEMPTS- variabile d'ambiente

Speciifica il numero massimo di tentativi da effettuare su una richiesta.

Valore predefinito: se questo valore non è specificato, il valore predefinito dipende dal valore dell'retry_modeimpostazione:

  • Se lo retry_mode èlegacy: utilizza un valore predefinito specifico per il tuo SDK (consulta la guida SDK specifica o la base di codice dell'SDK per max_attempts i valori predefiniti).

  • Se lo retry_mode èstandard: effettua tre tentativi.

  • Se lo retry_mode èadaptive: effettua tre tentativi.

Valori validi: numero maggiore di 0.

retry_mode- impostazione condivisa AWS config dei file
AWS_RETRY_MODE- variabile d'ambiente

Specifica in che modo l'SDK o lo strumento di sviluppo tenta di riprovare.

Valore predefinito: legacy è la strategia di riprova predefinita.

Valori validi:

  • legacy— Specifico per il tuo SDK (consulta la tua guida SDK specifica o la base di codice dell'SDK).

  • standard— Il set standard di regole di riprova tra gli SDK. AWS Questa modalità include un set standard di errori che vengono ripetuti e il supporto per le quote di tentativi. Il numero massimo predefinito di tentativi con questa modalità è tre, a meno che non max_attempts sia configurata in modo esplicito.

  • adaptive— Una modalità sperimentale di ripetizione che include le funzionalità della modalità standard ma include la limitazione automatica sul lato client. Poiché questa modalità è sperimentale, potrebbe modificare il comportamento in futuro.

Di seguito è riportato lo pseudocodice di alto livello per entrambe le standard modalità e retry: adaptive

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

Di seguito sono riportati ulteriori dettagli sui componenti utilizzati nello pseudocodice:

GetSendToken:

I token bucket vengono utilizzati solo in modalità riprova. adaptive I token bucket impongono una frequenza massima di richieste richiedendo la disponibilità di un token per avviare una richiesta. Il client SDK è configurabile per fallire rapidamente la richiesta o bloccarla finché non diventa disponibile un token.

Client Side Rate Limiting è un algoritmo che inizialmente consente di effettuare richieste in qualsiasi momento, fino al limite consentito dal token. Tuttavia, dopo che viene rilevata una risposta limitata, il client rate-of-request viene limitato di conseguenza. La soglia di token viene inoltre aumentata di conseguenza se vengono ricevute risposte positive.

Grazie alla limitazione adattiva della velocità, gli SDK possono rallentare la velocità di invio delle richieste per soddisfare meglio la capacità di. Servizi AWS

SendHTTPRequest:

La maggior parte degli AWS SDK utilizza una libreria HTTP che utilizza pool di connessioni in modo da poter riutilizzare una connessione esistente quando si effettua una richiesta HTTP. In genere, le connessioni vengono riutilizzate quando si riprovano le richieste a causa di errori di limitazione. Le richieste non vengono riutilizzate quando si riprova a causa di errori temporanei.

RequestBookkeeping:

La quota di tentativi deve essere aggiornata se la richiesta ha esito positivo. Solo per la modalità adaptive riprova, la variabile di stato maxsendrate viene aggiornata in base al tipo di risposta ricevuta.

Retryable:

Questo passaggio determina se una risposta può essere ritentata in base a quanto segue:

  • Codice di stato HTTP .

  • Il codice di errore restituito dal servizio.

  • Errori di connessione, definiti come qualsiasi errore ricevuto dall'SDK in cui non viene ricevuta una risposta HTTP dal servizio.

Gli errori transitori (codici di stato HTTP 400, 408, 500, 502, 503 e 504) e gli errori di limitazione (codici di stato HTTP 400, 403, 429, 502, 503 e 509) possono essere tutti potenzialmente ritentati. Il comportamento dei nuovi tentativi dell'SDK viene determinato in combinazione con codici di errore o altri dati del servizio.

MAX_ATTEMPTS:

Specificato dall'impostazione del config file o dalla variabile di ambiente.

HasRetryQuota

Questo passaggio limita le richieste di nuovi tentativi richiedendo che un token sia disponibile nel bucket delle quote di tentativi. I gruppi di quote per nuovi tentativi sono un meccanismo per impedire nuovi tentativi che difficilmente avranno successo. Queste quote dipendono dall'SDK, spesso dipendono dal client e talvolta dipendono anche dagli endpoint del servizio. I token di quota di tentativi disponibili vengono rimossi quando le richieste hanno esito negativo per vari motivi e ripristinati quando hanno esito positivo. Quando non rimangono token, il ciclo di ripetizione dei tentativi viene chiuso.

ExponentialBackoff

Per un errore che può essere riprovato, il ritardo tra i tentativi viene calcolato utilizzando un backoff esponenziale troncato. Gli SDK utilizzano un backoff esponenziale binario troncato con jitter. L'algoritmo seguente mostra come viene definita la quantità di tempo per dormire, in secondi, per una risposta a una richiesta: i

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

Nell'algoritmo precedente, si applicano i seguenti valori:

b = random number within the range of: 0 <= b <= 1

r = 2

MAX_BACKOFF = 20 secondsper la maggior parte degli SDK. Per conferma, consulta la guida SDK o il codice sorgente specifici.

Compatibilità con SDKS AWS

I seguenti SDK supportano le funzionalità e le impostazioni descritte in questo argomento. Vengono annotate eventuali eccezioni parziali.

SDK Supportato Note o ulteriori informazioni
AWS CLI v2
SDK per C++
SDK per Go V2 (1.x)
SDK per Go 1.x (V1) No
SDK per Java 2.x
SDK per Java 1.x
SDK per 3.x JavaScript
SDK per 2.x JavaScript No Supporta un numero massimo di tentativi, un backoff esponenziale con jitter e un'opzione per un metodo personalizzato per il backoff dei tentativi.
SDK per.NET 3.x
SDK per PHP 3.x
SDK per Python (Boto3)
SDK per Ruby 3.x