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 AWSconfig
impostazione dei fileAWS_RETRY_MODE
- variabile d'ambienteaws.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 predefinita
retry_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 nonmax_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 AWSconfig
impostazione dei fileAWS_MAX_ATTEMPTS
- variabile d'ambienteaws.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_mode
impostazione:-
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 imax_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:
|
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 bucketadaptive
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_mode
impostazione, 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 seconds
per 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 | Sì | |
SDKper C++ | Sì | |
SDKper Go V2 (1.x) |
Sì | |
SDKper Go 1.x (V1) | No | |
SDKper Java 2.x | Sì | |
SDKper Java 1.x | Sì | JVMproprietà del sistema: usa com.amazonaws.sdk.maxAttempts invece diaws.maxAttempts ; usa com.amazonaws.sdk.retryMode invece diaws.retryMode . |
SDKper JavaScript 3.x | Sì | |
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 | Sì | |
SDKper. NET3.x | Sì | |
SDKper PHP 3.x | Sì | |
SDKper Python (Boto3) |
Sì | |
SDKper Ruby 3.x | Sì | |
SDKper Rust | Sì | |
SDKper Swift | Sì | |
Utensili per PowerShell | Sì |