Comportamento di ripetizione - AWS SDKse 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 di ripetizione

Il comportamento Riprova include le impostazioni relative al modo in cui il SDKs tentativo di ripristino degli errori risultanti dalle richieste effettuate a Servizi AWS.

Configura questa funzionalità utilizzando quanto segue:

retry_mode- condiviso AWS configimpostazione dei file
AWS_RETRY_MODE- variabile d'ambiente
aws.retryMode- proprietà JVM del sistema: solo Java/Kotlin

Specifica in che modo il nostro strumento di sviluppo tenta di SDK riprovare.

Valore predefinito: questo valore è specifico del tuo. SDK Controlla la tua SDK guida specifica o SDK la tua base di codice predefinitaretry_mode.

Valori validi:

  • standard— (Consigliato) Il set consigliato di regole per i nuovi tentativi AWS SDKs. Questa modalità include un set standard di errori che vengono ripetuti e regola automaticamente il numero di tentativi per massimizzare la disponibilità e la stabilità. Questa modalità è sicura per l'uso in applicazioni multi-tenant. Il numero massimo predefinito di tentativi con questa modalità è tre, a meno che non max_attempts sia configurata in modo esplicito.

  • adaptive— Una modalità di riprova, adatta solo per casi d'uso specializzati, che include la funzionalità della modalità standard e la limitazione automatica della velocità lato client. Questa modalità di riprova non è consigliata per le applicazioni multi-tenant, a meno che non si prenda cura di isolare i tenant delle applicazioni. Per ulteriori informazioni, consulta Scelta tra le standard modalità e adaptive riprova. Questa modalità è sperimentale e potrebbe modificare il comportamento in futuro.

  • legacy— (Non consigliato) Specifico per te SDK (consulta la tua SDK guida specifica o la tua base SDK di codice).

max_attempts- condiviso AWS configimpostazione dei file
AWS_MAX_ATTEMPTS- variabile d'ambiente
aws.maxAttempts- proprietà JVM del sistema: solo Java/Kotlin

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 retry_mode èlegacy: utilizza un valore predefinito specifico per il tuo SDK (consulta la tua SDK guida specifica o la tua base SDK di codice per i max_attempts valori predefiniti).

  • Se lo retry_mode èstandard: effettua tre tentativi.

  • Se lo retry_mode èadaptive: effettua tre tentativi.

Valori validi: numero maggiore di 0.

Scelta tra le standard modalità e adaptive riprova

Ti consigliamo di utilizzare la modalità standard Riprova a meno che tu non sia sicuro che il tuo utilizzo sia più adatto. adaptive

Nota

La adaptive modalità presuppone che stiate raggruppando i client in base all'ambito in cui il servizio di backend può limitare le richieste. Se non lo fai, le limitazioni di una risorsa potrebbero ritardare le richieste di una risorsa non correlata se utilizzi lo stesso client per entrambe le risorse.

Standard Adattabile
Casi d'uso delle applicazioni: tutti. Casi d'uso dell'applicazione:
  1. Non sensibile alla latenza.

  2. Il client accede solo a una singola risorsa oppure state fornendo la logica per raggruppare i client separatamente in base alla risorsa di servizio a cui si accede.

Supporta l'interruzione del circuito per impedire che riprovino durante le SDK interruzioni. Supporta l'interruzione del circuito per impedire che riprovino durante le interruzioni. SDK
Utilizza un backoff esponenziale con jitterato in caso di guasti. Utilizza durate di backoff dinamiche per cercare di ridurre al minimo il numero di richieste non riuscite, in cambio del potenziale aumento della latenza.
Non ritarda mai il primo tentativo di richiesta, ma solo i tentativi successivi. Può rallentare o ritardare il tentativo di richiesta iniziale.

Se si sceglie di utilizzare la adaptive modalità, l'applicazione deve creare client progettati in base a ciascuna risorsa che potrebbe essere limitata. Una risorsa, in questo caso, è ottimizzata in modo più preciso e non si limita a pensare a ciascuna di esse Servizio AWS. Servizi AWS possono avere dimensioni aggiuntive che utilizzano per limitare le richieste. Usiamo il servizio Amazon DynamoDB come esempio. DynamoDB utilizza Regione AWS oltre all'accesso alla tabella per le richieste di accelerazione. Ciò significa che una tabella a cui accede il tuo codice potrebbe essere limitata più di altre. Se il codice utilizza lo stesso client per accedere a tutte le tabelle e le richieste a una di tali tabelle sono limitate, la modalità di riprova adattiva ridurrà la frequenza di richieste per tutte le tabelle. Il tuo codice dovrebbe essere progettato per avere un client per egion-and-table coppia R. Se riscontri una latenza inaspettata durante l'utilizzo della adaptive modalità, consulta le specifiche AWS guida alla documentazione relativa al servizio in uso.

