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
Nota
Per informazioni sulla comprensione del layout delle pagine delle impostazioni o sull'interpretazione della tabella Support by AWS SDKs and tools riportata di seguito, vedereInformazioni sulle pagine delle impostazioni di questa guida.
Il comportamento Riprova include 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
- impostazione dei AWSconfig
file condivisiAWS_RETRY_MODE
- variabile d'ambienteaws.retryMode
- Proprietà del sistema JVM: solo Java/Kotlin-
Specifica in che modo l'SDK o lo strumento di sviluppo tenta di riprovare.
Valore predefinito: questo valore è specifico del tuo SDK. Controlla la tua guida SDK specifica o la base di codice del tuo SDK per verificare se è predefinita.
retry_mode
Valori validi:
-
standard
— (Consigliato) Il set consigliato di regole per i tentativi ripetuti. 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 il tuo SDK (consulta la guida SDK specifica o la base di codice dell'SDK).
-
max_attempts
- impostazione di file condivisi AWSconfig
AWS_MAX_ATTEMPTS
- variabile d'ambienteaws.maxAttempts
- Proprietà del sistema JVM: 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 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 permax_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.
-
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 l'SDK riprovi durante le interruzioni. | Supporta l'interruzione del circuito per impedire all'SDK di riprovare durante le interruzioni. |
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 Regione AWS utilizza inoltre la tabella a cui si accede per limitare le richieste. Ciò significa che una tabella a cui accede il 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 codice deve essere progettato per avere un client per coppia. Region-and-table Se riscontri una latenza inaspettata durante l'utilizzo della adaptive
modalità, consulta la guida alla AWS documentazione specifica per il servizio che stai utilizzando.
Dettagli sull'implementazione della modalità Riprova
AWS SDKs Utilizzano i token bucketadaptive
retry) con quale rapidità inviare le richieste. L'SDK utilizza due bucket di token: un bucket di token retry e un bucket di token di frequenza di richiesta.
-
Il bucket retry token viene utilizzato per determinare se l'SDK debba 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, l'SDK non riproverà a eseguire la richiesta.
-
Il bucket del token del tasso di richiesta viene utilizzato solo in modalità di
adaptive
ripetizione per determinare la velocità 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. Il tuo SDK potrebbe avere opzioni di configurazione disponibili per fallire 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 SDKs utilizza una libreria HTTP che utilizza pool di connessioni per riutilizzare una connessione esistente quando si effettua una richiesta HTTP. 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 temporaneo.
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:
-
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 tentativi SDK 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 parte SDKs. Consulta la guida SDK o il codice sorgente specifici per avere conferma.
Support by AWS SDKs and tools
Di seguito sono SDKs supportate le funzionalità e le impostazioni descritte in questo argomento. Vengono annotate eventuali eccezioni parziali. Tutte le impostazioni delle proprietà del sistema JVM sono supportate solo da AWS SDK per Java and the. SDK AWS for Kotlin
SDK | Supportato | Note o ulteriori informazioni |
---|---|---|
AWS CLI v2 | Sì | |
SDK per C++ | Sì | |
SDK per Go V2 (1.x) |
Sì | |
SDK per Go 1.x (V1) | No | |
SDK per Java 2.x | Sì | |
SDK per Java 1.x | Sì | Proprietà del sistema JVM: usa com.amazonaws.sdk.maxAttempts invece diaws.maxAttempts ; usa invece di. com.amazonaws.sdk.retryMode aws.retryMode |
SDK per 3.x JavaScript | Sì | |
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 Kotlin | Sì | |
SDK per.NET 3.x | Sì | |
SDK per PHP 3.x | Sì | |
SDK per Python (Boto3) |
Sì | |
SDK per Ruby 3.x | Sì | |
SDK per Rust | Sì | |
SDK per Swift | Sì | |
Strumenti per PowerShell | Sì |