Dettagli sull'implementazione della modalità Riprova

Il AWS SDKsutilizza i token bucket per decidere se ritentare una richiesta e (nel caso della modalità adaptive retry) con quale rapidità inviare le richieste. Due bucket di token vengono utilizzati daSDK: un bucket di token retry e un bucket di token di frequenza di richiesta.

  • Il bucket retry token viene utilizzato per determinare se SDK disabilitare temporaneamente i nuovi tentativi per proteggere i servizi upstream e downstream durante le interruzioni. I token vengono acquisiti dal bucket prima di tentare di riprovare e i token vengono restituiti al bucket quando le richieste hanno esito positivo. Se il bucket è vuoto quando viene tentato un nuovo tentativo, non riproverà la richiesta. SDK

  • Il bucket del token del tasso di richiesta viene utilizzato solo nella modalità di adaptive ripetizione per determinare la frequenza di invio delle richieste. I token vengono acquisiti dal bucket prima dell'invio di una richiesta e i token vengono restituiti al bucket a una velocità determinata dinamicamente in base alle risposte di limitazione restituite dal servizio.

Di seguito è riportato lo pseudocodice di alto livello per entrambe le modalità e retry: standard 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:

Questo passaggio viene utilizzato solo in adaptive modalità riprova. Questo passaggio acquisisce un token dal bucket di token del tasso di richiesta. Se un token non è disponibile, aspetterà che ne diventi disponibile uno. È SDK possibile che siano disponibili opzioni di configurazione per non riuscire a completare la richiesta anziché attendere. I token presenti nel bucket vengono ricaricati a una velocità determinata dinamicamente, in base al numero di risposte di limitazione ricevute dal client.

SendHTTPRequest:

Questo passaggio invia la richiesta a AWS. La maggior parte AWS SDKsutilizza una HTTP libreria che utilizza i pool di connessioni per riutilizzare una connessione esistente quando si effettua una HTTP richiesta. In genere, le connessioni vengono riutilizzate se una richiesta non è riuscita a causa di errori di limitazione, ma non se una richiesta fallisce a causa di un errore transitorio.

RequestBookkeeping:

I token vengono aggiunti al token bucket se la richiesta ha esito positivo. Solo per la modalità adaptive riprova, la frequenza di riempimento del bucket di token del tasso di richiesta viene aggiornata in base al tipo di risposta ricevuta.

Retryable:

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

  • Il codice HTTP di stato.

  • Il codice di errore restituito dal servizio.

  • Errori di connessione, definiti come qualsiasi errore ricevuto SDK in caso di mancata ricezione di una HTTP risposta dal servizio.

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

MAX_ATTEMPTS:

Il numero massimo di tentativi predefinito è impostato dall'retry_modeimpostazione, a meno che l'impostazione non venga sovrascritta dall'impostazione. max_attempts

HasRetryQuota

Questo passaggio acquisisce un token dal bucket retry token. Se il bucket del token Retry è vuoto, la richiesta non verrà ritentata.

ExponentialBackoff

Per un errore che può essere ritentato, il ritardo tra i tentativi viene calcolato utilizzando un backoff esponenziale troncato. Viene SDKs utilizzato 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 parteSDKs. Consulta la tua SDK guida o il codice sorgente specifici per conferma.

Compatibilità con AWS SDKs

Di seguito sono SDKs supportate le funzionalità e le impostazioni descritte in questo argomento. Vengono annotate eventuali eccezioni parziali. Tutte le impostazioni delle proprietà di JVM sistema sono supportate da AWS SDK for Java e il SDK AWS for Kotlin solo.

SDK Supportato Note o ulteriori informazioni
AWS CLI v2
SDKper C++
SDKper Go V2 (1.x)
SDKper Go 1.x (V1) No
SDKper Java 2.x
SDKper Java 1.x JVMproprietà del sistema: usa com.amazonaws.sdk.maxAttempts invece diaws.maxAttempts; usa com.amazonaws.sdk.retryMode invece diaws.retryMode.
SDKper JavaScript 3.x
SDKper JavaScript 2.x No Supporta un numero massimo di tentativi, un backoff esponenziale con jitter e un'opzione per un metodo personalizzato per il backoff dei tentativi.
SDKper Kotlin
SDKper. NET3.x
SDKper PHP 3.x
SDKper Python (Boto3)
SDKper Ruby 3.x
SDKper Rust
SDKper Swift
Utensili per PowerShell